无法弄清楚我的方法有什么问题

时间:2015-02-12 02:41:24

标签: python

我有一个列表/字典,用于存储与数字相对应的单词:

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!

知道为什么会这样做吗?谢谢

4 个答案:

答案 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!')