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

news2025/1/24 2:17:52

效果展示

程序执行后,打开浏览器,展示一些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.coloradmin.cn/o/1347194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Resnet BatchNormalization 迁移学习

时间&#xff1a;2015 网络中的亮点&#xff1a; 超深的网络结构&#xff08;突破1000层&#xff09;提出residual模块使用Batch Normalization加速训练&#xff08;丢弃dropout&#xff09; 层数越深效果越好&#xff1f; 是什么样的原因导致更深的网络导致的训练效果更差呢…

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…

【实用工具】vim常用命令

快速移动(上下左右箭头可替代) 左移 h 右移 l 下移 j 上移 K在本行操作 0 移动到本行行首 ^ 移动到本行的第一个不是 blank 字符 $ 移动到本行行尾 w 光标移动到下一个单词的开头 e 光标移动到下一个单词的结尾跨行移动光标 nG 光标定位到第n行的行首 gg 光标定位到第一行的…

SPI机制原理+使用

一、概述 SPI全称&#xff08;Service Provider Interface&#xff09;&#xff0c;是JDK内置的一种服务提供发现机制&#xff1b;SPI机制提供了组件发现和注册方式&#xff0c;可以为应用程序提供灵活的插件机制&#xff0c; 主要原理&#xff1a;接口 反射 配置文件。 二、…

Visual Studio 2015 中 SDL2 开发环境的搭建

Visual Studio 2015 中 SDL2 开发环境的搭建 Visual Studio 2015 中 SDL2 开发环境的搭建新建控制台工程拷贝并配置 SDL2 开发文件拷贝 SDL2 开发文件配置 SDL2 开发文件 测试SDL2 开发文件的下载链接 Visual Studio 2015 中 SDL2 开发环境的搭建 新建控制台工程 新建 Win32 …

学习使用echats实现双刻度echarts双Y轴,左右Y轴数据的方法

学习使用echats实现双刻度echarts双Y轴&#xff0c;左右Y轴数据的方法 代码效果图 代码 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cline-stack&langjs --> <!DOCTYPE html> <html lang"en" style"height: 10…

工业机器人与计算机技术:驱动现代工业变革

工业机器人与计算机技术&#xff1a;驱动现代工业变革 随着科技的飞速发展&#xff0c;工业机器人与计算机技术已经成为现代工业制造的核心驱动力。这两者之间的联系日益紧密&#xff0c;共同推动着工业生产的自动化、智能化和高效化。 一、工业机器人&#xff1a;从机械手臂…

以太坊代币标准解读及相关Dapp的搭建

文章目录 什么是以太坊代币标准1、什么是以太坊2、以太坊代币标准 同质化代币 Dapp 搭建1、MetaMask 的安装2、Ganache 的安装3、实现 ERC-20 代币协议4、前端页面的编写5、部署流程及操作演示 什么是以太坊代币标准 1、什么是以太坊 以太坊&#xff08;Ethereum&#xff09;是…

Linux环境grep搜索方法记录

1 grep grep 命令&#xff0c;用来搜索字符串所在位置&#xff0c;可以具体到不同文件&#xff0c;不同行&#xff1b; 在Linux 下&#xff0c;查看命令释义如下 zhaocubuntu2004:~$ grep --help Usage: grep [OPTION]... PATTERNS [FILE]... Search for PATTERNS in each FI…

安装Hadoop:Hadoop的单机模式、伪分布式模式——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项

前言 Hadoop包括三种安装模式&#xff1a; 单机模式&#xff1a;只在一台机器上运行&#xff0c;存储是采用本地文件系统&#xff0c;没有采用分布式文件系统HDFS&#xff1b;伪分布式模式&#xff1a;存储采用分布式文件系统HDFS&#xff0c;但是&#xff0c;HDFS的名称节点…

