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 = 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)

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.mfbz.cn/a/281816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解FreeRTOS:FreeRTOSConfig.h系统配置文件(拓展篇—1)

目录 1、“INCLUDE_”宏 2、“config”宏 实际使用FreeRTOS的时候,时常需要根据自己需求来配置 FreeRTOS,不同架构的MCU,配置也不同。 FreeRTOS的系统配置文件为FreeRTOSConfig.h,在配置文件中可以完成FreeRTOS的裁剪和配置,这是非常重要的一个文件,本篇博文就来讲解这…

文件批量整理,文件归类整理,文件批量归类

我们每天都要面对无数的文件&#xff0c;从工作报告、个人照片到电影和音乐。如何有效地管理和归类这些文件&#xff0c;成为了我们日常生活和工作中所要处理的。今天&#xff0c;小编就给大家介绍一款简单易用的工具——文件批量改名高手&#xff0c;助你轻松实现文件批量归类…

45、激活函数 - 为什么非线性这么重要

这一节开始讲一讲神经网络中的激活函数,在讲激活函数之前,先讲一下非线性。 看一个基础知识:线性函数的叠加,我们初中学过的知识点。 假设有一个线性函数,y = kx + b, 这个函数画出来是下面的样子,这里显示 y 和 x 是线性关系。 而如果这个时候又有一个线性关系 z = hy…

基于JAVA的独居老人物资配送系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统&#xff0c;包含了社区档案、…

C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合

上一篇&#xff1a; C#&#xff0c;入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果https://blog.csdn.net/beijinghorn/article/details/123478581 C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net…

探索 Pinia:简化 Vue 状态管理的新选择(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

计算器写作文

一起来交流编程吧【CSDN app】&#xff1a; http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kx9pL9ccIHGKNLE0CWviAqQ_q6HzxomLW&authKeyVslKe623ptw8VRepda%2Bh0Ttr8Ruz8v%2FBW5HpVzyTWU7ECwpHIZpULMj6qIHYZBVb&noverify0&gro 计算器写作文 题目描述 众所周知&a…

VitulBox中Ubuntu虚拟机安装JAVA环境——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项

前言 在进行之后操作是请下载好JDK&#xff0c;之后的内容是以Ubuntu虚拟机中安装java环境续写。 提示&#xff1a;以下操作是在虚拟机hadoop用户下操作的&#xff0c;并为安装java环境作准备 一、更新APT 为了确保Hadoop安装过程顺利进行&#xff0c;建议用hadoop用户登录…

CATIACATIAComposer各版本安装指南

CATIA&CATIAComposer https://pan.baidu.com/s/16Kvozc5xWZjxo6HRr9wJmA?pwd0531 一、DS CATIA Composer 1.鼠标右击【CATIA Composer2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 CATIA Composer2024(64bit)】。 2.打…

Hive实战:统计总分与平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据文件1、在虚拟机上创建文本文件2、将文本文件上传到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建Hive表&#xff0c;加载HDFS数据文件…

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…

【Redis-03】Redis数据结构与对象原理 -下篇

承接上篇【Redis-02】Redis数据结构与对象原理 -上篇 8. type-字符串string 8.1 字符串的三种encoding编码&#xff08;int embstr raw&#xff09; 如果保存的是整型&#xff0c;并且可以用long类型标识&#xff08;-9223372036854775808到9223372036854775807&#xff09…

文件分片上传(模拟网盘效果)

文件分片上传&#xff08;模拟网盘效果&#xff09; 文章说明简单模拟拖拽文件夹和选择文件的进度条效果效果展示结合后端实现文件上传效果展示加上分片的效果效果展示加上MD5的校验&#xff0c;实现秒传和分片的效果后续开发说明源码下载 文章说明 文章主要为了学习文件上传&a…

单片机原理及应用:开关控制LED多种点亮模式

从这篇文章开始&#xff0c;我们不再只研究单一的外设工作&#xff0c;而是将LED、数码管、开关、按键搭配在一起研究&#xff0c;这篇文章主要介绍LED和开关能擦出怎样的火花&#xff0c;同时也介绍一些函数封装的知识。 由于开关有闭合与打开两种状态&#xff0c;LED有左移流…

el-table表格自动循环向上滚动鼠标放上去停止,移开恢复

排序的图标是两个图片&#xff0c;点击向后端发请求带不同的参数 <template><div style"height: 100%" class"table-content"><div :style"{ position: absolute, z-index: 9999, right: 3%, top: 0 }":class"tagBtn bg${c…

MySQL例行检查

MySQL例行检查 1.实例例行检查1.1线程1.2索引1.3临时表1.4连接数1.5BINLOG1.6锁1.7WAIT事件1.8MySQL状态 2.事务与锁例行检查2.1查看索引的cardinality2.2查看是否存在事务阻塞现象2.3查看事务执行时长以及执行的所有SQL2.4事务与锁 3.库表例行检查3.1查看缺失主键的表3.2冗余索…

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码&#xff1a; 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0&#xff0c;另存为123.zip&#xff1a; 即可绕过加密&#xff1a; 得到一个zip一个docx&#xff0c;但zip需要密码&#xff1a; 因此看docx有无敏感信息&#x…

文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题

一、用go语言&#xff0c;写出 RIGHT-ROTATE 的伪代码。 文心一言&#xff1a; 在计算机科学中&#xff0c;右旋转&#xff08;RIGHT-ROTATE&#xff09;是一种常见的操作&#xff0c;通常用于数组或链表。以下是一个使用Go语言实现右旋转的伪代码&#xff1a; func rightRo…

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可&#xff0c;Maven会自动获取对应的jar包&#xff0c;但是oracle驱动依赖添加后会显示红色&#xff0c;代表找不到依赖项&#xff0c;是因为Oracle授权问题&#xff0c;Maven3不提供Oracle JDBC driver&#xff0c;为了在Maven项目中…

基于JAVA的农家乐订餐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…
最新文章