用python生成小学生一年级算术模板

2023-10-08 02:50

本文主要是介绍用python生成小学生一年级算术模板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

孩子学习口算压力山大,现在的要求太高了需要5分钟内答满150道题,完成这个目标需要多多的练习。
加法要求和不能大于21,考虑到20以上的进位问题,孩子目前还是不熟练没有添加进去。减法差不能是负数,被减数是个位数的。除法先取乘法的商作为被除数,这样就可以被整除了。还加入了左右括号的填空,灵活转换被加数和被减数的算法。由于输出的加减乘除符号字符会因为字体不同而有差异,在pycharm的控制台输出是整齐排列的,而复制到word就会各种不对齐,对比使用Courier New字体排列的最完美了。所以复制到word要修改一下字体,达到强迫症的对齐要求。

# coding=utf-8
import randomresult = []
operList = ["+", "-"]  # 如果需要乘法和除法则替换为["+", "-", "*", "/"]
unique = []  # 用于统计去重print("\t\t 姓名____________   用时___________   正确率_____________  \n ")
def generate_num():a = random.randint(1, 20)b = random.randint(0, 20)  # 100以内加法 可以 b = random.randint(0, 100-a)oper = random.choice(operList)if oper == "-":b = random.randint(0, 10)if a < b:a, b = b, aans = eval('%d%s%d' % (a, oper, b))oper = "-"elif oper == "+":if a > 10 and b > 10:a -= 10b -= 10elif a + b > 20:if a > b:a -= 10else:b -= 10ans = eval(str(a) + oper + str(b))elif oper == "*":a = random.randint(1, 9)b = random.randint(0, 9)ans = a * boper = "×"elif oper == "/":a = random.randint(0, 9)b = random.randint(1, 9)  # 被除数不能为0ans = a * boper = "÷"if str(a) + oper + str(b) in unique:  #用于去重,不能保证完全没有重复a, b, oper, ans = generate_num()unique.append(str(a) + str(oper) + str(b))return a, b, oper, ansfor i in range(25):  # 常规题目要几行for g in range(5):  # 每行要几个算式a, b, oper, ans = generate_num()if oper == "÷":print(str(ans).ljust(2, ' ') + str(oper) + str(b).rjust(2, ' ') + " =   ", end="     ")  # 对齐打印,不换行result.append(str(a))else:print(str(a).ljust(2, ' ') + str(oper) + str(b).rjust(2, ' ') + " =   ", end="     ")result.append(str(ans))# 也可以将完整题目和答案加入 result.append(str(a) + str(oper) + str(b) + "=" + str(eval('%d%s%d' % (a, oper, b))))print()  # 输出五个算式换行for i in range(6):  # 带括号题目要几行for g in range(5):  # 每行要几个算式a, b, oper, ans = generate_num()if oper == "÷":right_blank = str(ans).ljust(2, ' ') + str(oper) + '(   )' + "=" + str(a).ljust(3, ' ')left_blank = '(   )' + str(oper) + str(b).rjust(2, ' ') + "=" + str(a).ljust(3, ' ')else:right_blank = str(a).ljust(2, ' ') + str(oper) + '(   )' + "=" + str(ans).ljust(3, ' ')left_blank = '(   )' + str(oper) + str(b).rjust(2, ' ') + "=" + str(ans).ljust(3, ' ')blank = random.choice([right_blank, left_blank])  # 括号在左边还是右边# 根据左边右边的括号不同整理答案if oper == "÷":if blank == left_blank:result.append(str(ans))else:if blank == left_blank:result.append(str(a))if blank == right_blank:result.append(str(b))print(blank, end="  ")print()# 打印答案
print("\n" + "*" * 28 + "以下为答案" + "*" * 28)
for i, v in enumerate(result):if i % 5 == 0:print()print(v.ljust(2, " "), end="             ")

实验一下输出结果为包含加减乘除:

