我有一个列表/字典,用于存储与数字相对应的单词:
MSG1 3027
MEMORYSPACE 3036
NEWLINE 3037
NEG48 3038
如果用户输入单词,我的方法会检索一个数字:
def retrieve_data():
insert_data()
nb = input('Choose a label: ')
for j in data:
a=j[0]
b=j[1]
if a == nb:
print(b)
else:
print('Label not in list!')
所以我应该得到3036,但这是我调用方法时得到的输出:
Choose a label: MEMORYSPACE
Label not in list!
3036
Label not in list!
Label not in list!
知道为什么会这样做吗?谢谢
答案 0 :(得分:4)
您正在遍历数据中的每个条目,因此它会打印数据中的每个项目。这个问题非常适合字典:
data = {'MSG1': 3027, 'MEMORYSPACE': 3036, 'NEWLINE': 3037, 'NEG48': 3038}
nb = input('Choose a label: ')
print(data.get(nb, 'Label not in list!'))
(根据下面的评论编辑,如果您仍然想要打印"不在列表中#34;)
答案 1 :(得分:2)
另一种方法是
dic={"MSG1":3027,"MEMORYSPACE":3036,"NEWLINE":3037,"NEG48":3038}
def retrieve_data():
nb=raw_input("Choose a label: ")
if nb in dic.keys():
print dic[nb]
else:
print "Label not in list!"
答案 2 :(得分:1)
你循环遍历dict的每个项目,只有一个匹配,所以它打印出Label not in list!
为其他项目。你想从else中删除一个缩进级别并在打印后打破(b)
def retrieve_data():
insert_data()
nb = input('Choose a label: ')
for j in data:
a=j[0]
b=j[1]
if a == nb:
print(b)
break
else:
print('Label not in list!')
答案 3 :(得分:0)
它正在使用它,因为在foorloop的每个cicle中你都会调用if / else语句来打印以太这样或那样的东西。只有一个圈子你可以得到'正确'的答案。
有更好的方法可以做你想要的,但我会尝试尽可能地为你的代码写一个代码:
def retrieve_data():
found = False
insert_data()
nb = input('Choose a label: ')
for j in data:
a=j[0]
b=j[1]
if a == nb:
found = True
print(b)
if not found:
print('Label not in list!')
或者
def retrieve_data():
insert_data()
nb = input('Choose a label: ')
i = 0
while i < range(len(data)):
j = data[i]
a=j[0]
b=j[1]
if a == nb:
print(b)
break
i += 1
else:
print('Label not in list!')