一. 从CSV文件中加载题目(load_questions)
1. 代码
代码语言:javascript复制def load_questions(file_path):
questions = []
with open(file_path, 'r', encoding='utf-8') as file:
reader = csv.reader(file)
next(reader) # 跳过表头
for row in reader:
question = {
'topic': row[0],
'content': row[1],
'options': row[2:6],
'answer': row[6]
}
questions.append(question)
return questions
2. 功能
从题目文件中加载题目列表,使用csv
模块读取CSV文件,并将每一行的数据转化为题目字典。题目字典包括题目的标题、内容、选项和答案,并将所有题目字典存储在一个列表中。
3. 解析
-
load_questions
函数接受一个文件路径作为参数,并返回一个题目列表。 - 使用
open
函数打开文件,并使用csv.reader
函数将文件转换为一个可迭代的Reader对象。 - 使用
next(reader)
跳过表头,即读取文件中的第一行数据,通常是标题行。 - 遍历
reader
对象,对于每一行数据,将题目的各个字段存储在一个字典中,并将该字典添加到题目列表中。 - 返回题目列表。
对于每一行数据,通过索引方法row[x]
来获取相应的字段,将这些字段存储在一个字典中,然后将字典添加到题目列表中。
在这里,CSV文件的结构如下:
通过使用CSV模块的reader
函数,我们可以方便地处理CSV文件,并将每一行数据转换为一个列表。然后可以使用列表的索引来获取特定的字段值。在这种情况下,题目的内容、选项和答案分别位于索引1到6的位置,因此可以通过切片操作将这些字段提取出来。最后,将提取出的字段分别存储在一个字典中,并将该字典添加到题目列表中。
二、在控制台上显示题目和选项(display_question
)
1. 代码
代码语言:javascript复制def display_question(question_number, question):
print(f'题目{question_number}: {question["content"]}')
for i, option in enumerate(question['options']):
print('{}: {}'.format(chr(ord('A') i), option))
2. 功能
显示题目的内容,包括题目标题、选项和题号。通过循环遍历选项列表,并使用enumerate
函数来获取选项的索引和选项内容,按照题号和选项的格式进行打印。
3. 解析
- 接收题目编号
question_number
和题目信息字典question
作为参数。 - 使用
print
函数打印题目编号和题目内容,格式为题目{question_number}: {question["content"]}
。 - 使用
enumerate
函数遍历题目的选项列表question['options']
。enumerate
函数返回一个迭代器,该迭代器会在每次迭代时返回一个包含索引和元素的元组。 - 使用
chr(ord('A') i)
来生成选项的字母标识,ord('A')
表示字母'A'的ASCII码,ord('A') i
表示字母依次递增。 - 使用
print
函数打印选项的字母标识和选项内容,格式为字母标识: 选项内容
。
三、检查答案是否正确(check_answer)
1. 代码
代码语言:javascript复制def check_answer(question, user_answer):
correct_answer = question['answer']
return user_answer.upper() == correct_answer.upper()
2. 功能
判断用户的答案是否正确,并给与相应的反馈。
3. 解析
- 接收题目信息字典
question
和用户答案user_answer
作为参数。 - 从题目信息字典
question
中获取正确答案correct_answer
。 - 使用
user_answer.upper()
和correct_answer.upper()
将用户答案和正确答案转换为大写字母。 - 比较转换后的用户答案
user_answer.upper()
和正确答案correct_answer.upper()
是否相等。 - 返回比较结果的布尔值,表示用户的答案是否正确。
四、刷题程序主函数
1. 代码
代码语言:javascript复制def main():
file_path = '单选题.csv'
questions = load_questions(file_path)
print('欢迎使用毛概刷题程序!')
print('请阅读题目并输入你的答案(A、B、C或D)')
correct_answers = 0
for i, question in enumerate(questions, 1):
display_question(i, question)
user_answer = input('请输入你的答案: ')
if check_answer(question, user_answer):
print('回答正确!')
correct_answers = 1
else:
correct_answer = question['answer']
print(f'回答错误!正确答案是: {correct_answer}')
file_path = '单选_1.csv'
with open(file_path, 'a', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
writer.writerow([question['topic'], question['content'], question['options'][1], question['options'][0],
question['options'][2], question['options'][3], question['answer']])
print(f'你答对了 {correct_answers} 道题目。')
2. 功能
先加载题目并打印欢迎信息,之后循环显示题目、接受用户答案、判断答案、给出反馈……
3. 解析
- 定义了一个文件路径
file_path
,指定了题目文件的位置。 - 调用
load_questions
函数从指定的文件路径中加载题目信息,将加载的题目存储在questions
列表中。 - 使用
print
函数打印欢迎信息和提示用户输入答案的说明。 - 定义了一个变量
correct_answers
,用于记录用户回答正确的题目数量,初始值为0。 - 使用
enumerate
函数遍历题目列表questions
,同时获取题目的索引i
和题目信息字典question
。 - 使用
display_question
函数打印题目和选项。 - 使用
input
函数等待用户输入答案,并将用户输入的答案存储在变量user_answer
中。 - 使用
check_answer
函数检查用户的答案是否正确。 - 如果用户的答案正确,使用
print
函数打印回答正确的提示信息,并将correct_answers
加1。 - 如果用户的答案错误,使用
print
函数打印回答错误的提示信息,以及正确答案。 - 将题目信息写入到名为
单选_1.csv
的文件中,以便后续参考。 - 最后,使用
print
函数打印用户答对的题目数量。