Python 如何在列表中替换和保存输出

Python 如何在列表中替换和保存输出,python,list,for-loop,tkinter,replace,Python,List,For Loop,Tkinter,Replace,为我自己开发了一个hangman游戏,我真的被困在了一个地方,一旦在一个单词中找到了一个正确的字母,它就会保存在那个索引位置,我正试图用return语句在Tkinter的gui中实现它,在这里使用print,这样循环就不会结束。不过,我将只显示用于替换word中字母的代码,而不是整个游戏代码,以尽量避免混淆任何人 主要问题-找不到保存用户在word中输入的字母的方法,每次它返回新的输出 import random underlines = [] def random_gen_word():

为我自己开发了一个hangman游戏,我真的被困在了一个地方,一旦在一个单词中找到了一个正确的字母,它就会保存在那个索引位置,我正试图用return语句在Tkinter的gui中实现它,在这里使用print,这样循环就不会结束。不过,我将只显示用于替换word中字母的代码,而不是整个游戏代码,以尽量避免混淆任何人

主要问题-找不到保存用户在word中输入的字母的方法,每次它返回新的输出

import random

underlines = []


def random_gen_word():
    list_of_words = ['happy']
    begin = 0
    end = len(list_of_words) - 1
    global random_word
    random_word = list_of_words[random.randint(begin, end)]
    return random_word


saved_random_word = random_gen_word().upper()


def user_input_for_game():
    while True:
        underlines = ["_"] * len(saved_random_word)
        user_input = input("Enter text: ").upper()
        if user_input in saved_random_word:
            # # below for loop will index every letter i = x from the random word
            # # if statement for checking if input was the letter in the word
            for i, x in enumerate(saved_random_word):
                if x == user_input:
                    underlines.insert(i, user_input)
                    # removes underline once a letter is found in underlines/word
                    underlines.pop()
                    print(underlines)


print(user_input_for_game())

它没有保存,因为您在循环开始时不断重置它(
下划线
)。把它放在前面,像这样:

def user_input_for_game():
    underlines = ["_"] * len(saved_random_word) # outside
    while True:
        user_input = input("Enter text: ").upper()
        if user_input in saved_random_word:
           
            for i, x in enumerate(saved_random_word):
                if x == user_input:
                    underlines.insert(i, user_input)
                    
                    underlines.pop()
                    print(underlines)
试运行:

Enter text: h
['H', '_', '_', '_', '_']
Enter text: a
['H', 'A', '_', '_', '_']
Enter text: p
['H', 'A', 'P', '_', '_']
['H', 'A', 'P', 'P', '_']
Enter text: y
['H', 'A', 'P', 'P', 'Y']
编辑:您可以在函数外部有一个
下划线
变量:

underlines = ["_"] * len(saved_random_word)

submit_button_actions

只需在
user\u input\u中为游戏
设置一个参数,并在最后返回更新的下划线。

这是因为
下划线
在while循环中重新初始化。另外,您不需要使用
insert()
pop()
来更新
下划线
,只需使用
下划线[i]
来更新所需的字符即可。最后,您可以使用
random.choice()
来简单地
random\u gen\u word()

以下是修改后的代码:

随机导入
def random_gen_word():
单词列表=['happy']
返回random.choice(单词列表)
为游戏()定义用户输入:
已保存的\u random\u word=random\u gen\u word().upper()
下划线=[“\u”]*len(保存的\u随机\u字)
尽管如此:
用户输入=输入(“输入文本:”).upper()
对于枚举中的i,x(保存的\u随机\u字):
如果x==用户输入:
下划线[i]=用户输入
打印(下划线)
用于游戏()的用户输入

我希望它能这么简单,但是,我使用while循环只是为了解决这个问题,而在Tkinter中没有使用循环。一旦我点击“提交”按钮,哪个命令就是你写的功能,它总是被重置,有什么建议吗?假设我需要在函数完成后保存变量“下划线”,并将新结果添加到it@DanieliusPolujanskis我会更新答案。这就是我一直在寻找的,我按照你提到的那样做了,将下划线作为参数传入,它现在运行得非常完美,非常感谢!Np,很高兴我能帮忙!:)