nick.albo
nick.albo

Reputation: 11

Python: Hangman game problems

I am brand new to Python but a have a littel Matlab and C++ background. Please Help!!!!

I am having problems with my hangman code. If a word has multiple of the same letter in I cannot figure out how to get it to switch all of them. I have a couple tries with some of them commented out.

import random
import time
import sys

def pickWord():
    words = [line.strip() for line in open('word_list.txt')]
    word = random.choice(words)
    word = word.lower()
    return word

def checkLetter(word, input):
    if input not in word:
        in_letter = 0
    else:
        in_letter = 1
    return in_letter

def check_input(input):
    if input.isaplha() == False :
        input = raw_input('Your input was not a letter, please enter a letter: ')
    elif len(input) > 0:
        input = raw_input('Your entry was longer than 1 letter, please enter     one letter: ')
    else:
        input = input
    return input



#main function

running = 'y'

print('Lets Play Hangman!\n\n ------------------------ \n\nGenerating a Random   word \n\n')

while running == 'y':

word = pickWord()
letters = list(word)

time.sleep(3)

print ('The word has been chosen\n\n')

print '%s' % word

start = raw_input('Are you ready to start?(y/n)')
start = start.lower()

if start == 'n':
    print('Well, too damn bad. Here We go!\n\n **************************\n\n')
elif start == 'y':
    print('Awesome, lets begin!\n\n*********************************\n\n')
else:
    print('You did not enter y or n, sorry you are not allowed to play!')
    sys.exit()

i = 0

print ('The word has %d letters in it') % len(word)

input = raw_input('What is your first guess: ')
input = input.lower()
correct = ['_'] * len(word)

print ' '.join(correct)

while correct != letters and i <= 5:
    '''if input in letters:
        for input in letters:
            location = letters.index(input)
            correct[location] = input
        print('You guessed the correct letter! Your input %s is in the word at the %d spot.') % (input, location)
        print ' '.join(correct)
    elif input not in letters:
        print('You guessed wrong :(')
        i = i + 1
        guesses = 6 - i
        print('You have %d guesses left.') % guesses
        guesses = 0
    else:
        print('You did not enter a valid letter, please try again.')'''

    '''for j in letters:
        if j == input:
            location = letters.index(j)
            correct[location] = j
            print '%s' % ' '.join(correct)
            print '%d' % location
            print '%s' % j
        if j == input:
            location = letters.index(j)
            correct[location] = j
        print('You guessed the correct letter! Your input %s is in the word at the %d spot.') % (input, location)
        print ' '.join(correct)'''

    if input not in letters:
        i = i + 1 
        guesses = 6 - i
        print("You guessed incorrectly. You have %d guesses left.") % guesses


    input = raw_input('What is your next guess: ')
    input = input.lower()

if correct == letters:
    print('Congrats! You won the game!')
else:
    print('You lost. :(')

running = raw_input('Do you want to play again? (y/n)').lower()

Upvotes: 1

Views: 190

Answers (1)

user3636636
user3636636

Reputation: 2499

In your attempt, the loop is stopping when it finds the first match of input to letters.

the following code will work:

guess = raw_input('What is your first guess: ')
word = "wordword"
letters = list(word)
correct = ['_']* len(word)
for x, y in enumerate(word):
    if guess == y:
        correct[x] = y

Your mistakes

In your first attempt:

if input in letters:
    for input in letters:

you are checking if input is in letters, which is fine, but if this returns True, inputs original value is lost, and is reassigned as you loop through the elements of letters.

eg

>>>input = "w"
>>>word = "word"
>>>if input in word:
...    for input in word:
...        print(input)

w
o
r
d

your second attempt

for j in letters:
    if j == input:
        location = letters.index(j)

is a lot closer to being successful, however location = letters.index(j) is always going to equal the index of the first match of j, and thus will not assign all matched values of input.

Upvotes: 1

Related Questions