10
votes

Déclaration de retour dans pour boucles

J'ai travaillé sur cette mission pour l'école et je ne peux tout simplement pas comprendre ce que je ne peux pas obtenir ce programme de fonctionner correctement. J'essaie d'obtenir le programme pour permettre à l'utilisateur d'entrer trois animaux. Il ne me permet que d'en entrer un. Je sais que cela a à voir avec mon placement de l'instruction de retour dans la fonction make_list code> mais ne peut pas comprendre comment le réparer.

Voici mon code: P>

import pet_class

#The make_list function gets data from the user for three pets. The function
# returns a list of pet objects containing the data.
def make_list():
    #create empty list.
    pet_list = []

    #Add three pet objects to the list.
    print 'Enter data for three pets.'
    for count in range (1, 4):
        #get the pet data.
        print 'Pet number ' + str(count) + ':'
        name = raw_input('Enter the pet name:')
        animal = raw_input('Enter the pet animal type:')
        age = raw_input('Enter the pet age:')

        #create a new pet object in memory and assign it
        #to the pet variable
        pet = pet_class.PetName(name,animal,age)

        #Add the object to the list.
        pet_list.append(pet)

        #Return the list
        return pet_list

pets = make_list()


1 commentaires

6 Réponses :


2
votes

Retirez un indent avant le retour.


1 commentaires

Un peu plus de détails aiderait: la boucle de fabrication de make_list () traverse une fois et revenait ensuite. Dans l'indentation de Python est important.



8
votes

Vous avez juste besoin de renvoyer le pet_list code> en dehors de la boucle pour la boucle, de sorte que la boucle a fini de fonctionner.

def make_list():
    pet_list = []

    print 'Enter data for three pets.'
    for count in range (1, 4):
        print 'Pet number ' + str(count) + ':'
        name = raw_input('Enter the pet name:')
        animal=raw_input('Enter the pet animal type:')
        age=raw_input('Enter the pet age:')
        print

        pet = pet_class.PetName(name,animal,age)
        pet_list.append(pet)

    return pet_list


1 commentaires

Merci beaucoup. Incroyable comment quelque chose de si simple peut être négligé



3
votes

Vous avez la déclaration de retour au niveau d'indentation incorrect. Il devrait être à la même profondeur que la déclaration. Avoir le retour dans la boucle le fait sortir de la boucle.


0 commentaires

0
votes

Votre espacement est éteint. Retour PET_LIST est dans la portée de la boucle pour.


0 commentaires

30
votes

Je ne réponds à nouveau que de nouveau, car je remarque que votre sujet indique déjà le problème, et personne n'a donné une ... une explication théorique, ici .. théorique étant trop gros mot dans ce cas, mais peu importe.

Votre problème est précisément que vous mettez la déclaration de retour à l'intérieur de la boucle. La boucle pour la boucle exécute chaque affirmation pour cependant tant de fois. Si l'une de vos déclarations est un retour, la fonction reviendra quand elle le frappe. Cela donne un sens dans, par exemple, le cas suivant: xxx

ici, la fonction iTère jusqu'à ce qu'elle trouve où l'aiguille est dans la fointe, puis renvoie cet index (il y a une fonction intégrée pour le faire, de toute façon). Si vous souhaitez que la fonction soit exécutée pendant de nombreuses fois, vous le direz, vous devez mettre le retour après la boucle pour la boucle, non à l'intérieur, la fonction reviendra après la mise hors tension de la boucle xxx

(à nouveau, il y a une fonction intégrée pour le faire aussi)


0 commentaires