写一个基于easygui的错题收集并且能随机出题的程序
写一个基于easygui的错题收集并且能随机出题的程序 好的,下面是一个基于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 小助理,如未能正确解答您的问题,请继续追问。 easygui就是一个玩的,没必要在它上面投入一丝丝的精力 FishC 发表于 2024-4-11 10:27
好的,下面是一个基于easygui的错题收集并且能随机出题的程序:
问题输入部分能否更改为直接导入文档的形式? 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-11 10:35
当然可以!下面是修改后的代码,使用文件导入问题和答案:
可以增加上选择题,单选,多选吗? 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-11 10:41
当然可以!下面是修改后的代码,增加选择题功能,包括单选和多选:import easyguiimport randomdef col ...
依旧以添加文档模板的形式,同时导入简答,单选,多选题目 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-11 10:43
好的,下面是修改后的代码,可以导入包含简答题、单选题和多选题的文档模板:import easyguiimport ran ...
增加列出所有题库,可以选择删除一些题目 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 小助理,如未能正确解答您的问题,请继续追问。 厉害{:5_106:}
页:
[1]