鱼C论坛

 找回密码
 立即注册
查看: 129|回复: 11

写一个基于easygui的错题收集并且能随机出题的程序

[复制链接]
发表于 2024-4-11 10:27:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写一个基于easygui的错题收集并且能随机出题的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-11 10:27:53 | 显示全部楼层
好的,下面是一个基于easygui的错题收集并且能随机出题的程序:

  1. import easygui
  2. import random

  3. def collect_questions():
  4.     questions = []
  5.    
  6.     # 使用easygui进行问题输入
  7.     while True:
  8.         question = easygui.enterbox("请输入问题(输入'exit'结束输入):")
  9.         if question == 'exit':
  10.             break
  11.         
  12.         answer = easygui.enterbox("请输入答案:")
  13.         questions.append((question, answer))
  14.    
  15.     return questions

  16. def ask_question(questions):
  17.     # 随机出题
  18.     question, answer = random.choice(questions)
  19.    
  20.     # 使用easygui显示问题,并接收用户输入答案
  21.     user_answer = easygui.enterbox(question)
  22.    
  23.     if user_answer == answer:
  24.         easygui.msgbox("回答正确!")
  25.     else:
  26.         easygui.msgbox("回答错误!正确答案是:%s" % answer)

  27. def main():
  28.     # 收集问题
  29.     questions = collect_questions()
  30.    
  31.     # 循环随机出题
  32.     while True:
  33.         ask_question(questions)
  34.         continue_test = easygui.buttonbox("是否继续测试?", choices=['继续', '退出'])
  35.         if continue_test == '退出':
  36.             break

  37. if __name__ == '__main__':
  38.     main()
复制代码


使用该程序,你可以通过easygui输入问题并记录答案,然后程序会在每次测试时随机选择一个问题,并要求你输入答案。如果答案正确,程序会弹出提示"回答正确",否则提示"回答错误",并显示正确答案。之后你可以选择是否继续测试,如果选择退出,则程序结束。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 10:33:31 | 显示全部楼层
easygui就是一个玩的,没必要在它上面投入一丝丝的精力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-11 10:35:39 | 显示全部楼层
FishC 发表于 2024-4-11 10:27
好的,下面是一个基于easygui的错题收集并且能随机出题的程序:

问题输入部分能否更改为直接导入文档的形式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 10:35:59 | 显示全部楼层
chen` 发表于 2024-04-11 10:35
问题输入部分能否更改为直接导入文档的形式?


当然可以!下面是修改后的代码,使用文件导入问题和答案:

  1. import easygui
  2. import random

  3. def collect_questions(file_path):
  4.     questions = []
  5.    
  6.     with open(file_path, 'r') as f:
  7.         for line in f:
  8.             question, answer = line.strip().split(':')
  9.             questions.append((question, answer))
  10.             
  11.     return questions

  12. def ask_question(questions):
  13.     # 随机出题
  14.     question, answer = random.choice(questions)
  15.    
  16.     # 使用easygui显示问题,并接收用户输入答案
  17.     user_answer = easygui.enterbox(question)
  18.    
  19.     if user_answer == answer:
  20.         easygui.msgbox("回答正确!")
  21.     else:
  22.         easygui.msgbox("回答错误!正确答案是:%s" % answer)

  23. def main():
  24.     file_path = easygui.fileopenbox("请选择问题文件")
  25.     if not file_path:
  26.         easygui.msgbox("未选择文件,程序退出")
  27.         return
  28.    
  29.     # 收集问题
  30.     questions = collect_questions(file_path)
  31.    
  32.     # 循环随机出题
  33.     while True:
  34.         ask_question(questions)
  35.         continue_test = easygui.buttonbox("是否继续测试?", choices=['继续', '退出'])
  36.         if continue_test == '退出':
  37.             break

  38. if __name__ == '__main__':
  39.     main()
复制代码


在这个版本的程序中,你需要选择一个包含问题和答案的文本文件,每行一个问题和答案,用冒号分隔。程序会读取文件中的问题和答案,并进行测试。如果选择退出,程序结束。

希望这次修改符合你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-11 10:40:53 | 显示全部楼层
FishC 发表于 2024-4-11 10:35
当然可以!下面是修改后的代码,使用文件导入问题和答案:

可以增加上选择题,单选,多选吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 10:41:44 | 显示全部楼层
chen` 发表于 2024-04-11 10:40
可以增加上选择题,单选,多选吗?


