Создание угадай слова игры и 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!")
3
J Min 1 Июл 2019 в 00:18

3 ответа

Лучший ответ

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

.casefold() предполагается по стандарту Юникод для создания строки, которую можно сравнивать для сравнения без учета регистра . Например, на немецком языке eszett ß [wiki] карты в верхнем регистре:

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

Тогда как .casefold() вернет ss:

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

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

5
Willem Van Onsem 30 Июн 2019 в 21:28

Я бы сохранил секрет в нижнем (или верхнем) регистре, а затем преобразовал бы предположение в этот случай:

secret_word = 'korea'

while guess.lower() != secret_word and not (out_of_guesses):
    # loop's body...
2
Mureinik 30 Июн 2019 в 21:21

Вы можете использовать guess.lower(), который преобразует каждую вариацию guess в нижний регистр. Таким образом, вам нужно указать только строчные буквы.

ниже (сам, /) Вернуть копию строки, преобразованной в нижний регистр.
- справка (str.lower)

secret_word = "korea"
guess = ""
guess_count = 0
guess_limit = 3
out_of_guesses = False

while guess.lower() != 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!")
2
pingmader 30 Июн 2019 в 21:55