0

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

此外,返回后列表为空。

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

4 回答 4

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
于 2010-11-20T16:52:29.870 回答
2

我认为您的调用代码意外调用readnames()了两次。

于 2010-11-20T16:51:04.123 回答
1

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

readNames()
print readNames()

您调用readNames,按计划从标准输入读取这些名称,正确return读取名称,然后将结果丢弃,因为您没有将其分配给任何东西(names = readNames())。然后你readNames 再次调用,它看起来好像它没有退出循环(它确实退出了,但你告诉它再次循环)。你finish再次输入,第二次调用readNames结束,没有输入任何名称(nameList是一个局部变量,所以在函数执行结束后它会丢失),所以你回来了[]

为了解决这个问题,(1)复习你的一般编程知识;)和(2)做一些类似的事情names = readNames()print names.

于 2010-11-20T16:54:35.907 回答
-1

你能不换吗

如果 addList == '完成':
        返回名称列表
        休息

如果 addList == '完成':
        返回名称列表
        计数 = -1

?

詹姆士

于 2010-11-20T16:48:40.367 回答