通过以下代码可以测试20以内加减法的最多题目数量。
一、程序运行测试后的“XX以内加减法”的最大不重复题目数量。
二、“XX以内加减法”的最大不重复题目数量.py
# -*- coding: utf-8 -*-
"""
@author: 马清新
@file: 马清新 20以内加减法(最大不重复算式值).py
@time: 2022/1/20 20:15
# 特别说明
1.根据预测试:10以内不重复132题,20以内不重复的462,50以内2652 100以内10302
样式1:如果20以内的题目数量输入了1000题,但它最终只会出现380题(共生成不重复380,最大不重复380)
样式2:如果50以内输入1000题,它最终会出现1000题(共生成不重复1000),但实际最多可以出现的1824题(最大不重复2450)
2.本次的最大值和题数可以无限大,但是考虑到电脑算力和生成时长,建议不要超过1000以内(999000题).
3.X以内 两个数加减法(X+Y= X-Y= )的最大不重复题目数量:
X以内 加法题 减法题 加减法乱序题 排除答案0
5 21 21 42 36
10 66 66 132 121
20 231 231 462 441
50 1326 1326 2652 2601
100 5151 5151 10302 10201
"""
import random
sumMax = int(input('请输入算式最大和:'))
regNum = int(input('请输入需要生成算式的数量:'))
# 生成1个列表,列表从0开始,到算术最大和结束,因为range函数包左不包右,因此如果要包括算式最大和,必须+1
# range函数从0开始,这样列表元素和列表索引一致,减轻算法的难度
numList = [x for x in range(0,sumMax+1)]
# resultList列表用于保存最后最大数量的合规算术式
resultList = []
for x in numList[0:]:
# 从列表第x个元素开始到列表最后一个元素进行循环遍历
for y in numList[x:]:
# 加和减 列表元素开始时存在两个元素相等的情况,由于加法交换律会产生重复,所以单独进行区分
if (x == y) and (x + y <= sumMax)and (y != 0): # X或Y两者一个或者两个都不能0。没有0+0,0-0
tempStr = str(x) + ' + ' + str(y) + ' = '
resultList.append((tempStr, (x+y)))
tempStr = str(x) + ' - ' + str(y) + ' = '
resultList.append((tempStr, (x-y)))
#加和减 查找 x + y < 算式最大和的加减法,此处考虑加法交换律,减法中去除了相减为0的情况,因为此处y>x
elif x + y <= sumMax and (y != 0):# 第一位或者第二位都不为0,也就是没有
tempStr = str(x) + ' + ' + str(y) + ' = '
resultList.append((tempStr, (x+y)))
tempStr = str(y) + ' + ' + str(x) + ' = '
resultList.append((tempStr, (x+y)))
tempStr = str(y) + ' - ' + str(x) + ' = '
resultList.append((tempStr, (y-x)))
# 考虑循环后期,x+y会打印算式要求的最大和,但是减法符合算式要求,处于严谨的考虑没有使用else
# 减法 此处可以考虑直接使用else
elif y - x >= 0 and y != 0: # y可能等于x ,答案为0,但没有0-0
tempStr = str(y) + ' - ' + str(x) + ' = '
resultList.append((tempStr, (y-x)))
elif y - x == 0 :#等数 相加 相减等于0,不需要的话,此段注释掉
tempStr = str(y) + ' + ' + str(x) + ' = '#减法类型3 y-x=0
resultList.append((tempStr, (y+x)))# 带答案的题目,如0+0=0,
tempStr = str(y) + ' - ' + str(x) + ' = '#减法类型3 y-x=0
resultList.append((tempStr, (y-x)))# 带答案的题目,如0-0=0,
# 建立最终符合最终要求的算式列表9
selectList = []
if regNum > len(resultList):#输入题数大于实际需求,就用shuffle洗牌,
print(f'您的需求大于最大算式生成数量!最大生成算式数量为{len(resultList)}')
i = len(resultList)
for _ in resultList:
selectList.append(_)
random.shuffle(selectList) #shuffle 洗牌算法,把列表所有元素打乱,随机排列
for _ in selectList:
# 可选打印带答案的和不带答案啊
print(_[0])# 不带答案
# print(f'{_[0]}{_[1]}')# 带答案
else:#输入题数小于实际需求,代码自动随机抽取,不会排序,
i = regNum
selectList = random.sample(resultList,i)
for _ in selectList:
# 可选打印带答案的和不带答案啊
print(_[0])# 不带答案
# print(f'{_[0]}{_[1]}')# 带答案
# 验证生成算式数量
print(f'共生成不重复的算式{len(selectList)}')
print(f'最大不重复的算式{len(resultList)}')
# 保存为TXT文件(在默认打开文件夹下,手动拷贝到Word里1
#str_title = '2.txt' # 保存文件名TXT文件
#with open('2.txt','w') as f:# 打开TXT文件
# for a in selectList:# #循环查找答案的内容8
# f.write(str(a[0])+'\n')# 写入答案内容并回车 a[0]没有答案
# #f.write(str(a[1])+'\n')#写入答案内容并回车 a[1]有答案
#f.close()# #关闭TXT
#2月4日修改TXT文件名
str_title = '%d以内的加减法题(共%d题).txt' % (sumMax, len(resultList)) # 保存带数字提示的题目
with open(str_title,'w') as f:# 打开TXT文件
for a in selectList:# #循环查找答案的内容
f.write(str(a[0])+'\n')# 不带答案
# f.write(str(a[1])+'\n')#只有答案
# f.write(str(a[0])+str(a[1])+'\n')#有题目有答案 TXT里面是题目+答案,终端显示题目 无答案,因为上面选了(0)
f.close()# #关闭TXT
使用方法
验证:把‘’5以内的加减法题(共42题).TXT‘’里面的列示题放入Excel,验证数量。
图1:乱序排列42题 图2 从小到大42题 图3 加法题21道 减法题21道
小结:本代码可以生成不重复的x 以内2个数字加减法混合题。数字越小,可生成题目越少,数字越大,可生成题目越多。(如果5以内题目有42题,输入10题,生成10题,输入43题,生成42题。)
感谢作者马清新老师的的反复设计,让阿夏对5以内、10以内、20以内不重复的加减法的题目数量有清晰概念,确保下次为大班孩子们打印的2个数字加减法题目里能够没有重复题,实现充分练习的目标。❀❀❀❀❀❀
今天的文章小学20以内加减法题库_小学20以内加减法题库[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/87576.html