2013-11-12 2 views
0

Я хочу создать игру с угадыванием слов, где программа случайно выбирает слово из моего списка слов, и пользователь должен угадать слово.Случайное слово угадывание игры

  • Пользователь может угадать только одну букву за раз.
  • Пользователю разрешено иметь только 6 неудачных догадок. (Проиграет, когда используются 6 неудачных попыток).
  • Пользователь выигрывает, если он угадывает полное слово до 6 неудачных попыток.

Так я столкнулся целый ряд проблем, связанные с моей программой:

  1. Как сделать угаданное письмо остановиться на бланках, когда он переходит к следующему раунду догадки?
  2. Если слово имеет две одинаковые буквы, как я могу отображать его на моих пробелах?
  3. Как показать все пропущенные письма пользователя для каждого раунда?

Вот что я сделал до сих пор:

import random 

wordlist = ['giraffe','dolphin',\ 
      'pineapple','durian',\ 
      'blue','purple', \ 
      'heart','rectangle'] 

#Obtain random word 
randWord = random.choice(wordlist) 

#Determine length of random word and display number of blanks 
blanks = '_ ' * len(randWord) 
print() 
print ("Word: ",blanks) 


#Set number of failed attempts 
count = 6 

#Obtain guess 
while True: 
    print() 
    guess = input ("Please make a guess: ") 
    if len(guess) != 1: 
     print ("Please guess one letter at a time!") 
    elif guess not in 'abcdefghijklmnopqrstuvwxyz': 
     print ("Please only guess letters!") 

#Check if guess is found in random word 
    for letters in randWord: 
     if guess == letters: 
      letterIndex = randWord.index(guess) 
      newBlanks = blanks[:letterIndex*2] + guess + blanks[letterIndex*2+1:] 
      print ("Guess is correct!") 
     else: 
      count -=1 
      print ("Guess is wrong! ", count, " more failed attempts allowed.") 
    print() 
    print("Word: ",newBlanks) 

Результаты, которые я надеюсь получить (для randWord 'фиолетовый'):

Word: _ _ _ _ _ _ 
Missed: 
Please make a guess: l 
Guess is correct! 


Word: _ _ _ _ l _ 
Missed: 
Please make a guess: z 
Guess is wrong! 5 more failed attempts allowed. 


Word: _ _ _ _ l _ 
Missed: z 
Please make a guess: o 
Guess is wrong! 4 more failed attempts allowed. 


Word: _ _ _ _ l _ 
Missed: z, o 
Please make a guess: p 
Guess is correct! 


Word: p _ _ p l _ 
Missed: z, o 
Please make a guess: e 
Guess is correct! 


Word: p _ _ p l e 
Missed: z, o 
Please make a guess: r 
Guess is correct! 


Word: p _ r p l e 
Missed: z, o 
Please make a guess: u 
Guess is correct! 


Word: p u r p l e 
YOU WON! 
+0

Вы можете взглянуть на [этой] смежный вопрос (http://stackoverflow.com/q/15454035/1639625) –

+0

@AlexisPigeon Whops, не видел этого. Но он не дважды публиковал ... он трижды выложил! Предложите закрыть другие вопросы без ответов. –

+0

@tobias_k да, я перестал считать ... –

ответ

0

Как сделать угаданной письмо оставаться на бланках, когда он доходит до следующего раунда догадки?

Просто храните строку, содержащую угаданное письмо и пробелы для следующего раунда. Вы перерасчет это каждый раз от wordlist (это может быть также пересчитываются каждый раз, но тогда вам нужно изменить вашу функцию поиска для писем см ответа 2)

Если слово имеет два одинаковых буквы, как я тоже показываю его на своих пробелах?

Измените свой цикл поиска, он должен продолжить поиск после того, как найдено первое совпадающее письмо.

letterIndex = randWord.index(guess) вернет только первое появление предположения в строке.

Как показать все пропущенные письма пользователя для каждого раунда?

Храните их в отдельной строке или списке. Поэтому вы можете распечатывать его каждый раз.

0

Вместо того, чтобы повторно использовать newBlanks строки из предыдущего раунда, я предлагаю строить его заново с join и простым списком пониманием, используя строку guessed держит все догадки, как here. Также обратите внимание, что ваш чек на правильные/неправильные письма не работает таким образом, но уменьшит count за каждый буква слова, которое не является угаданным письмом. Вместо этого используйте if guess in randWord:.Кроме того, вы можете использовать count для состояния цикла while и continue со следующей итерацией цикла, если guess - это не одна буква.

Собираем все вместе, ваш код может выглядеть следующим образом:

guessed = "" 
while count >= 0: 
    guess = input ("Please make a guess: ") 
    # ... check guess, continue if not a letter 
    guessed += guess 

    if guess in randWord: 
     # ... print 'correct', else 'not correct', decrease count 

    newBlanks = " ".join(c if c in guessed else "_" for c in randWord) 
    print("Word: ",newBlanks) 
Смежные вопросы