【教学类-06-02】20230204 20以内加法题、减法题、加减法混合题的不重复数量及题目

21 篇文章 0 订阅

 设计思路

在(教学类-06-01)测20以内加减法的最大数量(优化版 20220122 VS python 20以内加减法)CSDN 中可以算出20以内加减法混合题的最多题数。

为了更方便地区分20以内加法题、20以内减法题、20以内加减法混合题。阿夏将马老师的代码进行微调修改,从而能够更方便地根据需求,批量出不重复的三类题目(纯加法题、纯减法题、加减法混合题)

一、程序运行测试后的“XX以内加减法、减法题、加法题”的最大不重复题目数量。

 一、代码

# -*- coding: utf-8 -*-  
""" 
@author: 马清新
@file: 阿夏修改(最大不重复算式值 20以内加法题、20以内减法题、20以内加减法混合题(最大不重复算式值).py
@time: 2022/2/4 17.18

# 特别说明
1、选择“1.纯加法题。2.纯减法题。3.加减法混合题(请输入序号)”
2、分开计算,纯加法题数量+纯减法题数量=加减法混合题数量。
3、结果分别保存在相应的TXT内
4、可通过注释,选择txt里面题目是否有答案。
5、本题所有答案都是打乱模式 random.shuffle.如果是10以内加法、减法、加减法可以排序 sort 

"""

import random
from re import X

choice=int(input('------------------------------------\n'
                '求X以内的加法题、减法题、加减法题的数量?\n'
                '1.纯加法题。2.纯减法题。3.加减法混合题(请输入序号)\n'
                '------------------------------------\n'))
# 加法题 :20以内不重复的所有加法题 
if choice == 1:
    sumMax = int(input('请输入纯加法算式最大和((≥0)):\n'))# 输入最大值
    regNum = int(input('请输入需要纯加法算式的数量:\n'))# 输入需要的数量
    # 生成1个列表,列表从0开始,到算术最大和结束,因为range函数包左不包右,因此如果要包括算式最大和,必须+1
    # range函数从0开始,这样列表元素和列表索引一致,减轻算法的难度
    numList = [x for x in range(0,sumMax+1)]# 建立整数列表,假设SUMMAX=20 sumMax+1等于21 但实际范围就是1-20,确保列表索引和列表元素一致
    # resultList列表用于保存最后需求数量的合规算术式
    resultList = []# 储存结果的列表
    # 从列表第2个元素开始到列表最后一个元素进行循环遍历
    for x in numList[0:]:# 0等于数字1
        # 从列表第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)))  
            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)))               
            elif y - x == 0 and(y == 0):#此段只有一个答案0+0=0,不需要的话,此段注释掉
                tempStr = str(y) + ' + ' + str(x) + ' = '#减法类型3 y-x=0   
                resultList.append((tempStr, (y+x)))# 带答案的题目,如0+0=0,
    # 建立最终符合最终要求的算式列表
    selectList = []# 选择列表

    if regNum > len(resultList):#如果(输入算式的数量)大于(结果列表的数量)#输入题数大于实际需求,就用shuffle洗牌,
        print(f'您的需求大于最大算式生成数量!最大生成算式数量为{len(resultList)}') # 加了最大不重复算式统计值,如果输入的题数大于储存结果的列表的数量,列表加LEN
        i = len(resultList)# i的数量等于储存结果的列表的数量
        for _ in resultList:# 值在循环储存结果的列表内
            selectList.append(_) #选择列表 需要添加循环储存结果列表的内容
        random.shuffle(selectList) #shuffle 洗牌算法,把列表所有元素打乱,随机排列
        # selectList.sort()#sort 正序排列,只有10以内的能排序,超过10就乱序

        for _ in selectList:   
            # 可选打印带答案的和不带答案啊8
            print(_[0])# 不带答案
            # print(f'{_[0]}{_[1]}')# 带答案
        
    else:#输入题数小于实际需求,代码自动随机抽取,不会排序,
        i = regNum
        selectList = random.sample(resultList,i)
        for _ in selectList:
            # 可选打印带答案的和不带答案啊
            print(_[0])# 不带答案
            # print(f'{_[0]}{_[1]}')# 带答案2
        
        
    # 验证生成算式数量70
    print(f'共生成不重复的纯加法算式的题目数量{len(selectList)}')# 选择列表的数量
    print(f'纯加法最大不重复的算式的限制数量{len(resultList)}')#  结果列表的数量

    # 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

