首页 > 解决方案 > 我的刽子手程序卡在要求输入而不是打印我猜的任何字母

问题描述

我对编程很陌生,我尝试制作一个像刽子手这样的程序。但是我只是不知道为什么它不起作用。它所做的只是要求输入,然后什么也不做。输入只是一遍又一遍地循环,无论我输入什么都没有改变。也欢迎任何关于如何改进我的代码的提示,我觉得我在这里犯了很多错误。


import random

word_list = ["car", "house", "shop", "shoes", "tractor", "microphone", "camera"]

game_state = True

blank_spaces = []
word_picked = ""
already_guessed = []
word_letters = []


def Word_picker():
    word_number = random.randint(0, (len(word_list) - 1))
    word_picked = word_list[word_number]
    word_picked = word_picked.lower()
    word_letters = [char for char in word_picked]

    print("\n")
    print(word_picked)
    print(word_letters)
    print("\n")
    for char in word_letters:
        blank_spaces.append("_ ")


def Printer():
    print("\n \n")
    for x in range(len(blank_spaces)):
        print(blank_spaces[x], end='')


def Main():

    guessed_letter = input("Try a letter:")
    guessed_letter = guessed_letter.lower()

    if guessed_letter in already_guessed:
        print("You've already tried this letter. Try a different one. \n")
        Main()

    for z in word_letters:
        if guessed_letter == word_letters[z]:
            blank_spaces[z] = guessed_letter + " "
            already_guessed.append(guessed_letter)
            Main()

        else:
            print("Incorrect.")
            already_guessed.append(guessed_letter)
            Main()


def Already_guessed():
    for a in already_guessed:
        print("Already guessed letters:" + already_guessed[a] + ", ", end='')


Word_picker()
Printer()

while game_state:
    Already_guessed()
    Printer()
    Main()

标签: python

解决方案


我做了一些改变:

  1. 正如@Barmar 指出的那样,您永远不会返回该Main()函数。我现在循环调用该函数,直到 gam_state 更改为 False。

  2. @Barmar 还指出,您正在使用zas 索引,它为您提供IndexError. z已经是already_guessed[i],所以你不需要那个。

  3. 您只是在本地更改列表Word_picker,这不起作用。我将其更改为返回相应的单词,现在您可以从Main()函数中访问这些单词。

  4. 您在 for 循环中在单词的所有字母上添加了猜测的字母,这并没有破坏您的代码,但它使输出变得可怕,并且更多的猜测会导致您的代码变得不必要的慢。

  5. 然后对您的输出进行一些更改,以便您只在循环之外打印文本,等等。

import random

word_list = ["car", "house", "shop", "shoes", "tractor", "microphone", "camera"]

game_state = True

blank_spaces = []
word_picked = ""
already_guessed = []
word_letters = []


def Word_picker():
    w_number = random.randint(0, (len(word_list) - 1))
    w_picked = word_list[w_number]
    w_picked = w_picked.lower()
    w_letters = [char for char in w_picked]

    print("\n")
    print(w_picked)
    print(w_letters)
    print("\n")
    b_spaces = []
    for char in w_letters:
        b_spaces.append("_ ")
    print(b_spaces)

    return b_spaces, w_picked, w_letters


def Printer():
    print("\n \n")
    for x in range(len(blank_spaces)):
        print(blank_spaces[x], end='')


def Main():

    guessed_letter = input("Try a letter:")
    guessed_letter = guessed_letter.lower()
    print(already_guessed)

    if guessed_letter in already_guessed:
        print("You've already tried this letter. Try a different one. \n")

    for i, z in enumerate(word_letters):
        if guessed_letter == z:
            blank_spaces[i] = guessed_letter + " "

        else:
            print("Incorrect.")

    already_guessed.append(guessed_letter)


def Already_guessed():
    print("Already guessed letters:")
    for a in already_guessed:
        print(a)


blank_spaces, word_picked, word_letters = Word_picker()
Printer()

while game_state:
    Already_guessed()
    Printer()
    Main()

未来工作的一些提示:

  1. 使用print语句或import pdb;pdb.set_trace()用于调试,所以你知道你的代码在做什么

  2. 首先编写简短的小元素并立即测试,不要从头开始编写所有代码并稍后查看。尝试尽早测试运行您的代码,看看它是否按预期运行。

  3. 通常,您只想调用一次 main 函数是一个很好的经验法则。


推荐阅读