循环不会破裂

时间:2010-11-20 16:41:43

标签: python list while-loop break

我正在创建一种数据库,使用从用户读入的列表。当用户输入finish时,我希望while循环停止。但是,出于某种原因,我需要输入finish TWICE才能打破循环。

此外,返回后列表为空。

def readNames():
nameList = []
count = 0
while count != -1: #infinite loop
    addList = raw_input("Please enter a name: ")
    if addList == 'finish':
        return nameList
        break
    nameList.append(addList)
    print nameList

我正在调用它并检查它是否与

一起使用
readNames()
print readNames()

此外,这是输出

Please enter a name: Dave
['Dave']
Please enter a name: Gavin
['Dave', 'Gavin']
Please enter a name: Paul
['Dave', 'Gavin', 'Paul']
Please enter a name: Test1
['Dave', 'Gavin', 'Paul', 'Test1']
Please enter a name: finish
Please enter a name: finish
[]
>>>

4 个答案:

答案 0 :(得分:4)

当你这样做时

readNames()
print readNames()

您运行两次功能。在第二次运行时,您只需输入“完成”,这就是为什么您的列表仍然为空。

你想要做的是:

def readNames():
    nameList = []
    while True: #infinite loop
        addList = raw_input("Please enter a name: ")
        if addList == 'finish':
            return nameList
        nameList.append(addList)

# store the result, then print it
names = readNames()
print names

答案 1 :(得分:2)

我认为您的调用代码无意中两次调用readnames()

答案 2 :(得分:1)

啊,在您发布代码后,我可以看到问题:

readNames()
print readNames()

你打电话给readNames,按照计划从stdin中读取这些名字,正确地return读取名称,然后把结果扔掉,因为你没有把它分配给任何东西(names = readNames())。然后你再次打电话给readNames ,看起来好像它没有退出循环(确实如此,但你告诉它再次循环)。您再次键入finish,并且readNames的第二次调用结束时没有输入任何名称(nameList是一个局部变量,所以它在函数执行结束后丢失),所以你回来了[]

要解决这个问题,(1)刷新你的一般编程知识;)和(2)做类似names = readNames()的事情; print names

答案 3 :(得分:-1)

你能否替换

if addList == 'finish':
        return nameList
        break

使用

if addList == 'finish':
        return nameList
        count = -1

詹姆斯