# 减法题 :20以内不重复的所有减法题 

if choice==2:
    sumMax = int(input('请输入纯减法算式最大和((≥0)):\n'))# 输入最大值
    regNum = int(input('请输入需要的纯减法算式的数量:\n'))# 输入需要的数量
    # 生成1个列表,列表从0开始,到算术最大和结束,因为range函数包左不包右,因此如果要包括算式最大和,必须+1
    # range函数从0开始,这样列表元素和列表索引一致,减轻算法的难度
    numList = [x for x in range(0,sumMax+1)]# 建立整数列表,假设SUMMAX=20 sumMax+1等于21 但实际范围就是1-20,确保列表索引和列表元素一致
        # resultList列表用于保存最后需求数量的合规算术式
    resultList = []# 储存结果的列表
    # 从列表第2个元素开始到列表最后一个元素进行循环遍历
    for x in numList[0:]:# 0等于数字1
        # 从列表第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)))
            #加和减 查找 x + y < 算式最大和的加减法,此处考虑加法交换律,减法中去除了相减为0的情况,因为此处y>x
            elif x + y <= sumMax and (y != 0):# 第一位或者第二位都不为0,也就是没有
                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 and (y == 0):#此段只有一个答案0+0=0,不需要的话,此段注释掉
                tempStr = str(y) + ' - ' + str(x) + ' = '#减法类型3 y-x=0   
                resultList.append((tempStr, (y-x)))# 带答案的题目,如0-0=0,
    # 建立最终符合最终要求的算式列表
    selectList = []# 选择列表

    if regNum > len(resultList):#如果(输入算式的数量)大于(结果列表的数量)#输入题数大于实际需求,就用shuffle洗牌,
        print(f'您的需求大于最大算式生成数量!最大生成算式数量为{len(resultList)}') # 加了最大不重复算式统计值,如果输入的题数大于储存结果的列表的数量,列表加LEN
        i = len(resultList)# i的数量等于储存结果的列表的数量
        for _ in resultList:# 值在循环储存结果的列表内
            selectList.append(_) #选择列表 需要添加循环储存结果列表的内容
        random.shuffle(selectList) #shuffle 洗牌算法,把列表所有元素打乱,随机排列
        # selectList.sort()#sort 正序排列,只有10以内的能排序,超过10就乱序

        for _ in selectList:   
            # 可选打印带答案的和不带答案啊8
            print(_[0])# 不带答案
            # print(f'{_[0]}{_[1]}')# 带答案
        
    else:#输入题数小于实际需求,代码自动随机抽取,不会排序,
        i = regNum
        selectList = random.sample(resultList,i)
        for _ in selectList:
            # 可选打印带答案的和不带答案啊
            print(_[0])# 不带答案
            # print(f'{_[0]}{_[1]}')# 带答案2
        
        
    # 验证生成算式数量70
    print(f'共生成不重复的纯减法算式的题目数量{len(selectList)}')# 选择列表的数量
    print(f'纯减法题目最大不重复的算式的限制数量{len(resultList)}')#  结果列表的数量

    # 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

    # 加减法混合:20以内加法减法混合题 的数量
if choice==3: 
    sumMax = int(input('请输入加减法混合算式题的最大和((≥0)):\n'))# 输入最大值
    regNum = int(input('请输入需要生成加减法混合算式题的数量:\n'))# 输入需要的数量
    # 生成1个列表,列表从0开始,到算术最大和结束,因为range函数包左不包右,因此如果要包括算式最大和,必须+1
    # range函数从0开始,这样列表元素和列表索引一致,减轻算法的难度
    numList = [x for x in range(0,sumMax+1)]# 建立整数列表,假设SUMMAX=20 sumMax+1等于21 但实际范围就是1-20,确保列表索引和列表元素一致
