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

StackOverflow https://stackoverflow.com/questions/5048675

  •  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()
Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top