在for循环中的返回语句

12

我一直在为学校的作业努力,但是我无法弄清楚为什么我的程序无法正常工作。我试图让程序允许用户输入三个动物,但它只允许我输入一个。我知道这与我在make_list函数中放置返回语句有关,但无法弄清如何修复。

这是我的代码:

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()
6个回答

31

你的问题在于,你把return语句放在了for循环里面。for循环会根据次数执行其中的每条语句...如果其中一条语句是return语句,那么函数在遇到它时就会返回。例如下面这种情况是有道理的:

def get_index(needle, haystack):
    for x in range(len(haystack)):
        if haystack[x] == needle:
            return x

这里的函数会迭代直到找到针在干草堆中的位置,然后返回该索引(虽然有一个内置函数可以执行此操作,任何方式都是list.index())。

如果你想让函数按照你告诉它的次数运行,你必须把返回放在for循环之后,而不是在其中。这样,当控制离开循环后,函数将返回。

def add(numbers):
    ret = 0
    for x in numbers:
        ret = ret + x
    return ret

(尽管如此,也有一个内置函数可以执行此操作,sum()


9
你只需要在 for 循环外返回 pet_list,这样它会在循环运行完后发生。
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

2

你的return语句缩进位置不正确。它应该与for语句在同一层级。将return放在循环内会导致它跳出循环。


1

在返回语句前删除一个缩进。


2
更多细节会更有帮助:make_list()中的for循环只执行一次就返回了。在Python中,缩进非常重要。 - James Khoury

0
你会注意到for循环只运行了一次,因为return语句在if语句内部的循环中。
我现在的代码也遇到了类似的问题:
返回给定数组中偶数int的数量。注意:%“mod”运算符计算余数,例如5%2为1。
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0

def count_evens(nums):
    summary = 0
    for i in nums:

        if i % 2 == 0:
            summary += 1
            return summary    



count_evens([2, 1, 2, 3, 4]) 

如果你想要可视化执行并粘贴我的代码,请访问http://www.pythontutor.com/visualize.html#mode=edit

一旦我将其缩进取消(与for语句相同的深度),它就可以运行多次并给出正确的输出。


-1

你的间距有误。return pet_list 在 for 循环的范围内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接