重新键入字典

时间:2012-04-17 01:33:51

标签: python random dictionary

所以我有一个Python分配,我需要使用字典来保存菜单项,然后随机重新键入并重新排序菜单,以便我可以更改打印出的菜单选项的顺序。以下是我的代码示例:

ChoiceOne = "Rekey Menu"
ChoiceTwo = "Quit"
menu = {'1':ChoiceOne, '2':ChoiceTwo,}
userChoice = input("Please Enter the Integer for Your Menu Choice: ")

while userChoice not in menu.keys():
    print("Invalid Input")
    userChoice = input("Please Enter the Integer for Your Menu Choice: ")

if menu[userChoice] == ChoiceOne:
    menu = rekey(menu)
elif menu[userChoice] == ChoiceTwo:
    quit()

当用户选择不退出时,上面的代码循环,反复重复打印菜单。以下是我的rekey()函数

def rekey(menu):
    rekey = {}
    keylist = random.sample(range(10), 2)
    for i, item in zip(keylist, menu ):
        rekey[i] = menu[item]
    return rekey

我的问题似乎出现在我检查菜单选项的用户输入是否有效的行中。最初,输入除“1”或“2”以外的任何内容将导致程序进入While循环,直到输入有效输入。然而,在重新键入菜单之后,总是触发“当userPPoice不在menu.keys()中”这一行,并且没有任何输入匹配以继续该程序。

我试图通过打印字典中的新密钥并检查userChoice是否与其中任何一个匹配来找到问题,但即使我选择了有效的新密钥,程序似乎也认为没有我输入的是有效密钥。

我希望我已经很好地理解了这个问题,感谢你提前帮助!!

2 个答案:

答案 0 :(得分:4)

在第一种情况下,菜单键是字符串,在重新生成后,它们是 ints 。您需要转换键或用户输入才能匹配。

答案 1 :(得分:1)

根据documentationinput(x)功能相当于eval(raw_input(x))。这意味着输入" 1"在输入提示相当于键入" 1"在python解释器中,所以你得到整数 1。

正如SpliFF已经指出的那样,您需要确保在菜单字典中使用整数键,或者您可以使用字符串键进行字典并切换到使用raw_input函数阅读用户的选择。