Как сделать тест с ответами из внешнего файла? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь сделать тест, но мои ответы находятся во внешнем файле, поэтому каждый раз, когда я запускаю его с моими правильными ответами, они говорят, что они неправильные.

Вот мой код:

randNum = int(random.randint(0, 4))

song = open("songList.csv","rt")

with open("songList.csv", "rt") as f:

songn = str(song.readlines()[randNum])
reader= csv.reader(f)
for row in reader:
   print (songn[0])

guess = input("What is the song called?")
score = 0
correct_guess = False
while True:
    if guess == songn:
        correct_guess = True
        break

    score += 1
    if score>=total:
        break
    song_guess = input("Incorrect! Try again:\n> ")
if correct_guess:
    print("Answer correct!")
else:
    print("game over")

1 Ответ

0 голосов
/ 17 января 2019

Как указано в комментариях, у вас есть завершающие символы новой строки в одной из строк. Следовательно, они не равны.

Однако я не просто удалил бы новую строку. Всегда хорошая практика, если ваша логика это позволяет, нормализовать строки перед проверкой на равенство. Есть много вещей, которые вы можете сделать, чтобы нормализовать:

def normalize(string):
    string = string.strip()  # Remove any leading or trailing whitespaces
    string = string.lower()  # Make all letters lowercase 
    string = " ".join(string.split())  # If the user hit spacebar twice, for example, will remove the double space. Note can have side effects.
    return string 

Затем проверьте

if normalize(string1) == normalize(string2):
    do_something() 

На самом деле, если вы имеете дело с пользовательским вводом, даже этого может быть недостаточно. Например, если пользователь сделает опечатку, она не будет соответствовать.

Так что я рекомендую также взглянуть на библиотеку нечетких слов

from fuzzywuzzy import fuzz 

def similar(string1, string2):
    ratio = fuzz.ratio(string1, string2)
    return ratio >= 85  # number between 0 and 100. Higher means fewer differences are allowed

Fuzzywuzzy очень мощный и простой в использовании. Для получения дополнительной информации: https://github.com/seatgeek/fuzzywuzzy

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