2013-12-23 88 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']