7 +10 =     5 - 3 =     27÷ 9 =     8 + 6 =     0 ÷ 4 =     
0 ÷ 9 =     2 + 3 =     3 + 4 =     2 × 4 =     40÷ 8 =     
5 × 4 =     6 × 9 =     1 +16 =     8 + 3 =     10+ 7 =     
8 + 4 =     9 × 8 =     7 ÷ 7 =     4 + 2 =     40÷ 5 =     
13+ 5 =     4 × 1 =     3 × 1 =     18- 0 =     10+ 2 =     
3 +14 =     1 + 7 =     56÷ 8 =     9 × 1 =     0 ÷ 9 =     
13- 1 =     16-10 =     8 × 6 =     0 ÷ 1 =     10+ 5 =     
10+ 4 =     1 × 2 =     3 + 9 =     3 × 9 =     20÷ 4 =     
7 - 7 =     6 - 1 =     3 × 9 =     18÷ 3 =     30÷ 5 =     
36÷ 6 =     7 × 2 =     21÷ 3 =     7 ÷ 1 =     15-10 =     
3 × 7 =     9 ÷ 3 =     12- 4 =     7 × 8 =     56÷ 7 =     
9 + 1 =     5 ÷ 1 =     5 - 0 =     0 × 3 =     9 +10 =     
9 - 5 =     3 +17 =     3 × 0 =     4 × 4 =     14÷ 2 =     
18-10 =     6 ÷ 6 =     8 - 7 =     18÷ 3 =     45÷ 5 =     
0 ÷ 3 =     6 ÷ 1 =     18÷ 3 =     9 - 0 =     1 × 8 =     
45÷ 9 =     8 × 5 =     4 × 5 =     7 × 5 =     8 + 9 =     
7 × 8 =     1 × 4 =     9 - 6 =     10+ 5 =     7 - 4 =     
5 +11 =     1 +13 =     10- 3 =     3 ÷ 3 =     8 - 2 =     
14- 6 =     7 - 1 =     16- 2 =     5 + 9 =     7 + 4 =     
5 × 0 =     2 - 0 =     9 - 0 =     6 ÷ 2 =     11- 8 =     
16- 5 =     3 +10 =     9 × 5 =     42÷ 6 =     3 × 9 =     
3 +17 =     20- 9 =     3 × 3 =     19- 9 =     10+ 4 =     
9 + 3 =     8 × 4 =     20÷ 4 =     2 + 5 =     8 +11 =     
10- 7 =     1 × 0 =     2 × 2 =     18÷ 9 =     5 ÷ 5 =     
42÷ 6 =     8 × 9 =     20- 8 =     2 + 5 =     4 × 4 =     
6 ÷ 1 =     40÷ 5 =     8 ÷ 1 =     5 +10 =     6 × 9 =     
10+ 1 =     6 × 2 =     5 - 1 =     9 × 4 =     10- 7 =     
1 +17 =     5 × 4 =     12÷ 3 =     0 × 4 =     20÷ 5 =     
42÷ 6 =     6 × 9 =     3 + 4 =     7 × 1 =     0 ÷ 2 =     
3 +15 =     4 × 0 =     5 × 7 =     40÷ 5 =     5 - 2 =     
( )+ 4=15   ( )- 1=1    10+( )=14   5 -( )=3    ( )÷ 2=4    
( )÷ 5=7    ( )+ 9=15   2 ×( )=16   ( )÷ 6=6    ( )- 5=1    
( )- 5=7    42÷( )=6    0 -( )=0    4 +( )=5    ( )× 5=30   
( )× 1=3    17+( )=18   ( )× 1=3    ( )÷ 6=6    ( )- 6=12   
27÷( )=9    ( )- 0=3    0 +( )=18   ( )÷ 6=3    8 +( )=11   
18-( )=9    5 ×( )=15   17-( )=10   5 ×( )=35   ( )+ 7=17   17           2            3            14           0            
0            5            7            8            5            
20           54           17           11           17           
12           72           1            6            8            
18           4            3            18           12           
17           8            7            9            0            
12           6            48           0            15           
14           2            12           27           5            
0            5            27           6            6            
6            14           7            7            5            
21           3            8            56           8            
10           5            5            0            19           
4            20           0            16           7            
8            1            1            6            9            
0            6            6            9            8            
5            40           20           35           17           
56           4            3            15           3            
16           14           7            1            6            
8            6            14           14           11           
0            2            9            3            3            
11           13           45           7            27           
20           11           9            10           14           
12           32           5            7            19           
3            0            4            2            1            
7            72           12           7            16           
6            8            8            15           54           
11           12           4            36           3            
18           20           4            0            4            
7            54           7            7            0            
18           0            35           8            3            
11           2            4            2            8            
35           6            8            36           6            
12           7            0            1            6            
3            1            3            36           18           
3            3            18           18           3            
9            3            7            7            10 

