结果展示
优化后
优化前
背景需求:
生成列表
单独抽取显示题目排序方法
存在问题:
我希望 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)
按照原数组的位置排序
代码展示:
'''
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:passP =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)) ) # 21P2=[]
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+10P2.append(i[0:])
print(P2)
print('0-20之间的加法题(正序排序)共有 {} 题'.format(len(P2)) ) # 21for e in P2:print(e)
存在问题:
如果是三位数的加减法,存在更多的if可能性(多次去0),写起来太麻烦了,还是想想更好的代码写法,让题目排序