2017-02-20 16 views
1

Я только что начал программировать несколько дней назад. Я сделал эту программу, где пользователь может создать викторину (все буквы Q и A записаны в файл). Когда я приступаю к чтению файла ответов, я делаю оператор with, чтобы извлекать каждую строку независимо, а затем сравнивать ее с каждой независимой строкой файла Qs. Это работает отлично, и ценность, которую я хочу сравнить, действительно. Но когда ответ действительно совпадает с ответом на файл, оператор if все еще возвращает команды else! Это невероятно! Вот результат для уточнения.Оператор IF не сравнивает значения, полученные из файла

Вопрос номер 1: Что ваше имя

вход Ответ: Абдо

К сожалению, тот неправильно! Правильный ответ: Абдо

Ваш результата: 0

Вопроса номер 2: Что мое имя

входа Ответ: abdo1

К сожалению, тот неправильно! Правильный ответ: abdo1

Ваш результат: 0

Это мой код:

import sys 
questions = [] 
answers = [] 
score = 0 
print("+++++++++++++++Welcome to SS Quiz Maker++++++++++++++++") 
save = input("Would you like to create a new quiz or load your saved one :") 
if save == "y": 
    for i in range(0,2): 
     print("Question number",i + 1) 
     questions.append(input("Enter a Question :")) 
     answers.append(input("Enter an Answer :")) 

    f = open("SS_QUIZ_QUESTIONS.txt", "w") 
    f.truncate() 
    for i in questions: 
     f.write(i) 
     f.write("\n") 
    f.close() 
    f = open("SS_QUIZ_ANSWERS.txt", "w") 
    for i in answers: 
     f.write(i) 
     f.write("\n") 
    f.close() 
else: 
    for i in range(0,2): 
     with open('SS_QUIZ_QUESTIONS.txt') as f: 
      u = 1 
      for line in f: 
       if u == i + 1: 
        break 
     with open('SS_QUIZ_ANSWERS.txt') as f: 
      u = 1 
      for line2 in f: 
       if u == i + 1: 
        break 
     print("Question Number ",i + 1," :",line) 
     ans = str(input("input the Answer :")) 

     if ans == line2: 
      print("Correct") 
      score = score +1 
      print("Your score is :",score) 

     else: 
      print("Sorry, thats Wrong!") 
      print("The right answer is :", line2) 
      print("Your score is :",score) 
+0

есть пробелы? можете ли вы напечатать две строки рядом? – depperm

+0

Что вы подразумеваете под пробелом –

+0

извините, не очень-то про питон, пожалуйста, будьте терпеливы со мной –

ответ

2

Проблема заключается в том, что когда вы пишете ответы на файл, вы можете также написать символ новой строки "\n". Теперь, когда вы сравниваете свои строки, вы фактически сравниваете abdo1 с abdo1\n, что является ложным. Используйте метод .rstrip() на вашей строке line2 перед сравнением.

В коде:

if ans == line2.rstrip(): 

Если сделать трюк

+0

большое спасибо Leon Z и depperm. Работает как шарм! –

+0

@AbdulrahmanAttia Добро пожаловать! :) –