又是一年期末季,小小修改了一下上一个版本的,通过读入的题目文件进行答题。
(多多做题才能背的住(嘿嘿))
文件格式(.txt)
读取文件
def readtxt():
with open('demo2.txt', encoding='utf8') as f:
keys = f.readline().strip().split('|') # 读取文件第一行转成list,作为字典的key
que_list = []
for values in f:
que_dict = {} # 声明一空字典,保存每一行的内容
values = values.strip().split('|') # 将文件内容按'|'分隔转成列表
if len(values) == 3: # 防止有空行
values[1] = values[1].split(',') # 将选项内容按','分隔转成列表
for i in range(len(keys)): # 通过下标遍历keys列表
que_dict[keys[i]] = values[i]
que_list.append(que_dict)
return que_list
判断并且统计正确题数
def count_process(identifier, i, que_list, note):
right_answer = que_list[i]['answer']
# 单选题提示
if identifier == "Choices_one":
respond = input("input you choices on (A,B,C,D):")
# 单选题提示
if identifier == "Choices_some":
respond = input("input you choices:")
# 判断题提示
elif identifier == "Judge":
respond = input("input you choices(yes or no):")
# 简答题提示
elif identifier == "Shortan":
respond = input("input you answer:")
# 简答题判断对错
# 放入两个列表(不能用集合(元素去重)),求交集、
set_respond = set(respond)
set_right_answer = set(right_answer)
fin = set_respond & set_right_answer
true_rate = (len(fin) / len(set_right_answer)) * 100
print("正确率:", true_rate)
if true_rate > 80:
print("✔✔✔✔✔✔")
right_count = 1
else:
print("××××××\nright answer is {}".format(right_answer))
right_count = 0
wrong_note(que_list, i, note)
return right_count
# 判断对错与计算正确题数
print("-----------------")
if respond.upper() == right_answer or respond.lower() == right_answer:
print("✔✔✔✔✔✔")
right_count = 1
else:
print("××××××\nright answer is {}\nyou answer is {}".format(right_answer, respond))
right_count = 0
wrong_note(que_list, i, note)
return right_count # 判断题正确题数
答题模式
def main_answer():
# 每次进来的时候先清空上一次的错题本
with open("错题集.txt", "w", encoding="utf-8") as f:
f.write('')
f.close()
note = open('错题集.txt', mode='a', encoding="gbk")
que_list = readtxt()
que_num = len(que_list)
que_right = 0 # 防止一道都没对
choice_count = 0
judge_count = 0
shortan_count = 0
choices_count = 0
for i in range(que_num): # 循环全部题目
print(i, "、", que_list[i]['question'])
xuan_num = len(que_list[i]['choices'])
for j in range(xuan_num): # 循环每道题目的选项
print(que_list[i]['choices'][j]) # 打印选项
if que_list[i]['choices'] == ['']: # 判断题
judge_count += count_process("Judge", i, que_list, note)
elif que_list[i]['choices'] == ['答:']: # 简答题
shortan_count += count_process("Shortan", i, que_list, note)
elif len(que_list[i]['answer']) > 1: # 多选题
choices_count += count_process("Choices_some", i, que_list, note)
else:
choice_count += count_process("Choices_one", i, que_list, note)
print("\n")
# time.sleep(2) #查看解析的时间
note.close()
que_right = que_right + choice_count + judge_count + shortan_count + choices_count
return "finally right_rate:{}%".format(int((que_right / que_num) * 100))
背题模式
def main_recitation():
que_list = readtxt()
que_num = len(que_list)
for i in range(que_num): # 循环全部题目
print(que_list[i]['question'])
xuan_num = len(que_list[i]['choices'])
for j in range(xuan_num): # 循环每道题目的选项
print(que_list[i]['choices'][j]) # 打印选项
print("___")
print(que_list[i]['answer'])
print("\n")
os.system('pause') # 按回车键到下一道
搜索题目
def find_qu():
input_ti = input("请输入你要搜索的题目:")
que_list = readtxt()
pan = 0
for i in que_list:
if input_ti in i['question']:
print(i['question'])
for n in i['choices']:
print(n)
print("---\n", i['answer'], "\n")
pan = 1
if pan == 0:
print("没有找到你要搜索的题目!回到主页面...")
main()
引导页
def main():
print("*" * 7)
print("选择你要进入的模式:\n 1.答题模式\n 2.背题模式\n 3.搜索题目")
print("*" * 7)
x = input('请输入数字:')
if x == "1":
print("\n" * 5)
print(main_answer())
elif x == "2":
print("\n" * 5)
main_recitation()
elif x == "3":
print("\n" * 15)
find_qu()
else:
print("\n" * 10)
print("你的输入有误!")
main()
错题本
def wrong_note(que_list, i, note, ):
note.write(str(i + 1))
note.write('、')
note.write(que_list[i]['question'])
note.write('\n')
note.writelines(que_list[i]['choices'])
note.write('\n')
note.write(que_list[i]['answer'])
note.write('\n')
计时
def times(st, e):
seconds = int(math.floor(e - st))
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
print("use time:{}".format("%d:%02d:%02d" % (h, m, s)))
全部代码
import time
import os
import math
# 打开文件
def readtxt():
with open('demo2.txt', encoding='utf8') as f:
keys = f.readline().strip().split('|') # 读取文件第一行转成list,作为字典的key
que_list = []
for values in f:
que_dict = {} # 声明一空字典,保存每一行的内容
values = values.strip().split('|') # 将文件内容按'|'分隔转成列表
if len(values) == 3: # 防止有空行
values[1] = values[1].split(',') # 将选项内容按','分隔转成列表
for i in range(len(keys)): # 通过下标遍历keys列表
que_dict[keys[i]] = values[i]
que_list.append(que_dict)
return que_list
# ---------------------------------------------------判断
def count_process(identifier, i, que_list, note):
right_answer = que_list[i]['answer']
# 单选题提示
if identifier == "Choices_one":
respond = input("input you choices on (A,B,C,D):")
# 单选题提示
if identifier == "Choices_some":
respond = input("input you choices:")
# 判断题提示
elif identifier == "Judge":
respond = input("input you choices(yes or no):")
# 简答题提示
elif identifier == "Shortan":
respond = input("input you answer:")
# 简答题判断对错
# 放入两个列表(不能用集合(元素去重)),求交集、
set_respond = set(respond)
set_right_answer = set(right_answer)
fin = set_respond & set_right_answer
true_rate = (len(fin) / len(set_right_answer)) * 100
print("正确率:", true_rate)
if true_rate > 80:
print("✔✔✔✔✔✔")
right_count = 1
else:
print("××××××\nright answer is {}".format(right_answer))
right_count = 0
wrong_note(que_list, i, note)
return right_count
# 判断对错与计算正确题数
print("-----------------")
if respond.upper() == right_answer or respond.lower() == right_answer:
print("✔✔✔✔✔✔")
right_count = 1
else:
print("××××××\nright answer is {}\nyou answer is {}".format(right_answer, respond))
right_count = 0
wrong_note(que_list, i, note)
return right_count # 判断题正确题数
# ---------------------------------------------------答题模式
def main_answer():
# 每次进来的时候先清空上一次的错题本
with open("错题集.txt", "w", encoding="utf-8") as f:
f.write('')
f.close()
note = open('错题集.txt', mode='a', encoding="gbk")
que_list = readtxt()
que_num = len(que_list)
que_right = 0 # 防止一道都没对
choice_count = 0
judge_count = 0
shortan_count = 0
choices_count = 0
for i in range(que_num): # 循环全部题目
print(i, "、", que_list[i]['question'])
xuan_num = len(que_list[i]['choices'])
for j in range(xuan_num): # 循环每道题目的选项
print(que_list[i]['choices'][j]) # 打印选项
if que_list[i]['choices'] == ['']: # 判断题
judge_count += count_process("Judge", i, que_list, note)
elif que_list[i]['choices'] == ['答:']: # 简答题
shortan_count += count_process("Shortan", i, que_list, note)
elif len(que_list[i]['answer']) > 1: # 多选题
choices_count += count_process("Choices_some", i, que_list, note)
else:
choice_count += count_process("Choices_one", i, que_list, note)
print("\n")
# time.sleep(2) #查看解析的时间
note.close()
que_right = que_right + choice_count + judge_count + shortan_count + choices_count
return "finally right_rate:{}%".format(int((que_right / que_num) * 100))
# ---------------------------------------------------背题模式
def main_recitation():
que_list = readtxt()
que_num = len(que_list)
for i in range(que_num): # 循环全部题目
print(que_list[i]['question'])
xuan_num = len(que_list[i]['choices'])
for j in range(xuan_num): # 循环每道题目的选项
print(que_list[i]['choices'][j]) # 打印选项
print("___")
print(que_list[i]['answer'])
print("\n")
os.system('pause') # 按回车键到下一道
# ---------------------------------------------------搜索题目
def find_qu():
input_ti = input("请输入你要搜索的题目:")
que_list = readtxt()
pan = 0
for i in que_list:
if input_ti in i['question']:
print(i['question'])
for n in i['choices']:
print(n)
print("---\n", i['answer'], "\n")
pan = 1
if pan == 0:
print("没有找到你要搜索的题目!回到主页面...")
main()
# -------------------------------主页面
def main():
print("*" * 7)
print("选择你要进入的模式:\n 1.答题模式\n 2.背题模式\n 3.搜索题目")
print("*" * 7)
x = input('请输入数字:')
if x == "1":
print("\n" * 5)
print(main_answer())
elif x == "2":
print("\n" * 5)
main_recitation()
elif x == "3":
print("\n" * 15)
find_qu()
else:
print("\n" * 10)
print("你的输入有误!")
main()
# 错题本
def wrong_note(que_list, i, note, ):
note.write(str(i + 1))
note.write('、')
note.write(que_list[i]['question'])
note.write('\n')
note.writelines(que_list[i]['choices'])
note.write('\n')
note.write(que_list[i]['answer'])
note.write('\n')
# -----------------------------------------计时
def times(st, e):
seconds = int(math.floor(e - st))
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
print("use time:{}".format("%d:%02d:%02d" % (h, m, s)))
if __name__ == '__main__':
st = time.time()
main()
e = time.time()
times(st, e)
结果展示:
答题模式
背题模式:
搜索题目