python - 刽子手游戏 - 如果输入的字母序列混乱,则无法将输入字母与单词匹配
问题描述
以下是我正在尝试构建的概要:
- 从用户那里获取关于字长的输入
- 根据用户输入的单词长度从文本文件中获取单词
- 从用户输入中获取尝试次数
- 将单词显示为 *
- 获取用户的提示信输入
运行游戏
- 首先显示 * 中的单词
- 显示剩余的尝试次数
- 提示输入下一个字母
- 如果输入与单词匹配
- 打印“你猜对了字母”
- 在适当的空格处替换字母中单词中的 * 并打印
- 打印剩余尝试次数
- 打印猜出的字母
- 提示输入下一个字母 *这一直持续到该单词的所有正确字母都被猜到为止
- 打印“你赢了”
- 如果输入与单词不匹配
- print "你猜错了字母"
- 打印 * 中的单词
- 打印剩余尝试次数
- 打印猜出的字母
- 提示输入下一个字母 *这一直持续到剩余的 attepmt 为 0
- 打印“你输了”
- 如果尝试次数为 0
- 打印“没有尝试离开”
- 打印正确的单词
- 如果输入与单词匹配
该代码仅在输入的字母不变时才有效。
假设如果游戏词是“Rain”,那么代码只有在用户输入:“R”、“A”、“I”、“N”时才会起作用。
如果输入的字母乱码,如“A”、“R”、“I”、“N”,代码将不起作用。
我相信它可以通过使用枚举的迭代来实现,但我不确定如何。
这是我的代码:
import random
WORDS = "wordlist.txt"
"""Getting Length input from user and selecting random word from textfile"""
def get_word_length_attempt():
max_word_length = int(input("Provide max length of word [4-16]: "))
current_word = 0
word_processed = 0
with open(WORDS, 'r') as f:
for word in f:
if '(' in word or ')' in word:
continue
word = word.strip().lower()
if len(word) > max_word_length:
continue
if len(word) < 4:
continue
word_processed += 1
if random.randint(1, word_processed) == 1:
current_word = word
return current_word
"""Getting input of number of attempts player wants to have"""
def get_num_attepmts():
num_attempt = int(input("Provide number of attempts you want: "))
return num_attempt
"""Displaying word in *"""
def display_word_as_secret():
display_word = '*' * len(get_word_length_attempt())
print(display_word)
"""Getting hint letter from user input"""
def get_user_letter():
user_letter = input("Enter letter: ").lower()
if len(user_letter) != 1:
print("Please Enter single letter")
else:
return user_letter
"""Starting Game"""
def start_game():
game_word = get_word_length_attempt()
attempts_remaining = get_num_attepmts()
print('Your Game Word: ' + game_word)
print('Your Game Word: ' + '*'*len(game_word))
print('Attempts Remaining: ' + str(attempts_remaining))
guessed_word = []
while attempts_remaining > 0:
next_letter = get_user_letter()
if next_letter in game_word:
print('You guessed correct')
guessed_word.append(next_letter)
print('Your Game Word: ' + game_word)
print('Your Game Word: ' + '*' * len(game_word))
print('Attempts Remaining: ' + str(attempts_remaining))
correct_word = "".join(guessed_word)
print(guessed_word)
if correct_word == game_word:
print('you won')
break
else:
print('The letter in not in the game word')
attempts_remaining -= 1
print('Your Game Word: ' + game_word)
print('Your Game Word: ' + '*' * len(game_word))
print('Attempts Remaining: ' + str(attempts_remaining))
else:
print('no attempts left')
print('You Lost')
print('The Word is: ' + game_word)
start_game()
解决方案
您正在correct_word
按照用户输入的顺序从猜测的字母中构建。猜测的字符串'ARIN'
不等于'RAIN'
。
相反,您需要进行不关心顺序的比较。最简单的解决方法是改变
if correct_word == game_word:
至
if set(correct_word) == set(game_word):
因为无论顺序如何,都会比较集合的内容。它也会更好地处理重复的字母,例如'letterbox'
将被视为字母的集合{'b', 'e', 'l', 'o', 'r', 't', 'x'}
。
您不妨首先将猜测的字母存储为一组,因为无论如何多次猜测同一个字母是没有意义的。
推荐阅读
- git - 将新文件夹连接到 Heroku
- string - 如何将 installdate 转换为不同的格式?
- bash - 如何在反引号内传递bash变量
- apache-spark - 在 Pyspark 中将布尔值转换为字符串时使用 when 和 else
- javascript - Webpack 中的 JSPM 覆盖等效项
- regex - 获取字符之间的字符串段
- elasticsearch - Elasticsearch:constant_score 查询与 bool.filter 查询
- vba - VBA - 按顺序根据文本进行分类
- sql - SQL查询中日期为空时如何拉最大日期
- vba - 对于 Excel VBA 中的嵌套循环