Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
hanged man
#1
Hi

only been coding for about three days, so please forgive the code. could you copy and paste the below and please explain why i am going mad.

if you guess correct rabbit, works fine.
if you guess wrong letters works fine.

if you guess mixture of wrong and right letters. def_guess function returns none instead of a letter sometimes?

from random import randrange, uniform
import time
import turtle
import os

#setup screen
screen = turtle.Screen()
screen.bgcolor("black")
screen.title("Hangman")

word ="RABBIT"
valid_char ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
wrong_guesses = 10
guessed_letters = 0
unique_letters = len(set(word))
wrong_letters =" "
all_letters =" "
answer = " "
guess =" "
a=0
#draw border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300,-300)
border_pen.pendown()
border_pen.pensize(3)
for side in range(4):
    border_pen.fd(600)
    border_pen.lt(90)
border_pen.hideturtle()

#draw dashes
turtle.penup()
turtle.goto( 50, -250)
turtle.color("white")

for a in range(0, len(word)):
    dash_pen = turtle.Turtle()
    dash_pen.write("_", font=("Arial", 16, "normal", "underline"))
    dash_pen.penup()
    dash_pen.fd(20)
    dash_pen.pendown()
dash_pen.hideturtle()


def get_guess():
    guess=" "
    answer=" "
    screen = turtle.Screen()
    answer = screen.textinput("Welcome to hangman!", "PLease enter your letter?")
    answer = answer.upper()
    len_answer = len(answer)
    if (answer not in valid_char or len(answer) != 1) or answer in (all_letters):
        get_guess()
    else:
        return answer

#draw_base

def draw_base():
     base_pen = turtle.Turtle()
     base_pen.speed(0)
     base_pen.color("white")
     base_pen.penup()
     base_pen.setposition(-250,-250)
     base_pen.pendown()
     base_pen.pensize(3)
     base_pen.fd(200)
     base_pen.hideturtle()

#draw_base

def draw_pole():
     pole_pen = turtle.Turtle()
     pole_pen.speed(0)
     pole_pen.color("white")
     pole_pen.penup()
     pole_pen.setposition(-150,-250)
     pole_pen.pendown()
     pole_pen.pensize(3)
     pole_pen.lt(90)
     pole_pen.fd(400)
     pole_pen.penup()
     pole_pen.hideturtle()


def top_pole():
    top_pen = turtle.Turtle()
    top_pen.speed(0)
    top_pen.color("white")
    top_pen.penup()
    top_pen.setposition( -150, 150)
    top_pen.pendown()
    top_pen.pensize(3)
    top_pen.fd(150)
    top_pen.penup()
    top_pen.hideturtle()

def top_rope():
        rope_pen = turtle.Turtle()
        rope_pen.speed(0)
        rope_pen.color("white")
        rope_pen.penup()
        rope_pen.setposition( 0, 150)
        rope_pen.pendown()
        rope_pen.pensize(3)
        rope_pen.rt(90)
        rope_pen.fd(50)
        rope_pen.penup()
        rope_pen.hideturtle()


def head():
    head_pen = turtle.Turtle()
    head_pen.speed(0)
    head_pen.color("white")
    head_pen.penup()
    head_pen.setposition(0, 42)
    head_pen.pendown()
    head_pen.pensize(3)
    head_pen.circle(30)
    head_pen.penup()
    head_pen.hideturtle()

def body():
    body_pen = turtle.Turtle()
    body_pen.speed(0)
    body_pen.color("white")
    body_pen.penup()
    body_pen.setposition(0, 40)
    body_pen.pendown()
    body_pen.pensize(3)
    body_pen.rt(90)
    body_pen.fd(120)
    body_pen.penup()
    body_pen.hideturtle()

def left_leg():
    leftleg_pen = turtle.Turtle()
    leftleg_pen.speed(0)
    leftleg_pen.color("white")
    leftleg_pen.penup()
    leftleg_pen.setposition(0, -80)
    leftleg_pen.pendown()
    leftleg_pen.pensize(3)
    leftleg_pen.rt(120)
    leftleg_pen.fd(80)
    leftleg_pen.rt(40)
    leftleg_pen.fd(20)
    leftleg_pen.penup()
    leftleg_pen.hideturtle()

def right_leg():
    rightleg_pen = turtle.Turtle()
    rightleg_pen.speed(0)
    rightleg_pen.color("white")
    rightleg_pen.penup()
    rightleg_pen.setposition(0, -80)
    rightleg_pen.pendown()
    rightleg_pen.pensize(3)
    rightleg_pen.rt(60)
    rightleg_pen.fd(80)
    rightleg_pen.rt(100)
    rightleg_pen.fd(20)
    rightleg_pen.penup()
    rightleg_pen.hideturtle()