![在这里插入图片描述](https://img-blog.csdnimg.cn/f0e1c14be9034f58a91bc9c1797f9667.jpeg#pic_center

口算大概是需要一步步的练习,先从没有进位的加减,接着是只涉及十位的加减,然后是个位数的有进退位的加减,最后是混合的加减。一个个阶梯拾级而上,练习进步。出现的被加减数为0的可能性比较大,去除为0的可能。随机数random.randint(a, b),a不可以大于b,否则报错ValueError: empty range for randrange() (1,1, 0),因此要加入分支条件,当a=1时,剔除b=0的情形。

int(a/10) 取出被加数的十位数, a%10 求余取出被加数的个位数

def generate_num():a = random.randint(0, 99)oper = random.choice(operList)if oper == "-":# t1是个位的减法,不涉及退位,被减数是两位数同时个位是0,则进行十位的减法if a == 0:t1 = 0elif a % 10 == 0:t1 = random.randint(1, int(a / 10)) * 10else:t1 = random.randint(1, a % 10)# t2是十位的减法,个位为零if a < 10:t2 = random.randint(1, 10)else:t2 = random.randint(1, int(a / 10)) * 10# t3是个位的减法,都是有退位的,被减数个位相同,再随机一次t3 = random.randint(a % 10,9)if t3 == a % 10:t3 = random.randint(a % 10 +1, 10)b = random.choice([ t1,t2,t3])  # b = random.randint(1, 10)if a < b:a, b = b, aans = eval('%d%s%d' % (a, oper, b))oper = "-"elif oper == "+":# p1是个位的加法,不涉及进位p1 =random.randint(1, 10 - (a % 10))# p2是十位的加法if a>=90:p2 = random.randint(1, 10 - (a % 10))else:p2 =random.randint(1, 9 - int(a / 10)) * 10# p3是个位的加法,都是有进位if a >= 90:p3 = random.randint(1, 100 -a)elif a %10 ==0: #把求余为0的可能去除掉,方便下面randint下标不越界p3 =random.randint(1, 9 - int(a / 10)) * 10else:p3 = random.randint( 10-a % 10, 9)b = random.choice( [p1,p2,p3])  ans = eval(str(a) + oper + str(b))if str(a) + oper + str(b) in unique:a, b, oper, ans = generate_num()unique.append(str(a) + str(oper) + str(b))return a, b, oper, ans

输出结果如下:可以将 b = random.choice([ t1,t2,t3]) 只剩下一个,从t1到t3,逐个打印。

 姓名____________   用时___________   正确率_____________  92-80 =        25-10 =        4 - 1 =        88+ 3 =        65+ 1 =        
92+ 8 =        75+ 8 =        20-10 =        81+10 =        46+ 5 =        
85-30 =        24+ 8 =        78-70 =        12+ 8 =        65+ 2 =        
70+20 =        85- 8 =        53+10 =        99- 2 =        72+ 9 =        
38- 9 =        95+ 1 =        51+20 =        52+ 3 =        43+ 2 =        
29- 3 =        62-20 =        44- 2 =        70+ 9 =        36+ 5 =        
35-10 =        24-20 =        80- 2 =        72+ 1 =        73+10 =        
95-80 =        89- 5 =        6 +40 =        53- 3 =        22+ 9 =        
62+ 6 =        25- 4 =        1 + 9 =        23- 3 =        17+60 =        
83+ 9 =        14+ 4 =        78+ 5 =        48- 6 =        61+ 1 =        
72+10 =        72-10 =        57+ 3 =        10- 9 =        80- 4 =        
99-10 =        41- 4 =        42- 1 =        81+ 9 =        25+ 3 =        
53-20 =        91+ 9 =        78-10 =        67- 8 =        86- 9 =        
54-40 =        88+ 5 =        13- 7 =        39+ 2 =        54+ 8 =        
59-40 =        62+10 =        32- 2 =        80- 7 =        2 - 1 =        
30+20 =        18+ 8 =        88+ 1 =        76+ 4 =        87+ 5 =        
60-10 =        31+30 =        83- 4 =        89+ 1 =        95- 2 =        
97-70 =        95- 7 =        50-10 =        4 - 4 =        2 +60 =        
34- 3 =        47+ 7 =        1 - 1 =        92+ 4 =        43- 9 =        
56- 7 =        15+ 6 =        32+ 8 =        91+ 3 =        12-10 =        
20-20 =        28- 9 =        41- 1 =        74-40 =        71-20 =        
66+30 =        32-20 =        9 - 2 =        30+ 3 =        65+20 =        
28- 8 =        55-20 =        23+ 1 =        93-30 =        65-50 =        
69+ 3 =        93- 3 =        80-50 =        29+ 8 =        46- 5 =        
45+ 6 =        23-10 =        1 + 3 =        90+ 4 =        75+20 =        
(   )+ 2=59   36+(   )=40   (   )+ 1=74   11+(   )=13   (   )+ 5=20   
(   )+ 9=96   21+(   )=61   63+(   )=70   (   )- 7=24   (   )- 2=65   
(   )+70=75   (   )+10=80   (   )+ 9=70   19+(   )=29   (   )+ 1=95   
81-(   )=80   (   )+30=85   (   )+70=85   90-(   )=80   (   )- 2=18   
85-(   )=65   (   )+30=67   41-(   )=31   (   )-70=15   (   )+ 3=40   
44+(   )=49   95-(   )=55   (   )+ 5=31   (   )+ 2=100  77-(   )=69   

如下一些参考的文章:
https://www.cnblogs.com/Lincoln-Wong/p/15348545.html
https://blog.csdn.net/AbyssssssssssS/article/details/101272303
https://blog.csdn.net/m0_63445876/article/details/122450278
https://blog.csdn.net/bosivip/article/details/127197075

这篇关于用python生成小学生一年级算术模板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/162194

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.