как назначить другой вариант переменной, так что если вход соответствует одной из назначенных переменных, то ответ правильный - PullRequest
3 голосов
/ 01 июля 2019

Создание угадай слова игры и 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 ]

5 голосов
/ 01 июля 2019

Короче говоря : проверка без учета регистра гораздо сложнее, чем кажется на первый взгляд.Функция 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 <b>guess.casefold() == secret_word.casefold()</b>:
        break
    else:
        guess_count += 1

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

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

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

, тогда как .casefold() возвращает ss:

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

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

2 голосов
/ 01 июля 2019

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

ниже (самостоятельно, /) Вернуть копию строки, преобразованной в нижний регистр.
- help (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 голосов
/ 01 июля 2019

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

secret_word = 'korea'

while guess.lower() != secret_word and not (out_of_guesses):
    # loop's body...
...