切换嵌套列表的键值对仅适用于第一个列表

时间:2015-08-07 02:51:17

标签: python

我试图制作一个简单的CLI刽子手游戏,它需要获取原始输入并检查任何匹配对的嵌套列表。

这是执行检查的方法:

def check_answer(guess):
    print gboard
    for k in gboard:
        if guess == k[0]:
            k[0],k[1] = k[1],k[0]
            print_board()
            promp_name()
        else:
            promp_name()

制作gboard的方法:

def generate_board():
    """ Makes the board """
    board = len(fword) 
    for i in range(board):
        gboard.append([fword[int(i)], '_'])
    print_board()

这只会产生一个类似于:

的列表
gboard = [['p','_'],['y','_'],['t','_'],['h','_'],['o','_'],['n','_']]

印刷板方法只是打印gboard的值对:

def print_board():
    final_layout = ''
    for key, value in gboard:
        final_layout+=value

    print final_layout

当正确猜出第一个值时:print_board会执行它应该执行的操作并返回第一个未覆盖的字母:

p_____

问题是当我猜到第一个字母之外的任何东西,比如y。当发生这种情况时,我会回来:

p_____

而不是

py____

基本上,键/值对仅在第一个列表中切换。很抱歉包含这么多代码,我只是不知道哪个部分是问题所在。谢谢!

编辑:如果重要,请点击prompt_name函数:

def promp_name():
    user_input = raw_input("Enter a letter: \n")
    user_input = user_input.lower()
    user_guess(user_input)

user_guess只是验证猜测,然后调用check_answer:

user_guess(输入)

此外,gboard是主类

中定义的全局变量

1 个答案:

答案 0 :(得分:2)

似乎问题出在其他部分。如果你发现gboard中的第一个元素不匹配,则运行else部分,在获得输入后以递归方式调用check_answer(),因此它只检查gboard列表中的第一个元素。

在你确定gboard中没有任何字母匹配之前,你很可能不想执行else部分。所以你想在循环外部的其他部分中移动代码,并且可能使用一个标志来指示是否运行它(这是一个标志,指示是否有任何匹配)。

从注释看起来你正在做一个递归方法,如果是这样你需要确保在调用promp_name()之后返回(如果你重新调整,你不需要标志)。示例 -

def check_answer(guess):
    print gboard
    for k in gboard:
        if guess == k[0]:
            k[0],k[1] = k[1],k[0]
            print_board()
            return promp_name()
    return promp_name()