【问题标题】:How to replace and save output in list如何替换和保存列表中的输出
【发布时间】:2021-07-07 13:59:59
【问题描述】:

为自己开发了一个刽子手游戏,并且真的陷入了一旦在一个单词中找到一个正确的字母就会保存在那个索引位置的部分,我正在尝试在 Tkinter 的 gui 中使用 return 语句来实现它,在此处使用 print 以便循环不会结束。但是,我将仅显示用于替换 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())

【问题讨论】:

    标签: python list for-loop tkinter replace


    【解决方案1】:

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

    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 var:

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

    只需在user_input_for_game 中有一个参数,最后返回更新后的下划线。

    【讨论】:

    • 我希望它会那么简单,但是,我只为这个问题使用了 while 循环,Tkinter 中没有使用循环。一旦我单击“提交”按钮,哪个命令是您编写的功能,它总是以重置的形式返回,对此有什么建议吗?想象一下,一旦功能完成,我需要保存变量“下划线”并向其添加新结果
    • @DanieliusPolujanskis 我会更新答案。
    • 这就是我要找的东西,我按照你说的做了,在下划线中作为参数传递,现在它工作得很好,非常感谢!
    • Np,很高兴我能帮上忙! :)
    【解决方案2】:

    这是因为underlines 在while 循环中被重新初始化。此外,您不需要使用insert()pop() 来更新underlines,只需使用underlines[i] 来更新所需的字符。最后,您可以使用random.choice() 来简单地使用random_gen_word()

    以下是修改后的代码:

    import random
    
    def random_gen_word():
        list_of_words = ['happy']
        return random.choice(list_of_words)
    
    def user_input_for_game():
        saved_random_word = random_gen_word().upper()
        underlines = ["_"] * len(saved_random_word)
        while True:
            user_input = input("Enter text: ").upper()
            for i, x in enumerate(saved_random_word):
                if x == user_input:
                    underlines[i] = user_input
            print(underlines)
    
    user_input_for_game()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多