chen` 发表于 2024-4-11 10:27:04

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

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

FishC 发表于 2024-4-11 10:27:53

好的,下面是一个基于easygui的错题收集并且能随机出题的程序:

import easygui
import random

def collect_questions():
    questions = []
   
    # 使用easygui进行问题输入
    while True:
      question = easygui.enterbox("请输入问题(输入'exit'结束输入):")
      if question == 'exit':
            break
      
      answer = easygui.enterbox("请输入答案:")
      questions.append((question, answer))
   
    return questions

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

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

if __name__ == '__main__':
    main()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-4-11 10:33:31

easygui就是一个玩的,没必要在它上面投入一丝丝的精力

chen` 发表于 2024-4-11 10:35:39

FishC 发表于 2024-4-11 10:27
好的,下面是一个基于easygui的错题收集并且能随机出题的程序:




问题输入部分能否更改为直接导入文档的形式?

FishC 发表于 2024-4-11 10:35:59

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

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

import easygui
import random

def collect_questions(file_path):
    questions = []
   
    with open(file_path, 'r') as f:
      for line in f:
            question, answer = line.strip().split(':')
            questions.append((question, answer))
            
    return questions

def ask_question(questions):
    # 随机出题
    question, answer = random.choice(questions)
   
    # 使用easygui显示问题,并接收用户输入答案
    user_answer = easygui.enterbox(question)
   
    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 == '退出':
            break

if __name__ == '__main__':
    main()

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

chen` 发表于 2024-4-11 10:40:53

FishC 发表于 2024-4-11 10:35
当然可以!下面是修改后的代码,使用文件导入问题和答案:




可以增加上选择题,单选,多选吗?

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

chen` 发表于 2024-4-11 10:43:08

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

依旧以添加文档模板的形式,同时导入简答,单选,多选题目

FishC 发表于 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 =                   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)      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 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 小助理,如未能正确解答您的问题,请继续追问。

chen` 发表于 2024-4-11 10:45:41

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

增加列出所有题库,可以选择删除一些题目

FishC 发表于 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 + " (简答题)\n"
      else:
            question_list += question + " (选择题)\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 + " (简答题)\n"
      else:
            question_list += question + " (选择题)\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
      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 小助理,如未能正确解答您的问题,请继续追问。

疾风之杰西 发表于 2024-4-11 13:46:42

厉害{:5_106:}
页: [1]
查看完整版本: 写一个基于easygui的错题收集并且能随机出题的程序