【VRTK】【VR开发】【Unity】18-VRTK与Unity UI控制的融合使用

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 VRTK和Unity自身的UI控制包可以配合使用发挥效果。本篇就讨论这方面的实战内容。 之前可以互动的立体UI并不是传统的2D UI对象,在实际使用中…

Mac 安装 Minikube 及解决 “[ERROR ImagePull]: failed to pull image“ 问题

文章目录 1. 引言2. Mac 安装 Docker3. Mac 安装 Minikube4. 拉起集群4.1 启动4.2 验证 5. 参考 1. 引言 Minikube 是一种轻量化的 Kubernetes 集群&#xff0c;旨在帮助开发者和学习者更好地学习和体验 Kubernetes 的功能。它可以在个人计算机的虚拟化环境中快速构建和启动 Ku…

网易有道词典不能截屏翻译,不能联网解决办法

对应版本&#xff1a; win10系统&#xff0c;联想拯救者笔记本&#xff0c;网易有道词典8.10.2.0。 网易有道词典免费下载链接&#xff1a;https://download.csdn.net/download/qq_42755734/88684985 修改代理&#xff1a; youdao.com 0 取消勾选---不更新 效果&#xff1a…

移动应用开发:揭秘内侧APP封装台的高效

在数字化浪席卷下&#xff0c;移应用已经成连接企业与用户纽带。为了抢占市场先机&#xff0c;快速发布高质量的移动应用成为业竞争的关键。侧APP封装平因此而诞生&#xff0c;成为了应开发者的得助手。以下是内侧APP封装台的全面解读&#xff0c;助在应用开发海洋中乘风破浪。…

告别HTTP,拥抱HTTPS!免费SSL证书领取指南

为什么选择HTTPS&#xff1f; HTTP和HTTPS之间的主要区别在于安全性。HTTP是一种不安全的协议&#xff0c;数据在传输过程中是明文的&#xff0c;容易受到中间人攻击。而HTTPS通过SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&…

python期刊稿件在线投稿系统q2ud0

本系统的用户可分为管理员、投稿者、审稿人和编辑四个用户角色组成。管理员可以管理系统内所有功能&#xff0c;主要有个人中心、投稿者管理、审稿人管理、编辑管理、个人稿件管理、审核稿件管理、稿件信息管理、类型管理等功能&#xff1b;编辑登录系统主要有个人中心、审核稿…

2023-12-22 LeetCode每日一题(得到山形数组的最少删除次数)

2023-12-22每日一题 一、题目编号 1671. 得到山形数组的最少删除次数二、题目链接 点击跳转到题目位置 三、题目描述 我们定义 arr 是 山形数组 当且仅当它满足&#xff1a; arr.length > 3存在某个下标 i &#xff08;从 0 开始&#xff09; 满足 0 < i < arr.…

阿里云PolarDB数据库优惠价格表11元一天起

阿里云数据库PolarDB租用价格表&#xff0c;云数据库PolarDB MySQL版2核4GB&#xff08;通用&#xff09;、2个节点、60 GB存储空间55元5天&#xff0c;云数据库 PolarDB 分布式版标准版2核16G&#xff08;通用&#xff09;57.6元3天&#xff0c;阿里云百科aliyunbaike.com分享…

UE蓝图 RPG动作游戏(一) day15

角色状态制作 制作角色动画混合空间 创建一个动混合空间 添加动作在混合空间 动画蓝图 创建一个动画蓝图 先使用混合空间进行移动&#xff0c;后续优化后再使用状态机 编写垂直水平速度逻辑初始化&#xff0c;获取到此动画的角色组件 获取Horizontal与Vertical的速度逻辑 …

vue项目表单使用正则过滤ip、手机号

import useFormValidate from /hooks/useFormValidatesetup(props, { emit }) {const { validateName, validateIPAndPort } useFormValidate()const state reactive({workFaceInfo: props.info?.id ? props.info : {},sysTypeData: props.sysType,formRules: {name: [{req…