Функция сравнения и сортировки строк - PullRequest
0 голосов
/ 08 февраля 2019

Я занимаюсь разработкой словесной игры, и мне нужна помощь с одной из функций.Функция получает 2 входа и возвращает true или false.
На входе my_word содержатся угаданные буквы, которые соответствуют определенному слову.Ввод other_word - это какое-то слово для сравнения с my_input.примеры:

>>> match_with_gaps("te_ t", "tact")
False
>>> match_with_gaps("a_ _ le", "apple")
True
>>> match_with_gaps("_ pple", "apple")
True
>>> match_with_gaps("a_ ple", "apple")
False

Моя проблема - применить его для возврата False, как в предыдущем примере, и я не уверен, как это сделать.Это то, что я сделал до сих пор.Это работает, но не для случая, когда одно угаданное письмо в my_word появляется 2 раза в other_word.В этом случае я возвращаю истину, но она должна быть ложной.Входные данные должны быть точно такими же, как в примере (пробел после подчеркивания).

def match_with_gaps(my_word, other_word):
    myWord = []
    otherWord = []
    myWord_noUnderLine = []
    for x in my_word:
        if x != " ": # remove spaces
            myWord.append(x)
    for x in myWord:
        if x != "_": # remove underscore
            myWord_noUnderLine.append(x)
    for y in other_word:
        otherWord.append(y)

    match = ( [i for i, j in zip(myWord, otherWord) if i == j] ) # zip together letter by letter to a set
    if len(match) == len(myWord_noUnderLine): # compare length with word with no underscore
        return True
    else:
        return False


my_word = "a_ ple"
other_word = "apple"

print(match_with_gaps(my_word, other_word))

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы можете создать версию «без пробелов» и «без пробелов, без подчеркивания» в вашей строке, а затем сравнить каждый символ, чтобы определить, совпадают ли символы, не являющиеся подчеркиванием, или символы, соответствующие символу подчеркивания, уже использовались.Например:

def match_with_gaps(match, guess):
    nospace = match.replace(' ', '')
    used = nospace.replace('_', '')
    for a, b in zip(nospace, guess):
        if (a != '_' and a != b) or (a == '_' and b in used):
            return False
    return True

print(match_with_gaps("te_ t", "tact"))
# False
print(match_with_gaps("a_ _ le", "apple"))
# True
print(match_with_gaps("_ pple", "apple"))
# True
print(match_with_gaps("a_ ple", "apple"))
# False
0 голосов
/ 08 февраля 2019

Эта строка здесь:

 if len(match) == len(myWord_noUnderLine)

Не даст вам то, что вы хотите прямо сейчас.В примере «a_ ple» удаляются и пробел, и «_», поэтому ваша переменная myWord_noUnderLine будет «aple», поэтому проверка на совпадение длины наверняка завершится ошибкой между «aple» и «apple»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...