2016-09-08 2 views
0

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

# Flashcards 

#Read from a file containing questions in the form question, answer 


import random 
import time 

def __run__(): 
    read_file = open('state_capitals.txt','r') 
    lines = read_file.readlines() 
    ran_lines = random.randrange(0,49) 
    string_lines = lines[ran_lines] 
    global string_lines_split # To make debugging easier 
    string_lines_split = string_lines.split(',') 
    print(string_lines_split[1]) # Print correct answer 
    usr_input = input(string_lines_split[0]) 
    if usr_input == str(string_lines_split[1]): 
     print("Correct!") 
    else: 
     print("Incorrect") 
     print(usr_input) 

Когда я исполняю запустить(), все работает отлично, пока я не ввести свой ответ. Я получил запрос на ответ, и когда я вхожу в него, даже если мой ответ точно такой же, как ответ в string_lines_split 1, программа печатает, что мой ответ неверен. Ссылка на текст документа: http://web.mit.edu/jesstess/www/IntermediatePythonWorkshop/state_capitals.txt

>>>__run__() 
Helena 

MontanaHelena 
Incorrect 
Helena 

Спасибо за чтение о моей проблеме, и направляя меня к решению. Я с нетерпением жду совместной работы с сообществом stackoverflow.

+0

Где определяется 'string_lines_final'? –

ответ

1

Сначала ваш код имеет ошибку: print(string_lines_final[1]) должен быть print(string_lines_split[1]).

Ваша проблема заключается в том, что в есть конечный '\n', что приводит к сбою сравнения.

Попробуйте изменить string_lines = lines[ran_lines] на string_lines = lines[ran_lines].rstrip().

+0

Возможно, передается '' \ r \ n "' на 'rstrip', если важна длина пробела, отличного от новой строки. – ShadowRanger

+0

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

0

«даже если мой ответ точно так же, как и ответ в string_lines_split1, программа печатает что мой ответ неверен»

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

Подсказка: как же файл устроен так:

Alabama,Montgomery 
Alaska,Juneau 
Arizona,Phoenix 

вместо этого:

Alabama,MontgomeryAlaska,JuneauArizona,Phoenix 

?

Подсказка: сравните len() вашего ввода и правильный ответ.

Подсказка: сравнить их по характеру. Возможно печать character codes.

0

Так что, когда вы читаете файл, список, возвращаемый read_file.readlines() выглядит следующим образом:

[...'West Virginia,Charleston\n', 'Wisconsin,Madison\n', 'Wyoming,Cheyenne'] 

Так что ваш код должен быть таким:

def __run__(): 
    read_file = open('state_capitals.txt','r') 
    lines = read_file.readlines() 
    ran_lines = random.randrange(0,49) 
    string_lines = lines[ran_lines] 
    global string_lines_split # To make debugging easier 
    string_lines_split = string_lines.split(',') 
    print(string_lines_split[1]) # Print correct answer 
    usr_input = input(string_lines_split[0]) 
    if usr_input == str(string_lines_split[1].rstrip()): 
     print("Correct!") 
    else: 
     print("Incorrect") 
     print(usr_input) 
Смежные вопросы