2010-11-20 98 views
0

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

适合我的工作(在IDLE中)。除此之外,还有更简单的方法来实现无限循环('while True:'就足够了;为什么要创建一个假变量+条件?我实际上是在寻找'count = -1' ......)。另外,'break'是不需要的('return'退出函数并因此退出循环)。 – delnan 2010-11-20 16:46:33

+0

对我来说工作很好,但有一些注意事项:你可以简单地在while循环中做'while:',你在返回之后也不需要'bre​​ak',因为'break'永远不会到达。 'names = readNames()'对我来说工作得很好。 PS:我已经修好了你的缩进。 – 2010-11-20 16:47:13

回答

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 
+0

感谢您的大力帮助。一直坚持这个很长一段时间。 :) – Hypergiant 2010-11-20 16:58:35

-1

你能不能代替

 
if addList == 'finish': 
     return nameList 
     break 

随着

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

詹姆斯

+1

-1不仅这仍然是多余的(见我和伊沃的评论),它也没有回答这个问题。 – delnan 2010-11-20 16:50:03

+0

同样的事情正在发生。 – Hypergiant 2010-11-20 16:51:02

+0

只需加我两分钱。对不起人。 – Bojangles 2010-11-20 21:41:35

2

我想调用代码被意外调用readnames()两次。

+0

是的,看起来就是发生了什么。删除'print readNames()'后,它按预期中断。 – Hypergiant 2010-11-20 16:53:38

1

啊,你发布你的代码后,我可以看到这个问题:

readNames() 
print readNames() 

你叫readNames,从标准输入设备为已读那些名字计划,正确return读取名称,然后将结果扔掉,因为您不将它分配给任何东西(names = readNames())。然后你再次呼叫readNames,它看起来好像它没有退出循环(它做到了,但你告诉它再次循环)。您再次输入finish,并且第二次调用readNames没有输入任何名称(nameList是局部变量,因此在函数执行结束后丢失),因此您将返回[]。为了解决这个问题,(1)刷新你的一般编程知识;)和(2)做类似names = readNames(); print names

+0

非常感谢您的帮助,不幸的是THC4k击败了你。 :) – Hypergiant 2010-11-20 16:59:21