小小答题功能系统代码python实现 2.0

又是一年期末季,小小修改了一下上一个版本的,通过读入的题目文件进行答题。
(多多做题才能背的住(嘿嘿))

文件格式(.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)


结果展示:

答题模式
在这里插入图片描述
背题模式:在这里插入图片描述
搜索题目
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值