程序执行后,打开浏览器,展示一些100以内的加减法混合运算的数学题并输入答案后判断对错,这样倒是省了买教材的钱了。
在题目下方的框中,输入答案,然后点击提交后,?会输出结果
安装
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 =?1
???while?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 +=?1
???????????result = num1 + num2 - num3
???????????key_name =?f'{num1}?+?{num2}?-?{num3}'
???????????math_problem[key_name] = result
???return?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 =?0
???for?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:
#当真实答案和做出的答案一致时,数字加1
???????????if?int(origin_answer_result[num]) ==?int(new_answer_result[num]):
???????????????cou +=?1
???????????else:
?????????????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)
单选框
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'])
共勉:?东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。