Problème avec une fonction dans Python 2.5 - Quel devrait être l'argument; Si une déclaration «si» est appropriée; Faire fonctionner un accumulateur
-
15-11-2019 - |
Question
J'apprécierais l'aide sur ce code. J'essaie d'obtenir une fonction pour imprimer les résultats. Le programme prend des nombres aléatoires et détermine s'ils sont égaux ou étranges. Ça marche. Il est censé donner alors un décompte du nombre de nombres impairs et combien sont uniformes.
J'essaie de construire cela dans la fonction "Tally_Status_Count" mais je ne peux pas le faire fonctionner. J'ai initialement configuré les variables «pair_total» et «odd_total» sous forme de variables globales, mais j'ai ensuite essayé de les déplacer dans la fonction.
Je suis perdu. Toute aide serait appréciée.
Salutations
Code:
import random
even_total = 0
odd_total = 0
def main():
print 'Number\tStatus'
print'______________'
for count in range (10):
number = random.randint(1, 10)
status = odd_even(number)
print number, '\t', status
tally_status_count(odd_even)
#Function to determine odd or even status
def odd_even(number):
if (number % 2) == 0:
status = 'Even'
else:
status = 'Odd'
return status
#Function to tally odd and even counts
def tally_status_count(odd_even):
even_total = 0
odd_total = 0
for status in range (status):
if status == 'Even':
even_total = even_total + 1
else:
odd_total = odd_total + 1
print
print 'The total count of even numbers is: ', even_total
print 'The total count of odd numbers is: ', odd_total
main()
La solution
Je vois plusieurs problèmes avec votre code.
Problème 1: Tally_Status_Count prend un argument qui n'est jamais utilisé. Il n'y a rien de mal à cela, mais c'est étrange et cela signifie que vous ne savez probablement pas comment faire ce que vous essayez de faire.
Problème 2: Tally_Status_Count utilise une variable qui n'existe pas, «statut». Je suppose que vous vouliez probablement que le statut soit passé comme argument à la fonction. Dans ce cas, la définition de la fonction devrait ressembler à ceci:
def tally_status_count(status):
Lorsque vous résolvez le problème 2, vous vous retrouvez avec le problème 3, qui est ...
Problème 3: MALFORMED FOR-LOOP. Cette:
for status in range (status):
Est un non-sens et ne fonctionnera pas. Range () est une fonction qui prend des entiers et renvoie une liste des entiers. Si «Status» est une chaîne, vous ne pouvez pas l'utiliser avec Range ().
Problème 4: Vous obtenez le statut uniquement pour le dernier numéro aléatoire, pas pour tous. Chaque fois que vous exécutez cette ligne:
status = odd_even(number)
L'ancienne valeur du statut est jetée.
C'est probablement le code que vous censé pour écrire:
import random
even_total = 0
odd_total = 0
def main():
print 'Number\tStatus'
print'______________'
statuses = [] #the status for each random number is added to this list
for count in range (10):
number = random.randint(1, 10)
current_status = odd_even(number)
print number, '\t', current_status
statuses += [current_status] #add to the list
tally_status_count(statuses) #go through the list and total everything up
#Function to determine odd or even status
def odd_even(number):
if (number % 2) == 0:
status = 'Even'
else:
status = 'Odd'
return status
#Function to tally odd and even counts
def tally_status_count(statuses):
even_total = 0
odd_total = 0
for status in statuses:
if status == 'Even':
even_total = even_total + 1
else:
odd_total = odd_total + 1
print
print 'The total count of even numbers is: ', even_total
print 'The total count of odd numbers is: ', odd_total
main()
Autres conseils
import random
def main():
even_total = 0
odd_total = 0
for i in xrange(10):
nbr = random.randint(1,10)
if nbr % 2 == 0:
even_total += 1
else:
odd_total += 1
print 'even total', even_total
print 'odd total', odd_total
if __name__ == "__main__":
main()
Cela ressemble à des devoirs. Quelles sont les exigences exactes? Avez-vous besoin de séparer le Tally-er et Odd_Even en fonctions distinctes? C'est plus facile si vous ne le faites pas. Quels arguments doivent-ils accepter? Que doivent-ils revenir?
Retourner une chaîne à partir de ce odd_even
La fonction est bizarre. Les cordes sont laides. J'écrirai une fonction comme:
def is_even(nbr):
return nbr % 2 == 0
À la place. La tally
La fonction pourrait renvoyer un tuple (even_count, odd_count)
Si vous le vouliez. Il devrait probablement accepter une fonction et une liste comme arguments.
Ainsi:
import random
def is_even(nbr):
return nbr % 2 == 0
def tally(func, iterable):
yes = 0
no = 0
for x in iterable:
if func(x):
yes += 1
else:
no += 1
return (yes, no)
def main():
even_total, odd_total = tally(is_even, xrange(10))
print 'even total', even_total
print 'odd total', odd_total
if __name__ == "__main__":
main()
Déplacer les totaux dans la fonction n'a pas fonctionné pour vous car ils sont limités à la portée de la fonction. Une fois la fonction, ils cessent d'exister. Vous devez les retourner ou les garder comme des globaux / les définir dans une portée plus élevée (vous pouvez également écrire une classe).