2016-03-01 160 views
0

我在Python 3.5.1中创建一个hang子手游戏,除了涉及猜测部分时,一切都进展顺利。当信件被正确猜测时,我会打印“华友世界”,当它没有被正确猜测时,我会画出额外的身体部位。我的问题是,即使一个字母被正确地猜测它还将利用其它身体部位:Hang子手绘制无论正确的字母(Python,乌龟)

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文件夹中包含正文部分的文件。

回答

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循环完成后执行图纸。

+0

http://i.imgur.com/7uTKA1b.png HTTP://i.imgur .com/TGdiX3I.png 我尝试过,但我得到奇怪的结果。 –

+0

我无法将第二个屏幕截图中的输出完全匹配到源代码窗格中显示的代码部分。你的程序确实有更多问题。例如,为什么你要迭代用户输入中的所有字符?不仅应该看第一个字符吗?每个输入将至少有一个换行符,与您的测试字中的任何字母都不匹配。我还不清楚这条消息会如何打印三次。 –

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()