Python:Hangman游戏问题

时间:2015-07-11 02:48:31

标签: python

我是Python新手,但有一个小小的Matlab和C ++背景。请帮助!!!!

我的hangman代码有问题。如果一个单词有多个相同的字母,我无法弄清楚如何让它切换所有这些。我有几次尝试,其中一些已经注释掉了。

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()

1 个答案:

答案 0 :(得分:1)

在你的尝试中,循环在找到输入到字母的第一个匹配时停止。

以下代码将起作用:

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

您的错误

第一次尝试:

if input in letters:
    for input in letters:

你正在检查输入是否是字母,这很好,但是如果这返回True,则输入原始值会丢失,并在循环遍历letters的元素时重新分配。

例如

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

w
o
r
d

第二次尝试

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

更接近于成功,但是location = letters.index(j)总是等于j的第一个匹配的索引,因此不会分配所有匹配的输入值。