无论正确的字母(Python,乌龟)都是刽子手绘图

时间:2016-03-01 07:10:07

标签: python turtle-graphics

我在Python 3.5.1中创建一个刽子手游戏,除了猜测部分之外,一切都很顺利。我打印" Hurray"当正确猜出这封信的时候,如果没有正确猜对,我会画出一个额外的身体部位。我的问题是,即使正确猜出一封信,它也会画出另一个身体部分:

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 个答案:

答案 0 :(得分:0)

您错误地缩进了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循环结束后执行。

答案 1 :(得分:0)

除了问题中提出的问题之外,您的代码似乎还有其他问题:您的逻辑假定/硬编码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()