def left_arm():
    leftarm_pen = turtle.Turtle()
    leftarm_pen.speed(0)
    leftarm_pen.color("white")
    leftarm_pen.penup()
    leftarm_pen.setposition(0, 10)
    leftarm_pen.pendown()
    leftarm_pen.pensize(3)
    leftarm_pen.rt(60)
    leftarm_pen.fd(80)
    leftarm_pen.rt(100)
    leftarm_pen.fd(20)
    leftarm_pen.penup()
    leftarm_pen.hideturtle()

def right_arm():
    rightarm_pen = turtle.Turtle()
    rightarm_pen.speed(0)
    rightarm_pen.color("white")
    rightarm_pen.penup()
    rightarm_pen.setposition(0, 10)
    rightarm_pen.pendown()
    rightarm_pen.pensize(3)
    rightarm_pen.rt(140)
    rightarm_pen.fd(70)
    rightarm_pen.rt(30)
    rightarm_pen.fd(10)
    rightarm_pen.penup()
    rightarm_pen.hideturtle()



for a in range(0, len(word)):
    turtle.write("_", font=("Arial", 16, "normal", "underline"))
    turtle.penup()
    turtle.fd(20)
    turtle.pendown()
    turtle.penup()
    turtle.hideturtle()




while wrong_guesses > 0:
    guess = get_guess()
    turtle.goto( 50, -250)
    turtle.fillcolor("blue")
    turtle.color("white")
    a=0
    for a in range(0, len(word)):
        guess = str(guess)
        if guess in word[a]:
             turtle.write(word[a], font=("Arial", 16, "normal", "underline"))
             turtle.penup()
             turtle.fd(20)
             turtle.hideturtle()
        else:
             turtle.write("_", font=("Arial", 16, "normal", "underline"))
             turtle.penup()
             turtle.fd(20)
             turtle.pendown()
             turtle.penup()
             turtle.hideturtle()

    if guess in word:
        wrong_guesses = wrong_guesses
        guessed_letters +=1
        all_letters += guess

        if guessed_letters == unique_letters:
            winning_msg = turtle.Turtle()
            winning_msg.speed(0)
            winning_msg.color("white")
            winning_msg.penup()
            winning_msg.setposition(-150, 180)
            winning_msg.write("Well Done, you guessed the word.", font=("Arial", 16, "normal"))
            winning_msg.hideturtle()
            time.sleep(5)
            break
    else:
        wrong_guesses -= 1
        wrong_letters += guess
        all_letters += guess
        wrong_msg= turtle.Turtle()
        wrong_msg.speed(0)
        wrong_msg.color("white")
        wrong_msg.penup()
        wrong_msg.setposition(-290, -300)
        wrong_msg.write("Wrong letters:- ", font=("Arial", 16, "normal"))
        wrong_msg.setposition(-150, -300)
        wrong_msg.write(wrong_letters, font=("Arial", 16, "normal"))
        wrong_msg.hideturtle()

    if wrong_guesses == 9:
        draw_base()
    if wrong_guesses == 8:
        draw_pole()
    if wrong_guesses == 7:
        top_pole()
    if wrong_guesses == 6:
        top_rope()
    if wrong_guesses == 5:
        head()
    if wrong_guesses == 4:
        body()
    if wrong_guesses == 3:
        left_leg()
    if wrong_guesses == 2:
        right_leg()
    if wrong_guesses == 1:
        left_arm()
    if wrong_guesses == 0:
        right_arm()
        losing_msg = turtle.Turtle()
        losing_msg.speed(0)
        losing_msg.color("white")
        losing_msg.penup()
        losing_msg.setposition(-250, 180)
        losing_msg.write("Unlucky the correct word was :- ", font=("Arial", 16, "normal"))
        losing_msg.setposition( 50, 180)
        losing_msg.write(word, font=("Arial", 16, "normal"))
        losing_msg.hideturtle()
        time.sleep(5)
        break
Sorry, didn’t realise it doesn’t paste indents:/

Basically, the below code returns None instead of a valid letter?


def get_guess():
guess=" "
answer=" "
screen = turtle.Screen()
answer = screen.textinput("Welcome to hangman!", "PLease enter your letter?")
answer = answer.upper()
len_answer = len(answer)
if (answer not in valid_char or len(answer) != 1) or answer in (all_letters):
get_guess()
else:
return answer

Thank you, sorry very new to all this.
Reply
#2
Try this:
def get_guess():
    while True:
        screen = turtle.Screen()
        answer = screen.textinput("Welcome to hangman!", "Please enter your letter?")
        answer = answer.upper()
        if len(answer) == 1 and answer[0] in valid_char:
            return answer
At the end of your code you need to add a line
turtle.bye()
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020