当列表中的元组没有返回任何内容时写入错误

时间:2018-07-06 20:49:41

标签: python list for-loop tuples nested-lists

tup_list = [(111, 'red'), (222, 'blue'), (333, 'green'), (444, 'red')]
x = input(str("colour? "))
for c in tup_list:
    if x in c:
        print(c[0])
    else:
        print("error ")

代码示例^

如果用户输入“红色”,则输出为:

111
error
error
444

如果用户输入“蓝色”,则输出为:

error
222
error
error

等等如果用户未在tup_list中输入“ randomchars”(任何随机字符),则输出为:

error
error
error
error

我知道我的代码为tup_list中的每个c打印“错误”。如果用户输入不在tup_list内,我希望我的代码一次写入“错误”。我也不明白为什么在tup_list中的每个负匹配上都会显示错误(例如,输入红色正确显示111和444,但是对于蓝色和黄色元组也给出两个错误)。

3 个答案:

答案 0 :(得分:2)

该代码正在为'error'中的每个c打印tup_list,这是不匹配的,因为您要遍历c中的每个tup_list。在每次迭代中,您都要检查颜色是否匹配,并在每次迭代中打印颜色是否匹配(代码编号)('error')。您可以使用布尔变量来验证其是否匹配:

tup_list = [(111, 'red'), (222, 'blue'), (333, 'green'), (444, 'red')]
x = input('colour? ')

match = False
for c in tup_list:
    if x in c:
        print(c[0])
        match = True

if not match:
    print('error')

答案 1 :(得分:1)

在这里,我们首先收集匹配项的列表,然后打印它们或出错。

tup_list = [(111, 'red'), (222, 'blue'), (333, 'green'), (444, 'red')]
x = input("colour? ")
matches = [c for c in tup_list if x in c]
if matches:
    print('\n'.join(m[0] for m in matches))
else:
    print("error")

(我还用str("colour? ")替换了"colour? ":它已经是一个字符串,不需要强制转换)

答案 2 :(得分:0)

由于在for循环中有一个if/else语句,它要么找到颜色的匹配项,要么打印错误。如果要打印所有匹配项,并且只打印一次error,则需要稍微不同的分支结构。

我建议:

tup_list = [(111, 'red'), (222, 'blue'), (333, 'green'), (444, 'red')]

matches = []

x = input(str("colour? "))
for c in tup_list:
    if x in c:
        matches.append(c[0])

if matches:
    print("\n".join(map(str, matches)))
else:
     print("error")

请注意,由于join()需要一个字符串列表,因此我必须将每个匹配项都从int映射到str。