Рисование палача независимо от правильных букв (питон, черепаха)

Я создаю игру в палач на Python 3.5.1, и все идет хорошо, за исключением тех случаев, когда дело доходит до догадок. Я печатаю "ура", когда письмо угадано правильно, и я рисую дополнительную часть тела, когда оно угадано неправильно. Моя проблема в том, что даже когда письмо угадано правильно, оно также нарисует другую часть тела:

import drawHangman
import turtle
import random

def main():
    window = turtle.Screen()
    window.setup(400, 400, 200, 200)
    HG = turtle.Turtle()  
    drawHangman.default(HG)

    wrongGuess = 0 
    maxGuesses = 0

    lines = open('wordlist.txt').read().splitlines()
    myline =random.choice(lines)
    print(myline)

    name = input("Welcome to hangman! What is your name? \n")
    print("Welcome", name + "! \n The rules are as follows: \n 1) No looking at answer list! \n 2) Do not have fun!! \n 3) No hacking my game!")
    tos = input("Do you accept the rules provided above? Type Yes or No. \n")

    if tos == "no": 
        print("Who cares! The rules suck anyways!")
    elif tos == "yes": 
        print("HI")
    else:
        print("You don't listen very well. I guess proceed ugh")

    while maxGuesses < 6:
        guess = input("Please input your guess!")
        maxGuesses += 1
        for char in myline:
            if char in guess:
                print("Hurray")
        else:
            wrongGuess += 1
            print("You have", 6 - maxGuesses, "guesses left!")

        if wrongGuess == 1:
            drawHangman.drawHead(HG)
        elif wrongGuess == 2:
            drawHangman.drawBody(HG) 
        elif wrongGuess == 3:
            drawHangman.drawLeftArm(HG)
        elif wrongGuess == 4:
            drawHangman.drawRightArm(HG)
        elif wrongGuess == 5:
            drawHangman.drawLeftLeg(HG)
        elif wrongGuess == 6:
            drawHangman.drawRightLeg(HG)

    else: 
        playAgain = input('Do you want to play again? (yes or no)')
        if playAgain == "yes":
            drawHangman.reset(HG)
            main()
        else:
            print("Thanks for playing!")
            return

main()

Я знаю, что это как-то связано с той частью, где другие говорят, что это неправильное письмо, но я не могу понять это. Я попытался сделать отступ еще на один пробел, но он просто выводит количество оставшихся догадок. Любая помощь приветствуется.

PS. drawHangman.* подпрограммы приходят из файла, который я имею в моей папке src, который содержит части тела.

2 ответа

Помимо проблемы, поднятой в вашем вопросе, кажется, есть и другие проблемы с вашим кодом: ваша логика предполагает / жестко кодирует 6-буквенные слова; вы повторяете игровую логику на самом деле рекурсивную; вы не закрываете файл слов после того, как закончите с ним; ваша обработка вопросов да / нет не надежна; вы повторяете вещи, вспоминая main(), что нужно сделать только один раз; Вы не отображаете текущий правильный / неизвестный статус письма.

Ниже доработка вашего кода для решения этих проблем и реальной игры в палача:

from turtle import Turtle, Screen
import random
import drawHangman

BODY_PARTS = [ \
    drawHangman.drawHead, drawHangman.drawBody, drawHangman.drawLeftArm, \
    drawHangman.drawRightArm, drawHangman.drawLeftLeg, drawHangman.drawRightLeg, \
    ]

MAXIMUM_WRONG_GUESSES = len(BODY_PARTS)

def hangman(HG):
    drawHangman.default(HG)

    with open('wordlist.txt') as file:
        lines = file.read().splitlines()

    word = random.choice(lines)
    letters = set(word)
    wrongGuesses = 0

    while letters and wrongGuesses < MAXIMUM_WRONG_GUESSES:

        for letter in word:
            print("*" if letter in letters else letter, end="")
        print(".")

        letter = input("Please input your guess: ")

        if letter in letters:
            print("Hurray!")
            letters.remove(letter)
        else:
            BODY_PARTS[wrongGuesses](HG)
            wrongGuesses += 1
            print("You have", MAXIMUM_WRONG_GUESSES - wrongGuesses, "guesses left!")

def main():
    screen = Screen()
    screen.setup(400, 400, 200, 200)

    turtle = Turtle()
    playAgain = True

    print("Welcome to hangman!")
    name = input("Enter your name: ")
    print("Welcome", name + "!")
    print("The rules are as follows:")
    print(" 1) No looking at answer list!")
    print(" 2) Do not have fun!!")
    print(" 3) No hacking my game!")

    tos = input("Do you accept the rules provided above? (yes or no): ")

    if tos.lower().startswith("n"):
        print("Who cares! The rules suck anyways!")
    elif tos.lower().startswith("y"):
        print("Hi")
    else:
        print("You don't listen very well. I guess proceed ugh")

    while playAgain:
        hangman(turtle)

        answer = input('Do you want to play again? (yes or no): ')
        playAgain = answer.lower().startswith("y")

        if playAgain:
            drawHangman.reset(turtle)
        else:
            print("Thanks for playing!")

main()

Вы отступили else пункт (и следующие строки) неправильно - это входит в сферу for цикл вместо if заявление:

    for char in myline:
        if char in guess:
            print("Hurray")
        else:
            wrongGuess += 1
            print("You have", 6 - maxGuesses, "guesses left!")

        if wrongGuess == 1:
            drawHangman.drawHead(HG)
        # etc.

Как вы написали, else пункт и все рисунки выполняются только после полного for цикл закончился.

Другие вопросы по тегам