2015-07-11 4 views
1

Я совершенно новый для Python, но у меня есть фон Matlab и C++. Пожалуйста помоги!!!!Python: проблемы с игровым автоматом

У меня возникли проблемы с кодом вашего палача. Если слово имеет кратность одной и той же буквы, я не могу понять, как заставить его переключать все из них. У меня есть пара попыток с некоторыми из них прокомментированы.

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

Привет, добро пожаловать в StackOverflow. Пожалуйста, отредактируйте свое сообщение, чтобы включить только самый маленький код для репликации вашей проблемы, и вы получите ответ гораздо быстрее. – johnnyRose

ответ

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) всегда будет равен индекс первого матча у, и, таким образом, не будет присваивать все согласованные значения ввода.

Смежные вопросы