# resultList列表用于保存最后需求数量的合规算术式
    resultList = []# 储存结果的列表
    # 从列表第2个元素开始到列表最后一个元素进行循环遍历
    for x in numList[0:]:# 0等于数字11
        # 从列表第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,
    # 建立最终符合最终要求的算式列表
    selectList = []# 选择列表

    if regNum > len(resultList):#如果(输入算式的数量)大于(结果列表的数量)#输入题数大于实际需求,就用shuffle洗牌,
        print(f'您的需求大于最大算式生成数量!最大生成算式数量为{len(resultList)}') # 加了最大不重复算式统计值,如果输入的题数大于储存结果的列表的数量,列表加LEN
        i = len(resultList)# i的数量等于储存结果的列表的数量
        for _ in resultList:# 值在循环储存结果的列表内
            selectList.append(_) #选择列表 需要添加循环储存结果列表的内容
        random.shuffle(selectList) #shuffle 洗牌算法,把列表所有元素打乱,随机排列
        # selectList.sort()#sort 正序排列,只有10以内的能排序,超过10就乱序

        for _ in selectList:   
            # 可选打印带答案的和不带答案啊8
            print(_[0])# 不带答案
            # print(f'{_[0]}{_[1]}')# 带答案
        
    else:#输入题数小于实际需求,代码自动随机抽取,不会排序,
        i = regNum
        selectList = random.sample(resultList,i)
        for _ in selectList:
            # 可选打印带答案的和不带答案啊
            print(_[0])# 不带答案
            # print(f'{_[0]}{_[1]}')# 带答案2
        
        
    # 验证生成算式数量70
    print(f'共生成不重复的算式的加减法混合题目数量{len(selectList)}')# 选择列表的数量
    print(f'加减法混合题目最大不重复的算式的限制数量{len(resultList)}')#  结果列表的数量

    # 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

else:
    print('输入错误,请重新输入.')

二、使用方法

(一)把代码存在一个py文件内。名字为" 20以内加减法选择题.py."   随意放在任何路径下。

(二)打开" 20以内加减法选择题.py. 右击运行

 (三)终端出现第一个问题,选择“纯加法题、纯减法题、加减法混合题”

(二)加法题:如5以内加法题

输入1 选择纯加法题 回车

 

 输入5 选择5以内的纯加法题 回车

 输入任意数字,回车 这里是89,代表生成的题目数

终端显示21道加法题  回车

 TXT里面的5以内不重复加法题

(二)减法题:如5以内减法题

输入2 选择纯减法题,回车

 

  输入5 选择5以内的纯减法题 回车

  输入任意数字,回车 这里是758,代表生成的题目数

 终端显示21道减法题 回车

  TXT里面的5以内不重复减法题 回车 

 (三)加减法混合题:如5以内减法题

输入3 选择加减法混合题,回车

 

   输入5 选择5以内的加减法混合题 回车

   输入任意数字,回车 这里是123,代表生成的题目数

 终端显示42道加减法混合题 回车

  TXT里面的5以内不重复加减法混合题 回车 

本章总结

本代码可以生成不重复的x 以内2个数字加减法混合题。通过三个选择,分别获得X以内的纯加法题,纯减法题和加减法混合题。在幼儿教具设置时有了更多的选择:

1.符号上的选择:纯加 纯减 加减混合

2.数量上的选择:5以内 10以内 20以内

  

3.答案上的选择:列示题有答案、列示题有无答案、(通过注释修改)

4.教学常用x以内加减法的数字选择。大班常用 5以内、10以内

        感谢作者马清新老师的代码,通过修改,不断优化程序,可以用一个代码,分别获得”5以内、10以内、20以内”的不重复的加减法题、加法题和减法题、确保下次为大班孩子们打印的2个数字加减法题/加法题/减法题里能够没有重复题,实现充分练习的目标。❀❀❀❀❀❀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值