Программа викторины Python - чтение CSV и анализ вопросов / ответов

1

У меня есть простая опрос в Python, которая имеет проблемы. Он читает текстовый файл с разделителями-запятыми в формате "вопрос, ответ". Программа отлично читает викторину и выдает вопросы, но я не могу задать вопросы для рандомизации и переменную "CorrectAnswer", чтобы прочитать правильный ответ.

Например, если вопрос: "Что такое столица Калифорнии?" и ответ "Сакраменто", файл CSV написал это так: "Что такое столица Калифорнии, Сакраменто". Но программа не может ссылаться на ответ, а только на первую часть перед запятой.

Что я делаю неправильно?

def quiz():
    score=0
    questionsRight=0
    fileName = input("Please enter the name of the quiz file: ")
    quizFile = open(fileName,"r")
    quizData = quizFile.readlines()
    questionno=1
    for x in range(10):
        for x in quizData:
            data = x.split(",")
        random.shuffle(quizData)
        questions = data[0]
        CorrectAnswer = data[1]

        print("Question #",questionno)
        print(questions)
        answer = input("What is your answer? ")
        if answer == CorrectAnswer:
            print("Correct!")
            score=score+1
            questionsRight=questionsRight+1
            questionno = questionno+1

        else:
            print("Incorrect.")
            questionno = questionno+1

    totalScore = (score / 10) * 100
    print("You got ",score," questions right, and a score of ",totalScore,"%.")
  • 0
    Я проверил ваш код, на моих x.split(",") данных он работает почти нормально - проблема в том, что x.split(",") выводит конец строки \n . Например, data=['q1', 'a1\n']
  • 0
    Да, я тоже это видел. Любые предложения о том, как написать так, чтобы символ \ n игнорировался?
Показать ещё 1 комментарий
Теги:

2 ответа

2

Для этого существует библиотека stdlib: csv.

import csv

with open("path/to/your/quizfile.csv") as f:
    reader = csv.reader(f)
    quiz_qas = list(reader)  # this could get *very* large -- take care if you have a large file.

q, a = random.choice(quiz_qas)
print(q)
answer = input(">>> ")
if answer == a:
    # user got the right answer
else:
    # user failed

random.sample даже позволит вам выбрать случайный k-размерный образец quiz_qas.

quiz = itertools.sample(quiz_qas, num_questions)
for q, a in quiz:
    # etc
  • 0
    Круто, это именно то, что я искал! Однако мне нужно, чтобы пользователь указал вход. fileName = input ("Пожалуйста, введите имя файла теста:")
  • 0
    @ spiritoffire224 это нормально - вы можете заменить эту строку-заполнитель "path/to/your/quizfile.csv" любым удобным для вас способом, включая сначала "path/to/your/quizfile.csv" пользователя.
0
  • Перетасуйте список и выберите первые n строк
  • Используйте strip для удаления новых строк в конце ответа

Обновленный код:

import random
def quiz():
    score=0
    questionsRight=0
    fileName = input("Please enter the name of the quiz file: ")
    quizFile = open(fileName,"r")
    quizData = quizFile.readlines()
    random.shuffle(quizData)
    questionno=1
    for i in range(5):
        x = quizData[i].strip()
        data = x.split(",")        
        question = data[0]
        CorrectAnswer = data[1]

        print("Question #",questionno)
        print(question)
        answer = input("What is your answer? ")
        if answer == CorrectAnswer:
            print("Correct!")
            score=score+1
            questionsRight=questionsRight+1
            questionno = questionno+1

        else:
            print("Incorrect.")
            print("Correc answer should be: "+CorrectAnswer)
            questionno = questionno+1
        print()

    totalScore = (score / 10) * 100
    print("You got ",score," questions right, and a score of ",totalScore,"%.")
quiz()

Выход:

Изображение 174551

data.csv:

Demo question 1,Answer 1
Demo question 2,Answer 2
Demo question 3,Answer 3
Demo question 4,Answer 4
Demo question 5,Answer 5
Demo question 6,Answer 6
Demo question 7,Answer 7
Demo question 8,Answer 8
Demo question 9,Answer 9
Demo question 10,Answer 10
Demo question 11,Answer 11
Demo question 12,Answer 12
Demo question 13,Answer 13
Demo question 14,Answer 14
Demo question 15,Answer 15
Demo question 16,Answer 16
Demo question 17,Answer 17
Demo question 18,Answer 18
Demo question 19,Answer 19
Demo question 20,Answer 20
Demo question 21,Answer 21

Улучшение:

Ссылка:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню