2015-02-12 63 views
1

我有一个列表/字典存储与一些像这样对应一个字:想不通这有什么错我的方法

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! 

任何想法,为什么它这样做?谢谢

回答

1

那么你遍历所有的字典,只有每个项目一个匹配,因此它为其他打印​​出Label not in list!。你想从别人删除一个缩进级别和打印后突破(二)

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!') 
4

您正在循环查看数据中的每个条目,因此它正在打印数据中的每个项目。这个问题是一个完美的解释:

data = {'MSG1': 3027, 'MEMORYSPACE': 3036, 'NEWLINE': 3037, 'NEG48': 3038} 
nb = input('Choose a label: ') 
print(data.get(nb, 'Label not in list!')) 

(编辑按下面的评论,如果你仍然想它打印“不在列表中”)

+2

一点点的改进在这里:'print(data.get(nb,'Label not in list!'))' – Eithos 2015-02-12 02:46:30

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!" 
0

它掺杂,因为在你调用的foorloop的每cicle if/else语句将打印以太或以上的东西。只有一个圆圈你可以得到'正确的'答案。

有更好的方法做你想要什么,但我会尝试写一个代码CLOSé尽可能你:

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!') 
相关问题