简体   繁体   中英

How to make a hangman game in Python

I found an exercise on a website to make a hangman game. Here is what I did:

score = int(5)
word = 'orange'
guess = str(input('Enter your guess: '))

while score > 0 or guess == 'o' and 'r' and 'a' and 'n' and 'g' and 'e' or 'orange'
    if 'o' or 'r' or 'a' or 'n' or 'g' or 'e' or 'orange' == guess:
        print('CORRECT')
    else:
        score = score - 1
        print('Your score is ' + score)
        print('WRONG')

This code just doesn't work! Especially the while loop ruins everything? How to make this actually work. I have written this code in the Jupyter notebook.

This is a working example of the guessing game, with some removal of code redundancy and a bit of clean-up. Important: break-statement inserted inside the if-statement to avoid infinite looping, and new guess prompt inserted in the else-statement:

score = 5
word = 'orange'
guess = str(input('Enter your guess: '))

while (score > 0) or (guess in ('o', 'r', 'a', 'n', 'g', 'e', 'orange')):
    if guess in ('o', 'r', 'a', 'n', 'g', 'e', 'orange'):
        print('CORRECT')
        break
    else:
        score -= 1
        print('WRONG')
        print('Your score is ' + str(score))
        guess = str(input('Enter your guess: '))

Example run:

Enter your guess: u
WRONG
Your score is 4
Enter your guess: o
CORRECT

If you want to check guess against a set of different options, use in ; you can't use and or or like that due to different precedences.

if guess in ('o', 'r', 'a', 'n', 'g', 'e', 'orange'):

would work better for you (though that's probably not the only problem in your code).

There's lots here to do - 1st, your code only allows for a game of hangman for which the word to be guessed is "orange". Fine for a single game, but useless for the second round, unless all players have acute memory problems.

So you need to abstract a little - write some pseudo-code down, think about the steps your program is going to need to take in order to perform the operations required in the game.

This is like writing down instructions for a human, just in a form that's also close to your final programming language.

So something like:

# choose a word to play the game with, save it to the variable called word
word = 'orange'
# Reserve a list of letters that have been guessed.
# Start off with it empty - do the same to keep track of 
# good and bad guesses
guesses = []
good_guesses = []
bad_guesses = []
# Reserve a number of bad tries allowed before game over
bad_tries_before_game_over = 5
# Reserve a number of bad tries so far
bad_tries_so_far = 0

# Start a loop, we'll come back to this point each time 
# the player makes a new guess.
# There are two conditions when to not loop and those are:
# 1. when the player has won by guessing all the letters or
# 2. when the player has lost by getting too many wrong tries
# we'll use a variable called "finished" to track whether either of these conditions is met
finished = False
while not finished:
    guess = str(input('Enter your guess: '))

    # Check whether the person already guessed this letter
    if guess in guesses:
        print ( "You already guessed that letter.")
        print ( "Try using a letter you've not already guessed.")
        print ( guesses )
    else:
        # if guess is correct, then great, otherwise, add bad tries + 1
        if guess in word:
            print ( "Yes, {g} is in the word.".format(g=guess) )
            guesses.append(guess)
            good_guesses.append(guess)
        else:
            print ( "No, {g} is not in the word.".format(g=guess) )
            guesses.append(guess)
            bad_guesses.append(guess)
            bad_tries_so_far = bad_tries_so_far  + 1

        if bad_tries_so_far > bad_tries_before_game_over:
            print ( "Hangman. Game over. ")
            finished = True

        if set(word)==set(good_guesses):
            print ( "Hooray, you saved the man!.")
            finished = True

Over time, you'll naturally think in python and it will kind of become its own pseudo code. But it's best to at least try and work your ideas out on paper, or in English (or whatever language is your natural one) first, just to set out the logical flow that you want the game to have.

Well, here's one that I made. It's slightly more interactive and realistic, but making the words are kind of annoying. If you want to make it more fun, try adding more words with a random word generator or something like that, make the hangman more realistic, or adding game modes and VS matches. I hope this helps =)

If you're still wondering how this code works, I'll try and explain as much as possible. First of all, I imported time to make pauses, making it more dramatic. If you want to remove the pauses, be my guest.

The first bunch of code is just the beginning and all that. You could delete/change it if you want

After, it asks you to input your name. Like I said, completely optional.

Next, it tells you to enter a number. Each number has a specific word.

Then, it's time to guess. I should explain what will happen. Let's say the word is secret. That's 6 letters.

It would look like this:

_

_

_

_

_

_

Then it asks you to start guessing. If you had your 10 tries, you lose. Let's say you managed to guess an "s". This happens:

s

_

_

_

_

_

Hope this explains everything. I'm working on this code and planning to add a party mode next.

Have a great day =)

Phantom

import time
    time.sleep(5)
    print('Welcome to... hangman!')
    time.sleep(2)
    print("Are you ready? Ok, let's start.")
    time.sleep(3)
    name =input("What is your name? ")
    time.sleep(1)
    print("Hello, " + name + ". Time to play hangman! I wish you good luck- you'll need it.")
    time.sleep(3)
    darealword=int(input('Please enter a number. 1-30 only> '))
    if darealword==1:
        word='hypothesize'
    elif darealword==2:
        word='tube'
    elif darealword==3:
        word='blow'
    elif darealword==4:
        word='volume'
    elif darealword==5:
        word='parachute'
    elif darealword==6:
        word='biography'
    elif darealword==7:
        word='paragraph'
    elif darealword==8:
        word='abortion'
    elif darealword==9:
        word='exaggerate'
    elif darealword==10:
        word='complain'
    elif darealword==11:
        word='diagram'
    elif darealword==12:
        word='produce'
    elif darealword==13:
        word='abnormal'
    elif darealword==14:
        word='account'
    elif darealword==15:
        word='interactive'
    elif darealword==16:
        word='jump'
    elif darealword==17:
        word='goalkeeper'
    elif darealword==18:
        word='glimpse'
    elif darealword==19:
        word='story'
    elif darealword==20:
        word='coal'
    elif darealword==21:
        word='weave'
    elif darealword==22:
        word='dynamic'
    elif darealword==23:
        word='credibility'
    elif darealword==24:
        word='rhythm'
    elif darealword==25:
        word='trunk'
    elif darealword==26:
        word='admire'
    elif darealword==27:
        word='observation'
    elif darealword==28:
        word='rough'
    elif darealword==29:
        word='representative'
    else:
        word='thought'
    time.sleep(3)
    print("Start guessing... you can do this.")
    time.sleep(1)
    guesses = ''
    turns = 10
    while turns > 0:         
        failed = 0               
        for char in word:      
            if char in guesses:    
                print(char,)
            else:
                print("_",)    
                failed += 1    
        if failed == 0:
            time.sleep(5)        
            print('Aaaaaaand... you...') 
            time.sleep(3)
            print('won!!!!! I congratulate you, '+ name +'.')
            break              
        print
        guess = input("Guess a character> ") 
        guesses += guess                    
        if guess not in word:  
            turns -= 1        
            print("Sorry, this character isn't in the word. Don't get it wrong next time.")    
            # print("You have", + turns, 'more guesses')
            if turns == 0:        
                print("Aaaaaaand... you...")
                time.sleep(3)
                print("lost. I feel bad. Better luck next time. And if you're wondering, the word is "+ word +'.')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM