2013-12-22 2 views
0

Im работает над слова игры. Целью пользователя является угадать 5-буквенное слово в 5 попытках. Пользователь может знать первую букву. И если он не получит правильное слово, но если у него есть письмо в правильном месте, он узнает об этом.Python улучшения слова игры

Это мой код:

import random 
list_of_words = ["apple","table", "words", "beers", "plural", "hands"] 
word = random.choice(list_of_words) 

attempts = 5 

for attempt in range(attempts): 
    if attempt == 0: 
     tempList = list(word[0] + ("." * 4)) 
     print("The first letter of the word we are looking for: %s" % "".join(tempList)) 

    answer = raw_input("What is the word we are looking for?:") 
    if len(answer) != 5: 
     print ('Please enter a 5 letter word') 

    Else: 
     if answer != word: 
      wordlist = list(word) 
      answerlist = list(answer) 
      for i in range(min(len(wordlist), len(answerlist))): 
       if wordlist[i] == answerlist[i]: 
        tempList[i] = wordlist[i] 
      print(tempList) 

     else: 
      print("correct, you have guessed the word in:", attempt, "attempts") 

if answer != word: 
    print("Sorry maximum number of tries, the word is: %s" % word) 

У меня есть два вопроса относительно этого кода:

Первая небольшая проблема: если пользователь дает 6 или 4 письма слово он будет по-прежнему печати слово. Хотя я бы предпочел, чтобы это слово просто игнорировалось, и попытка не используется.

Если письмо дано правильно (а также первая буква), оно не становится стандартной частью обратной связи. Попытка получить это с помощью temp, но пока не работает отлично.

Любые предложения по очистке моего кода также приветствуются!

Благодарим за внимание

ответ

1

Я внесла некоторые изменения в ваш код, теперь он работает в соответствии с вашими спецификациями. Я также написал пару пояснительных комментариев:

import random 

list_of_words = ["apple", "table", "words", "beers", "plural", "hands"] 
word = random.choice(list_of_words) 

# changed the loop to a 'while', because i don't want to count the invalid length answers 
# and wanted to exit the loop, when the user guessed correctly 
attempts = 5 
attempt = 0 
correct = False 
while attempt < attempts and not correct: 
    if attempt == 0: 
     # i stored a working copy of the initial hint (ex: "w....") 
     # i'll use this to store the previously correctrly guessed letters 
     tempList = list(word[0] + ("." * 4)) 
     print("The first letter of the word we are looking for: %s" % "".join(tempList)) 

    answer = raw_input("What is the word we are looking for?:") 
    if len(answer) != 5: 
     print("Please enter a 5 letter word") 
    else: 
     if answer != word: 
      # i simplified this loop to comparing the wordlist and answerlist and update templist accordingly 
      wordlist = list(word) 
      answerlist = list(answer) 
      for i in range(min(len(wordlist), len(answerlist))): 
       if wordlist[i] == answerlist[i]: 
        tempList[i] = wordlist[i] 
      print(tempList) 
     else: 
      correct = True 
      print("Correct, you have guessed the word in %s attempts" % (attempt + 1)) 
     attempt += 1 

if answer != word: 
    # also i used string formatting on your prints, so is prints as a string, and not as a tuple. 
    print("Sorry maximum number of tries, the word is: %s" % word) 
+0

@ zord. Ничего себе, это замечательный человек, огромное спасибо! Моя первая версия также содержала «while», но позже изменила ее. Угадайте, в конце концов, «пока» работает лучше. Спасибо, я ценю это! Приветствия – user3119123

+0

Ваш прием! :) – zord

1

С кодом возникает несколько проблем.

Всего 1 пока. Я замечаю, что в образце вы вводите пять буквенных слов (бусины и хлеб), и он все еще печатает Please enter a 5 letter word.

Эти две линии:

if len(answer) != 4: 
    print ('Please enter a 5 letter word') 

Конечно, это должно быть:

if len(answer) != 5: 
    print ('Please enter a 5 letter word') 
    continue 

Это поймать неверный ввод и объехать петлю снова.

1

Ответ на ваши конкретные вопросы:

  1. Вам нужно будет иметь for петлю вокруг input, сохраняя пользователь в этом цикле, пока они не ввести слово соответствующей длины
  2. При перемещении догадывались письма правильные места, тривиально побеждать, угадывая "abcde", затем "fghij" и т. д. Вам нужно тщательно подумать о том, какими будут ваши правила; у вас может быть отдельный список «букв в предположении, которые находятся в ответе, но не в том месте», и покажите пользователю это.
  3. Чтобы сохранить версию дисплея со всеми ранее угаданными символами, сохраните список отображаемых символов: display = ["." for letter in answer] и обновите это, когда вы идете.

Другие проблемы у вас есть:

  1. Слишком много жесткого кодирования длины слова (особенно в len("plural") != 5); вы должны переписать свой код на , используя длину слова (это делает его более гибким).
  2. Вы говорите только, что они выиграли, если угадали весь ответ. Что, если они доберутся до него с перекрывающимися буквами? Вы можете проверить как if all(letter != "." for letter in display):, чтобы узнать, получили ли они ответ таким образом.
  3. Ваш список постов [i for i in answer if answer in word] не привязан ни к чему.
Смежные вопросы