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,但是对于蓝色和黄色元组也给出两个错误)。
答案 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。