2013-12-23 89 views
3

我正在编写一个程序,该程序不断要求用户输入名称,直到输入单词END, 这时它会打印出名称列表。循环并追加名称列表

代码:

import getpass 
import time 
import sys 
print("Welcome " + getpass.getuser() + "...") 
time.sleep(0.25) 
print("This program, powered by Python, it will ask you to enter names...") 
time.sleep(0.5) 
print("...once you have finished, enter END to print off your list") 
names = [] 
for i in names: 
    name = input("Please enter a name: ") 
    if name == "END": 
     print(names) 
     sys.exit() 
    names.append(name) 

的问题是,在程序退出之前就尝试为循环做。

为什么会发生这种情况,应该如何解决?

回答

10

它的发生,因为变量names是空因此没有什么遍历

所以使用while循环,而不是:

while True: 
    name = input("Please enter a name: ") 
    if name == "END": 
     print(names) 
     break 
    names.append(name) 

注意:要退出循环使用break代替sys.exit()后全部: 简单比复杂好

2

names是一个空列表。

names = [] 

因为它没有项目,迭代它没有效果。


>>> names = [] 
>>> for name in names: 
...  print(name) 
... 
>>> names = ['tim', 'timmy'] 
>>> for name in names: 
...  print(name) 
... 
tim 
timmy 
>>> 
3

要得到的名单:

的Python 3+

names = list(iter(lambda: input('Enter name (leave blank to finish): '), '')) 

的Python 2.7+

names = list(iter(lambda: raw_input('Enter name (leave blank to finish): '), '')) 

用法:

>>> names = list(iter(lambda: input('Enter name (leave blank to finish): '), '')) 
Enter name (leave blank to finish): bob 
Enter name (leave blank to finish): cindy 
Enter name (leave blank to finish): 
>>> names 
['bob', 'cindy'] 

在自己的代码实现:

import getpass 
import time 
import sys 
print("Welcome " + getpass.getuser() + "...") 
time.sleep(0.25) 
print("This program, powered by Python, it will ask you to enter names...") 
time.sleep(0.5) 
print("...once you have finished, enter END to print off your list") 
print(list(iter(lambda: input('Enter name (END to finish): '), 'END'))) 

示范:

>>> 
Welcome inbar... 
This program, powered by Python, it will ask you to enter names... 
...once you have finished, enter END to print off your list 
Enter name (END to finish): abe 
Enter name (END to finish): bob 
Enter name (END to finish): END 
['abe', 'bob']