作品展示
背景需求:
通过 itertools计算2525元存17笔145-150元金额的最适合方案
现在我的账户里还有27个货币基金没有填满。
如果我想分别存入145、146、147、148、149、150六种金额,每一种分别需要存入几笔,才能让合计等于27笔?最后计算总金额。
设计思路
1、确定“笔”的大致范围:平均数
将27除以6(145-150共6个金额)=4.5笔
如果想让 145-150出现的次数也基本相近,就将27除以6,每个金额的次数范围就在4-5之间
2、用itertools计算每个金额出现的笔数/次数,并相加正好等于27
结果只有一种——[4, 4, 4, 5, 5, 5], 合计27只
也就是145*4+146*4+147*4+148*5+149*5+150*5
推算出合计 =3987元(27只)
'''
150元存钱游戏(需要27笔,在145-150之间推算,145元会是几笔,146元几笔……最后计算一共多少元)
作者:阿夏
时间:2024年2月22日
'''
import itertools
#
q=int(input('缺几只?25只\n'))
# 金额范围 6只 145、146、147、148、149、150
m=[]
for i in range(145,151):
m.append(i)
print(m)
# [145, 146, 147, 148, 149, 150]
n=len(m)
# 6
# 27平均分配到5个里
f1=int(q/n)
print(f1)
# 27/5=4.5 四舍五入是4。
#
# 范围4-5之间
f2=int(f1)+1
numbers = range(f1,f2+1)
combinations = itertools.combinations_with_replacement(numbers, n)
com=[]
for combination in combinations:
if sum(combination) == q:
c=list(combination)
com.append(list(combination))
print(c)
print(q,'笔,',f1,'元到',f2,'元,共有',len(com),'种排列')
# [4, 4, 4, 5, 5, 5] 145*4+146*4+147*4+148*5+149*5+150*5
all=[]
s=[]
for b in range(len(m)):
all.append('{}*{}'.format(m[b],c[b]))
s.append(m[b]*c[b])
print('每笔金额、笔数:',all)
print('合计金额: ',sum(s))
# 合计金额: 3987
终端输入
27
结果