for i,j在listname.iteritems()中:不起作用

时间:2014-01-07 22:56:06

标签: python iteration

下面的代码是我正在编码的一个口袋妖怪的版画,而列表中的口袋妖怪都是一个类的实例。该脚本不会抛出任何错误,但无论我输入什么内容,它都会转到else语句“那不是口袋妖怪”并调用player1_select() ......

pokemon_dict = {"joe":joe,"alex":alex,"ginger beard man":ginger_beard_man,"mark":mark}
pokemon_list = ["joe","alex","mark","ginger beard man"]
def player1_select():
    print pokemon_list
    response = raw_input("trainer 2 wants to battle!  which pokemon do you choose!?")
    for i,j in pokemon_dict.iteritems():
        if response == i:
            print "player1 selected " + i + "!"  
            p1 = j
            player2_select(p1)
        else:
            print "That's not a pokemon! yet..."
            player1_select()

2 个答案:

答案 0 :(得分:2)

您正在测试字典中的每个元素,这意味着除零或一个之外的所有元素都不匹配。对于所有那些不匹配的else分支执行。

但是,你有一本字典;不要循环,只需在映射中直接查找条目:

response = raw_input("trainer 2 wants to battle!  which pokemon do you choose!?")
if response in pokemon_dict:
    print "player1 selected " + response + "!"  
    p1 = pokemon_dict[response]
    player2_select(p1)
else:
    print "That's not a pokemon! yet..."
    player1_select()
如果有匹配的密钥,

response in pokemon_dict为True。

答案 1 :(得分:1)

您以任意顺序遍历字典中的每个键/值对。如果您检查的第一个不是用户输入的内容,则将执行else块。你可能想要这样的东西:

if response in pokemon_dict: # Checks if `response` is a key in the dictionary
    print "player1 selected " + i + "!"
    p1 = pokemon_dict[response]
    player2_select(p1)
else:
    print "That's not a pokemon! yet..."
    player1_select()