2014-09-19 109 views
1

我在每个字符串之间用换行符输入。输入错误:Python

输入:: 哈

年底将通过在1至5的数注意我需要接受这个列表的严格在蟒蛇GS在我的名单将包括: [“哈”,“哈”,“熙”,“熙”,“豪”]

很多谷歌搜索后,我尝试下面的代码:

lines = [] 

sentinel = range(6) 

for i in iter(raw_input, [str(s) for s in sentinel]): 
    if i=='': 
     continue 
    else: 
     lines.append(i) 

print lines 

我不知道为什么,但它进入了一个无限循环。

请帮我一把!

+0

什么是在输入的到底有多少? – Kevin 2014-09-19 00:21:40

回答

1

问题与方式iter() interpets的sentinel。这是一个单值,表示迭代结束。对于你的哨兵被击中,raw_input()实际上必须返回一个相同的列表,这永远不会发生(因为它当然返回str)。

如果你包了一点东西,你可以把它的工作:

sentinel = range(6) 

def anything_but(values): 
    values = map(str, values) 
    def inner(): 
     i = raw_input() 
     if i in values: 
      return None 
     return i 
    return inner 

lines = [] 
for i in iter(anything_but(sentinel), None): 
    lines.append(i) 

print lines 

在这种情况下,None是,如果输入数字0-5,将返回的标记值。顺便说一句,如果你想提到1-5,你应该使用range(1, 6)来代替。

然而,你可能会更好送达发电机做:

sentinel = range(6) 

def anything_but(values): 
    values = map(str, values) 
    i = raw_input() 
    while i not in values: 
     yield i 
     i = raw_input() 

lines = [] 
for i in anything_but(sentinel): 
    lines.append(i) 

print lines 
0

你可以只使用一个while循环:

inp = raw_input() 
while inp not in {"1","2","3","4","5"}: 
    if not inp: 
     continue 
    else: 
     lines.append(inp) 
    inp = raw_input() 
print lines 

在你的问题的输出使用输入:

['Ha', 'Ha', 'Hee', 'Hee', 'Ho']