2017-10-13 3 views
1

나는 수업을위한 간단한 행맨 게임을 만들고있다. 현재 프로그램은 사용자가 정답을 얻었더라도 도면의 모든 단계를 수행합니다.다른 사람이 제대로 작동하지 않는 이유는 무엇입니까?

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"라는 글자를 잘못 추측하여 대금을 청구하고 다섯 개의 소년 부분을 그립니다.

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

이 다른 문제 및 개선 있지만이 :


수리

첫째, 당신은 가장 최근에 짐작 편지 단어 어디에 있는지 여부를 결정해야 너를 움직여야 해.

관련 문제