当然可以!下面是修改后的代码,增加选择题功能,包括单选和多选:import easyguiimport randomdef collect_questions(file_path):    questions = []    with open(file_path, 'r') as f:        question_type = None        choices = []        for line in f:            line = line.strip()            if line.startswith('@'):                # 获取题目类型                question_type = line.strip('@')            elif line.startswith('#'):                # 获取选项                choices.append(line.strip('#'))            elif line.startswith('*'):                # 获取答案                answer = line.strip('*').split(',')                if question_type == "单选题":                    questions.append((question, choices, answer))                    question_type = None                    choices = []                elif question_type == "多选题":                    questions.append((question, choices, answer))                    question_type = None                    choices = []                else:                    raise ValueError("未知题目类型:%s" % question_type)            else:                question = line        return questionsdef ask_question(question):    # 随机出题    question, choices, answer = random.choice(questions)    # 使用easygui显示问题,并接收用户输入答案    if len(choices) > 1:        # 多选题        user_answer = easygui.multchoicebox(title=question, choices=choices)    else:        # 单选题        user_answer = easygui.buttonbox(title=question, choices=choices)    if user_answer == answer:        easygui.msgbox("回答正确!")    else:        easygui.msgbox("回答错误!正确答案是:%s" % answer)def main():    file_path = easygui.fileopenbox("请选择问题文件")    if not file_path:        easygui.msgbox("未选择文件,程序退出")        return    questions = collect_questions(file_path)    while True:        ask_question(questions)        continue_test = easygui.buttonbox("是否继续测试?", choices=)        if continue_test == '退出':            breakif __name__ == '__main__':    main()在这个版本的程序中,你需要在文本文件中按照一定的格式来编写选择题。使用“@”作为题目类型标记,使用“#”作为选项标记,“*”作为答案标记。比如:@单选题简答题是什么?#A. 答案A#B. 答案B#C. 答案C#D. 答案D#*B@多选题以下哪些是编程语言?#A. Python#B. 苹果#C. Java#D. 草莓#*A,C以上例子中,第一个问题是单选题,答案是B;第二个问题是多选题,答案是A和C。希望这次的修改满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-11 10:43:08 | 显示全部楼层
FishC 发表于 2024-4-11 10:41
当然可以!下面是修改后的代码,增加选择题功能,包括单选和多选:import easyguiimport randomdef col ...

依旧以添加文档模板的形式,同时导入简答,单选,多选题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 10:43:29 | 显示全部楼层
chen` 发表于 2024-04-11 10:43
依旧以添加文档模板的形式,同时导入简答,单选,多选 ...


好的,下面是修改后的代码,可以导入包含简答题、单选题和多选题的文档模板:import easyguiimport randomdef collect_questions(file_path):    questions =         with open(file_path, 'r') as f:        question_type = None        choices =         for line in f:            line = line.strip()            if line.startswith('@'):                # 获取题目类型                question_type = line.strip('@')            elif line.startswith('#'):                # 获取选项                choices.append(line.strip('#'))            elif line.startswith('*'):                # 获取答案                answer = line.strip('*')                if question_type == "单选题":                    questions.append((question, choices, answer))                    question_type = None                    choices =                 elif question_type == "多选题":                    answer = [a.strip() for a in answer.split(',')]                    questions.append((question, choices, answer))                    question_type = None                    choices =                 elif question_type == "简答题":                    questions.append((question, answer))                    question_type = None                else:                    raise ValueError("未知题目类型:%s" % question_type)            else:                question = line        return questionsdef ask_question(question):    # 随机出题    if len(question) == 2:        # 简答题        user_answer = easygui.enterbox(question[0])        if user_answer == question[1]:            easygui.msgbox("回答正确!")        else:            easygui.msgbox("回答错误!正确答案是:%s" % question[1])    else:        # 选择题        choices = question[1]        answer = question[2]        if len(choices) > 1:            # 多选题            user_answer = easygui.multchoicebox(title=question[0], choices=choices)            if set(user_answer) == set(answer):                easygui.msgbox("回答正确!")            else:                easygui.msgbox("回答错误!正确答案是:%s" % ','.join(answer))        else:            # 单选题            user_answer = easygui.buttonbox(title=question[0], choices=choices)            if user_answer == answer[0]:                easygui.msgbox("回答正确!")            else:                easygui.msgbox("回答错误!正确答案是:%s" % answer[0])def main():    file_path = easygui.fileopenbox("请选择问题文件")    if not file_path:        easygui.msgbox("未选择文件,程序退出")        return    questions = collect_questions(file_path)    while True:        question = random.choice(questions)        ask_question(question)        continue_test = easygui.buttonbox("是否继续测试?", choices=)        if continue_test == '退出':            breakif __name__ == '__main__':    main()在这个版本的程序中,你需要在文本文件中按照一定的格式来编写题目。使用“@”作为题目类型标记,使用“#”作为选项标记,“*”作为答案标记。比如:@单选题以下哪个不是编程语言?#A. Python#B. 苹果#C. Java#D. 草莓#*B@多选题以下哪些是编程语言?#A. Python#B. 苹果#C. Java#D. 草莓#*A,C@简答题请简述什么是循环结构?#循环结构用于反复执行一段程序代码,直到满足某个条件才停止执行以上例子中,第一个问题是单选题,答案是B;第二个问题是多选题,答案是A和C;第三个问题是简答题,答案是给出了简洁明了的定义。希望这次的修改满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-11 10:45:41 | 显示全部楼层
FishC 发表于 2024-4-11 10:43
好的,下面是修改后的代码,可以导入包含简答题、单选题和多选题的文档模板:import easyguiimport ran ...

增加列出所有题库,可以选择删除一些题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 10:47:36 | 显示全部楼层
chen` 发表于 2024-04-11 10:45
增加列出所有题库,可以选择删除一些题目


