У меня есть простая опрос в 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,"%.")
Для этого существует библиотека 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
"path/to/your/quizfile.csv"
любым удобным для вас способом, включая сначала "path/to/your/quizfile.csv"
пользователя.
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()
Выход:
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
Улучшение:
csv
. См. Ответ Адама Смита.Ссылка:
x.split(",")
данных он работает почти нормально - проблема в том, чтоx.split(",")
выводит конец строки\n
. Например,data=['q1', 'a1\n']