python-3.x 如何在while循环中覆盖多个输出

4nkexdtk  于 2023-03-04  发布在  Python
关注(0)|答案(1)|浏览(141)

我正在为一个课程制作一个简单的"hangman"游戏,游戏已经完成,可以运行了,但是我想覆盖while循环在控制台中打印的输出,这样它看起来更干净,更像一个实际的游戏,而不仅仅是连续的打印语句。
下面是while循环本身和一些背景知识:在程序开始时,从列表word_list中随机选择一个单词,并将其放入变量choected_word;还有一个变量display = [],它是一个列表,其中chosen_word中的每个字母都用"_"填充;然后玩家进行猜测,直到完成6次循环,到达exit()
或者,在到达exit()之前,通过猜测所有字母来退出循环。

while "_" in display:
    counter = 0
    guess = input(f"Please choose a letter: ").lower()

    for letter in chosen_word:
        counter += 1
        if guess == letter:
            display[counter -1] = letter

    if guess in letters_used:
        print("You already used this letter, please choose a different letter.")
        print(" ")
        continue

    letters_used.append(guess)

    if guess not in display:
        loops += 1
        print(stages[loops - 1])
        print(" ".join(display))
        print(f"You guessed {guess}, that's not in the word. You lose a life and have {6 - loops} lives left.")
        print(f"So far you have used the letters: {letters_used}")
        print(" ")
    else:
        print(" ".join(display))
        print(" ")

    if loops == 6:
        print(f"You lose, as expected haha. The word was {chosen_word}")
        exit()

else:
    print("You win, finally...")

例如:单词"apple"。玩家输入"a",控制台填充a _ _ _ _。然后他们可以猜"z",控制台将打印他们选错了,以及带有hangman的相应图片。我希望控制台覆盖之前的图片和a _ _ _ _ _,这样它就只显示hangman,使用的字母,lives left和他需要猜的单词。
这似乎是一个很高的要求,但我知道这是可能做到的,只是不适用于我所尝试的。到目前为止,我尝试使用\r \n,各种for循环与timesys,但我不能集成他们。我认为,如果给出整个代码会更容易,所以这里有一个整个事情的粘贴框:https://codefile.io/f/mOJJ0u1vL00HbYfQ2A7O
总结一下:我想让程序运行,并在每次迭代时覆盖先前打印的刽子手图片、剩余生命和使用的单词,这样它看起来就像一个真正的游戏,而不仅仅是一些连续运行的打印语句。

bqujaahr

bqujaahr1#

我认为下面的 * 几乎 * 是有效的(它需要一点调整来正确地跟踪每种情况下要倒带的行数),使用here中的方法:

def rewind(n):
    """
    Rewind output by n lines.
    """

    for _ in range(n):
        sys.stdout.write("\x1b[1A\x1b[2K")

nr = 3  # default number of lines to "rewind"
textlines = 4

while "_" in display:
    
    counter = 0
    guess = input(f"Please choose a letter: ").lower()

    for letter in chosen_word:
        counter += 1
        if guess == letter:
            display[counter -1] = letter

    if guess in letters_used:
        rewind(textlines)

        print("You already used this letter, please choose a different letter.")
        print(" ")

        textlines = 3
        continue

    letters_used.append(guess)

    if guess not in display:
        if loops == 0:
            textlines = 0
        
        loops += 1
    
        # rewind lines
        rewind(nr + textlines)
        
        print(stages[loops - 1])

        # include size of "hangman" in rewind
        nr = len(stages[loops - 1].split("\n"))

        print(" ".join(display))
        print(f"You guessed {guess}, that's not in the word. You lose a life and have {6 - loops} lives left.")
        print(f"So far you have used the letters: {letters_used}")
        print(" ")

        textlines = 4
    else:
        # rewind lines
        rewind(textlines + 1)

        print(" ".join(display))
        print(" ")

        textlines = 3

    if loops == 6:
        print(f"You lose, as expected haha. The word was {chosen_word}")
        exit()

else:
    print("You win, finally...")

相关问题