2017-10-13 80 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: 
    ... 

還有其他的問題及改進措施,但這應該讓你感動。