效果展示
程序执行后,打开浏览器,展示一些100以内的加减法混合运算的数学题并输入答案后判断对错,这样倒是省了买教材的钱了。
在题目下方的框中,输入答案,然后点击提交后, 会输出结果
pywebio库介绍
安装
pip install pywebio
介绍
官网是https://www.pyweb.io,官方介绍文档https://pywebio.readthedocs.io/zh-cn/latest/,里面有很多页面输入框/勾选框/复选框/下拉框/按钮/滑块输入/文件上传等操作介绍。
PyWebIO提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的Web应用或基于浏览器的GUI应用。 使用PyWebIO,开发者能像编写终端脚本一样(基于input和print进行交互)来编写应用,无需具备HTML和JS的相关知识; PyWebIO还可以方便地整合进现有的Web服务。非常适合快速构建对UI要求不高的应用。
本文主要用到了三个函数pywebio.input.input_group,pywebio.input.input,pywebio.output.put_text
实现过程
1) 导入包
from pywebio.input import *
from pywebio.output import *
2) 第一个函数mathproblem根据传入的数量随机生成数学题(100以内的加减运算)
def mathproblem(count):"""输入题目的数量,生成数学题的字典并返回; 字典的key是题目,value是答案:param count::return:"""math_problem = {}num = 1while num <= count:num1 = random.randint(1,99)num2 = random.randint(1,99)num3 = random.randint(1,99)if num1 + num2 - num3 < 100 and num1 + num2 - num3 > 0 and num1 + num2 < 100:num += 1result = num1 + num2 - num3key_name = f'{num1} + {num2} - {num3}'math_problem[key_name] = resultreturn math_problem
3) 第二个函数start_do_math,将生成的数学题展示到web页面上,提交答案后记录输入的答案。
def start_do_math(count):#生成数学题字典 key是题目,value是答案math_problem_dict = mathproblem(count)#生成pywebio的input函数用到的输入数学题信息列表: 展示的是题目信息inputs_str = [f'{key} = ( )' for key in math_problem_dict.keys()]#生成对应的答案列表 用于跟答题时写的答案做对比origin_answer_result = [math_problem_dict[key] for key in math_problem_dict.keys()]#调用pywebio的input_group函数,弹出web页面,开始生成题目results = input_group('口算',inputs=[input(f'第{num+1}题 {inputs_str[num]}',name=f't{num+1}') for num in range(len(math_problem_dict))])#提取提交的答案new_answer_result = [results[f't{num+1}'] for num in range(len(math_problem_dict))]return inputs_str,origin_answer_result,new_answer_result
input_group为输入组,可以使用很多的input函数作为输入。
info = input_group("User info",[input('Input your name', name='name'),input('Input your age', name='age', type=NUMBER)
])
print(info['name'], info['age'])
输入组中需要在每一项输入函数中提供 name
参数来用于在结果中标识不同输入项。
所以当想要单独调用一个输入函数input时,请不要设置 name
参数;而在 input_group中调用输入函数时,务必提供 name
参数。
4) 第三个函数对比真实答案和答题的答案,并将结果输出到web页面
def analyse_result(inputs_str,origin_answer_result,new_answer_result):""":param inputs_str: 包含题目信息的列表:param origin_answer_result: 真实答案:param new_answer_result: 答题的答案: return:"""cou = 0for num in range(len(inputs_str)):#判断输入为空或者不为数字时,认为题目做错了if not new_answer_result[num] or not str(new_answer_result[num]).isdigit():put_text(f'这个题 {inputs_str[num]} 做错了, 提交的答案是{new_answer_result[num]} ,正确答案是{origin_answer_result[num]}')else:#当真实答案和做出的答案一致时,数字加1if int(origin_answer_result[num]) == int(new_answer_result[num]):cou += 1else:put_text(f'这个题 {inputs_str[num]} 做错了, 提交的答案是{new_answer_result[num]} ,正确答案是{origin_answer_result[num]}')#汇总最后的结果输出到web页面上put_text(f'--总共{len(inputs_str)},做对了{cou}题,做错了{len(inputs_str) - cou}题')
5) 执行程序
count = 10 #题目个数inputs_str,origin_answer_result,new_answer_result = start_do_math(count)analyse_result(inputs_str,origin_answer_result,new_answer_result)
pywebio的其他输入函数举例
单选框
radio = radio(f'请选择',options=['开','关'])
上传文件
file = file_upload()
文本输入框
input_str = input(f'请输入:')
多行文本输入
mul_text = textarea(f'请输入:')
下拉框
select_result = select(f'请选择',options=['a','b','c','d'])
多选框
checkbox_result = checkbox(f'请选择',options=['a','b','c','d'])
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。