2017-10-13 81 views
1

我正在为一个班制作一个简单的hang子手游戏。即使用户得到正确答案,当前程序也会执行图纸的每一步。为什么其他方法不能正常工作?

import turtle 
import random 
import sys 

while True: 
    list = ['report', 'beach', 'mayor', 'score', 'overeat', 'load', 'battery', 'social', 'honor', 'risk'] 

    turns = 10 
    guesses = '' 
    err = 0 

    usedw = random.choice(list) 

    wn = turtle.Screen() 
    draw = turtle.Turtle() 

    length = len(usedw) 

    print("Welcome to hangman your word is", length, "letters long.") 

    while turns > 0: 
     guess = input("Choose a character: ") 
     guesses += guess; 
     lengthr = 0 
     for char in usedw: 
      if char in guesses: 
       print (char,) 
       lengthr += 1; 
      else: 
       err += 1; 
       if err == 1: 
        draw.goto(0,0) 
        draw.down() 
        draw.goto(200,0) 
       elif err == 2: 
        draw.up() 
        draw.goto(0,0) 
        draw.down() 
        draw.goto(0,200) 
       elif err == 3: 
        draw.up() 
        draw.goto(0,200) 
        draw.down() 
        draw.goto(100,200) 
       elif err == 4: 
        draw.up() 
        draw.goto(100,200) 
        draw.down() 
        draw.goto(100,150) 
       elif err == 5: 
        draw.up() 
        draw.goto(100,100) 
        draw.down() 
        draw.circle(25) 
       elif err == 6: 
        draw.up() 
        draw.goto(100,100) 
        draw.down() 
        draw.goto(100,50) 
       elif err == 7: 
        draw.up() 
        draw.goto(75,90) 
        draw.down() 
        draw.goto(125,90) 
       elif err == 8: 
        draw.up() 
        draw.goto(100,50) 
        draw.down() 
        draw.goto(75,35) 
       elif err == 9: 
        draw.up() 
        draw.goto(100,50) 
        draw.down() 
        draw.goto(125,35) 
        print("You loose.") 
        break 
      if lengthr == length: 
       print ("You won!") 
       break 
     cont = input("Would you like to continue (y/n) ") 
     if cont == 'y': 
      print("Alright!") 
     else: 
      print("Thanks for playing!") 
      break 
      sys.exit() 
+0

对于每个他们没有猜到的角色,你都在为他们叮叮当当。 – user2357112

回答

0
import turtle 
import random 
import sys 

while True: 
    list = ['report', 'beach', 'mayor', 'score', 'overeat', 'load', 'battery', 'social', 'honor', 'risk'] 

    turns = 10 
    guesses = set() 
    err = 0 

    usedw = random.choice(list) 

    wn = turtle.Screen() 
    draw = turtle.Turtle() 

    length = len(usedw) 
    p_length = 0 
    c_length = 0 

    print("Welcome to hangman your word is", length, "letters long.") 

    while turns > 0: 
     guess = input("Choose a character: ") 
     # 'previous' guesses length 
     p_length = len(guesses) 
     # Adds unused guesses only 
     guesses.add(guess) 
     # 'current' guesses length 
     c_length = len(guesses) 
     # detect UNIQUE guess entry and guess in usedw 
     if (p_length != c_length and guess in usedw): 
      for char in usedw: 
       if guess == char: 
        print (char,) 
        # decrement remaining chars to match 
        length -= 1 
     else: # either a duplicate/unmatched guess 
      err += 1 
      if err == 1: 
       draw.goto(0,0) 
       draw.down() 
       draw.goto(200,0) 
      elif err == 2: 
       draw.up() 
       draw.goto(0,0) 
       draw.down() 
       draw.goto(0,200) 
      elif err == 3: 
       draw.up() 
       draw.goto(0,200) 
       draw.down() 
       draw.goto(100,200) 
      elif err == 4: 
       draw.up() 
       draw.goto(100,200) 
       draw.down() 
       draw.goto(100,150) 
      elif err == 5: 
       draw.up() 
       draw.goto(100,100) 
       draw.down() 
       draw.circle(25) 
      elif err == 6: 
       draw.up() 
       draw.goto(100,100) 
       draw.down() 
       draw.goto(100,50) 
      elif err == 7: 
       draw.up() 
       draw.goto(75,90) 
       draw.down() 
       draw.goto(125,90) 
      elif err == 8: 
       draw.up() 
       draw.goto(100,50) 
       draw.down() 
       draw.goto(75,35) 
      elif err == 9: 
       draw.up() 
       draw.goto(100,50) 
       draw.down() 
       draw.goto(125,35) 
       print("You loose.") 
       break 

     # detect completion 
     if 0 == length: 
      print ("You won!") 
      break 

    cont = input("Would you like to continue (y/n) ") 
    if cont == 'y': 
     print("Alright!") 
    else: 
     print("Thanks for playing!") 
     break 
     sys.exit() 
3

技术问题 是在你在/正确确定逻辑:

for char in usedw: 
    if char in guesses: 
     print (char,) 
     lengthr += 1; 
    else: 
     err += 1; 
     if err == 1: 
      ... 

通过字的字符迭代。例如,如果单词“过度”,则对于每个猜测,您将执行这个循环七个次。即使玩家猜出最好的“e”,你也会对他/她错误地猜出字母“ovrat”,并画出五个男孩的部分。


REPAIR

首先,你要确定最近猜测字母是否在词任何地方

if guess in usedw: 
    print (char,) 
    lengthr += 1; 
else: 
    err += 1; 
    if err == 1: 
    ... 

还有其他的问题及改进措施,但这应该让你感动。