我正在创建一种数据库,使用从用户读入的列表。当用户输入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
[]
>>>
答案 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
詹姆斯