我试图制作一个简单的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是主类
中定义的全局变量答案 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()