【教学类-06-12】20231126 (一)如何让加减乘除题目从小到大排序(以1-20之间加法为例,做正序排列用)

结果展示

优化后

优化前

背景需求:

生成列表

单独抽取显示题目排序方法

存在问题:

我希望 0+0 0+1 0+2......这样排序,但是实际上,除了第一个加数会从小到大排序,第二个被加数的第十位数和个位数都会从小到大排序,也就是0+0后面,先出现的是0+10(不是0+1),等10-19排完了,在轮到0+1,随后0+20出现,接着才是0+2、0+3

也就是说:0+1 、0+10这两个数字,默认是两位数字0+10先出现,第二个数字双位数都走完了,才会轮到0+1这种单个数。

需求:

如何让0+0 0+1 ......0+9 0+10 0+11 0+20,然后在是1+0......1+19这样排序。

样式:0+(0-20),1+(0-19)......18+(0-2),19+(0-1),20+(0)

解决思路

一、把数字改成两位数

按需要的顺序排列,写入数组

二、对数组内的题目,四种可能性进行去"0"处理

1、个位数去0+个位数去0(2+3)

2、个位数去0+十位数(3+15)

3、十位数+个位数去0(12+1)

4、十位数+十位数(10+10)

按照原数组的位置排序

代码展示:

python 复制代码
'''
0-20所有加法,从小到大排序(0+1,0+2,而不是0+1,0+10)
作者:阿夏
时间:2023年11月26日 12:00
'''


# 5以内"+"题共21题
P=[]
for a in range(0,21):     # 起始数字就是10,就是排除掉0-10之间的数字
    for b in range(0,21):      # 起始数字为0,
        if 0<=a+b<21:         
            # print('{}+{}='.format(a,b))
            P.append('{}+{}='.format('%02d'%a,'%02d'%b))
        if 0<=b+a<21:       
            # print('{}+{}='.format(a,b))
            P.append('{}+{}='.format('%02d'%b,'%02d'%a))
        else:
            pass

P =list(set(P))    # 排除重复,但随机打乱
P.sort()    # 小到大排序
print(P)
# for i in P :
#     print(i)

    # ['0+0=', '0+1=', '0+2=', '0+3=', '0+4=', '0+5=', '1+0=', '1+1=', '1+2=', '1+3=', '1+4=', '2+0=', '2+1=', '2+2=', '2+3=', '3+0=', '3+1=', '3+2=', '4+0=', '4+1=', '5+0=']
    # "+"题生成都是按小到大排列的,不需要sort排序
print('0-20之间的加法题共有  {}  题'.format(len(P)) )   # 21

P2=[]
for i in P:    # 每个内容是00+00=,一共6个字符
    # print(i)
    if i[0]=='0'and i[-3]=='0':
        print(i[1:3]+i[4:])        # 全部是X+X= 个位数+个位数
        P2.append(i[1:3]+i[4:])
    if i[0]=='0'and i[-3]!='0':
        print(i[1:])      # 全部是X+XX= 个位数+十位数
        P2.append(i[1:])
    if i[0]!='0'and i[-3]=='0':
        print(i[0:3]+i[4:])   # 全部是XX+X= 十位数+个位数
        P2.append(i[0:3]+i[4:])
    if i[0]!='0'and i[-3]!='0':
        print(i[0:])   # 全部是XX+XX= 十位数+十位数 只有一个10+10
        P2.append(i[0:])
print(P2)
print('0-20之间的加法题(正序排序)共有  {}  题'.format(len(P2)) )   # 21

for e in P2:
    print(e)

存在问题:

如果是三位数的加减法,存在更多的if可能性(多次去0),写起来太麻烦了,还是想想更好的代码写法,让题目排序

相关推荐
C嘎嘎嵌入式开发16 分钟前
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
数据结构·python·算法
Vect__31 分钟前
从底层到上层的“外挂”:deque、stack、queue、priority_queue 全面拆解
数据结构·c++
玖釉-1 小时前
三维模型数据结构与存储方式解析
数据结构·算法·图形渲染
努力努力再努力wz2 小时前
【C++进阶系列】:万字详解特殊类以及设计模式
java·linux·运维·开发语言·数据结构·c++·设计模式
青岛少儿编程-王老师12 小时前
CCF编程能力等级认证GESP—C++7级—20250927
数据结构·c++·算法
nanaki5021314 小时前
数据结构(3) ----------- 栈、队列
数据结构
一只小透明啊啊啊啊14 小时前
b树,b+树,红黑树
数据结构·b树·b+树
Mingze031414 小时前
C语言四大排序算法实战
c语言·数据结构·学习·算法·排序算法
程序员东岸15 小时前
学完顺序表后,用 C 语言写了一个通讯录
数据结构·笔记·学习
独自破碎E16 小时前
Leetcode2166-设计位集
java·数据结构·算法