Estoy tratando de hacer una prueba usando Python que lee las preguntas de un archivo de texto. Tengo una variable llamada ans que se supone que es la respuesta que lee del archivo. Imprimo la variable y dice lo que se supone que debe decir, pero si realmente la escribo, dirá que está mal. Este es mi código de Python:

right = 0
wrong = 0
num = 0
quest = 0
history = open("history.txt", "r")
lines = history.readlines()
while quest != 3:
    quest = quest+1
    num = num+1
    print("Question", quest)
    question = lines[num]
    print(question)
    num = num + 1
    ans = lines[num]
    print(ans)
    answer = input()
    answer = answer.lower()
    if answer == ans:
        print("correct")
        right = right+1
    else:
        print("Wrong")
        wrong = wrong+0
print("done")

Y mi archivo history.txt está formateado así

Blank Line Blank Line
What is the capital of England?
london
What is 1+1?
2

Gracias.

1
Vadim Alexeev 28 oct. 2017 a las 00:36

5 respuestas

La mejor respuesta

Las cadenas devueltas por history.readlines() tienen líneas nuevas al final, pero la cadena devuelta por input() no. Use rstrip() para eliminar cualquier espacio en blanco al final de la cadena.

ans = lines[num].rstrip()
3
Barmar 27 oct. 2017 a las 21:40

Intenta recorrer tu programa. Si imprime el contenido de las líneas después de leer el archivo, verá que tiene nuevos caracteres de línea:

>>> history = open("history.txt", "r")
>>> lines = history.readlines()
>>> lines
['Blank Line Blank Line\n', 'What is the capital of England?\n', 'london\n', 'What is 1+1?\n', '2']

Deberá recortar el carácter de nueva línea ans = ans.rstrip("\n")

0
junvar 27 oct. 2017 a las 21:43

Debido al hecho ya mencionado, a \n permanece al final de cada línea, recomiendo usar re.split('\n',yourFile) para dividir una cadena en sus líneas. El carácter de nueva línea a menudo no es útil en tales casos.

-1
Sim Son 27 oct. 2017 a las 21:45

readlines() deja un carácter de nueva línea (\n) cuando divide su cadena. Intente configurar ans con

ans = lines[num].rstrip()
0
Jacobm001 27 oct. 2017 a las 21:40

Estoy bastante seguro de que hay un "nuevo carácter de línea" - a.k.a '\ n' - cuando lees del archivo. Mira esto:

a = "123"
b = "123\n"
print(a == b)
Output: False

Pero:

a = "123"
b = "123\n"
print(a == b.rstrip())
True
0
paulogdm 27 oct. 2017 a las 21:53