python的pywebio库给孩子做加减法数学题

效果展示

程序执行后,打开浏览器,展示一些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'])

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311400.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌Linux内核自动测试平台架构介绍-用自动测试测试难以测试的问题

1 摘要 内核和硬件等低级系统已被证明极难进行有效测试&#xff0c;因此&#xff0c;许多内核测试都是以手动为主方式进行的。现有的大多数测试框架都是为测试与底层平台隔离的高级软件而设计的&#xff0c;而底层平台被假定是稳定可靠的。测试底层平台本身需要一套全新的假设…

⑩①【缓存】Redis持久化 RDB + AOF

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑩①Redis持久化 RDB AOF Redis数据快照 - RD…

70内网安全-域横向内网漫游Socks代理隧道技术(下)

这节课解决代理的问题&#xff0c; 他是内网里面的穿透技术&#xff0c;隧道主要安全设备和流量监控的拦截问题&#xff0c;我们在做渗透的时候需要回显数据或者一些重要的信息&#xff0c;走的协议不一样&#xff0c;tcp/ip有七层&#xff0c; 在不同层里面有不同的协议&…

vue3关于Echarts的简单使用及配置

前言&#xff1a; ECharts&#xff0c;一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&#xff08;IE9/10/11&#xff0c;Chrome&#xff0c;Firefox&#xff0c;Safari等&#xff09;&#xff0c;底…

浅谈冯诺依曼体系和操作系统

&#x1f30e;冯诺依曼体系结构 文章目录 冯诺依曼体系结构 认识冯诺依曼体系结构       硬件分类       各个硬件的简单认识         输入输出设备         中央处理器         存储器 关于内存 对冯诺依曼体系的理解 操作系统 操作系统…

回顾2023,我的编程学习之旅

文章目录 前言我与C语言初识C语言简易扫雷游戏二进制的美妙神奇的指针强大的结构体灵活的动态内存管理总结 我与竞赛我与CSDN结语 前言 6月8号高考结束了&#xff0c;虽然还没有出分&#xff0c;但是也大致规划好自己想学什么专业了&#xff0c;没错就是计算机&#xff0c;出分…

用通俗易懂的方式讲解大模型:ChatGLM3-6B 部署指南

最近智谱 AI 对底层大模型又进行了一次升级&#xff0c;ChatGLM3-6B 正式发布&#xff0c;不仅在性能测试和各种测评的数据上有显著提升&#xff0c;还新增了一些新功能&#xff0c;包括工具调用、代码解释器等&#xff0c;最重要的一点是还是保持 6B 的这种低参数量&#xff0…

计算机网络技术概述 习题答案及解析

1-1 因特网的前身是 1969 年创建的第一个分组交换网&#xff08; D &#xff09;。 A. internet B. Internet C. NSFNET D. ARPANET 【答案】D 1-2 因特网上的数据交换方式是&#xff08; C &#xff09;。 A. 电路交换 B. 报文交换 C. 分组交换 D…

Docker之网络配置

目录 1.网络概念 网络相关的有ip,子网掩码,网关,DNS,端口号 1.1 ip是什么? ip是唯一定位一台网上计算机 Ip地址的分类: IPV4: 4字节32位整数&#xff0c;并分成4段8位的二进制数&#xff0c;每8位之间用圆点隔开&#xff0c;每8位整数可以转换为一个0~255的十进制整数 【例…

基于ssm的4S店预约保养系统开发+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

2022–2023学年2021级计算机科学与技术专业数据库原理 (A)卷

一、单项选择题&#xff08;每小题1.5分&#xff0c;共30分&#xff09; 1、构成E—R模型的三个基本要素是&#xff08; B &#xff09;。 A&#xff0e;实体、属性值、关系 B&#xff0e;实体、属性、联系 C&#xff0e;实体、实体集、联系 D&#xff0e;实体、实体…

Java项目:102SSM汽车租赁系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 汽车租赁系统基于SpringSpringMVCMybatis开发&#xff0c;系统使用shiro框架做权限安全控制&#xff0c;超级管理员登录系统后可根据自己的实际需求配角色…