首页 > 解决方案 > 我如何为变量分配不同的变化,所以如果输入与分配的变量之一匹配,那么答案是正确的

问题描述

创建一个猜字游戏,secret_word 可以有任何变体,但是我将如何编写程序识别的 secret_word 的不同变体?

在这种情况下,秘密词是“韩国”,我怎样才能统一任何变体还是必须插入每一种不同的变体?

secret_word = {"korea", "kOrea", "KoRea", "KoReA", "KOrea, "KORea", 
"Korea", "KOREA"}
guess = ""
guess_count = 0
guess_limit = 3
out_of_guesses = False

while guess != secret_word and not (out_of_guesses):
    if guess_count < guess_limit:
        guess = input("Guess a word: ")
        guess_count += 1
    else:
        out_of_guesses = True

if out_of_guesses:
print("Maybe Next time! You are out of guesses")
else:
    print("You win!")

标签: pythonstringvariations

解决方案


简而言之:不区分大小写的检查是一个比乍一看要困难得多的问题。函数[ str.casefold()python-doc]应该为此类比较生成一个字符串。

您检查输入的字符串是否与要猜测的字符串.casefold()相同,例如:.casefold()

secret_word = 'korea'
guess_count = 0
guess_limit = 3

while guess_count < guess_limit:
    guess = input('Guess a word')
    if guess.casefold() == secret_word.casefold():
        break
    else:
        guess_count += 1

if guess_count < guess_limit:
    print('You win')
else:
    print('You lose')

Unicode 标准.casefold()假定它会生成一个字符串,该字符串可以进行比较以进行不区分大小写的比较。例如在德语中,eszett ß [wiki]以大写形式映射到:

>>> 'ß'.lower()
'ß'
>>> 'ß'.upper()
'SS'
>>> 'SS'.lower()
'ss'
>>> 'ß'.lower() == 'SS'.lower()
False

.casefold()将返回ss

>>> 'ß'.casefold()
'ss'
>>> 'ss'.casefold()
'ss'
>>> 'ß'.casefold() == 'SS'.casefold()
True

不区分大小写的比较结果是一个难题,因为某些字符没有大写/小写等价物等。


推荐阅读