好的,下面是修改后的代码,添加了列出所有题库和选择删除题目的功能:import easygui
import random

def collect_questions(file_path):
    questions = []
    with open(file_path, 'r') as f:
        question_type = None
        choices = []
        for line in f:
            line = line.strip()
            if line.startswith('@'):
                question_type = line.strip('@')
            elif line.startswith('#'):
                choices.append(line.strip('#'))
            elif line.startswith('*'):
                answer = line.strip('*')
                if question_type == "单选题":
                    questions.append((question, choices, answer))
                    question_type = None
                    choices = []
                elif question_type == "多选题":
                    questions.append((question, choices, answer))
                    question_type = None
                    choices = []
                elif question_type == "简答题":
                    questions.append((question, answer))
                    question_type = None
                else:
                    raise ValueError("未知题目类型:%s" % question_type)
            else:
                question = line
    return questions

def ask_question(question):
    if len(question) == 2:
        user_answer = easygui.enterbox(question)
        if user_answer == question:
            easygui.msgbox("回答正确!")
        else:
            easygui.msgbox("回答错误!正确答案是:%s" % question)
    else:
        choices = question
        answer = question
        if len(choices) > 1:
            user_answer = easygui.multchoicebox(title=question, choices=choices)
            if set(user_answer) == set(answer):
                easygui.msgbox("回答正确!")
            else:
                easygui.msgbox("回答错误!正确答案是:%s" % ','.join(answer))
        else:
            user_answer = easygui.buttonbox(title=question, choices=choices)
            if user_answer == answer:
                easygui.msgbox("回答正确!")
            else:
                easygui.msgbox("回答错误!正确答案是:%s" % answer)

def list_all_questions(questions):
    question_list = ""
    for i, question in enumerate(questions):
        question_list += str(i+1) + ". "
        if len(question) == 2:
            question_list += question[0] + " (简答题)\n"
        else:
            question_list += question[0] + " (选择题)\n"
    easygui.msgbox("题库中的所有问题如下:\n\n" + question_list)

def delete_question(questions):
    question_list = ""
    for i, question in enumerate(questions):
        question_list += str(i+1) + ". "
        if len(question) == 2:
            question_list += question[0] + " (简答题)\n"
        else:
            question_list += question[0] + " (选择题)\n"
            
    choices = ["退出"]
    for i in range(1, len(questions)+1):
        choices.append(str(i))
        
    choice = easygui.buttonbox("请选择要删除的题目:\n\n" + question_list, choices=choices)
   
    if choice != "退出":
        del questions[int(choice)-1]
        easygui.msgbox("题目已成功删除!")

def main():
    file_path = easygui.fileopenbox("请选择问题文件")
    if not file_path:
        easygui.msgbox("未选择文件,程序退出")
        return
   
    questions = collect_questions(file_path)
   
    while True:
        choice = easygui.buttonbox("请选择操作:", choices=["开始测试", "列出所有题库", "删除题目", "退出"])
        
        if choice == "开始测试":
            question = random.choice(questions)
            ask_question(question)
        elif choice == "列出所有题库":
            list_all_questions(questions)
        elif choice == "删除题目":
            delete_question(questions)
        elif choice == "退出":
            break

if __name__ == '__main__':
    main()

在这个版本的程序中,你可以选择开始测试、列出所有题库或删除题目。当选择开始测试时,程序会随机选择一个题目进行测试。当选择列出所有题库时,程序会显示题库中的所有问题。当选择删除题目时,程序会列出所有题目,并允许你选择要删除的题目。希望这次的修改满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 13:46:42 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表