背景需求:
前文提到存10个货币基金,每个投150元,1500元,每天有1分钱利息,10个基金就有0.1元,比1500元投1只货币基金0.06元,的收益高一点。
今天有了一笔流动现金,2525.87元。我想把它拆分开来,存几只货币基金。
结果显示:2525元可以存16只150元的货币基金,并余下125元。
余额125存1只基金,肯定无法保证每天有1份,
所以我想用Python计算——存17笔,确保每笔范围在140-150元之间,总额合计2525元。
设计过程:
写了17次遍历,很长很长,
用AI对话大师,缩减代码——获得itertools嵌套代码(非常简洁)
因为设置了A小于B小于c小于d,所以无法生成结果,每个数字都不同,140不会出现多次,但实际上可能有多笔140元。
重新询问
第1次测试范围:140-150元之间
'''
150元存钱游戏(2525元存140-150元一笔,共17笔的具体数据
作者:阿夏
时间:2024年2月21日
'''
import itertools
# 一笔零钱 s=2525.87去掉角分
money=2525
# 判断150元可以存几笔
s0=2525/150
print(s0)
# # 16.833333333333332 最多存16笔150元
# # 16笔都存150,怕银行账户记录判为违规(xiqian),所以希望存入的数字略有不同。
# # 如果想存16+1=17笔
n=int(s0)+1
f1=140# 存款数额最少的数字
f2=150 # 存款数额最多的数字
numbers = range(f1, f2+1)
combinations = itertools.combinations_with_replacement(numbers, n)
com=[]
for combination in combinations:
if sum(combination) == money:
print(combination)
com.append(combination)
print(n,'笔,',f1,'元到',f2,'元,共有',len(com),'种排列')
结果:出现1410种可能,太多了![](https://i-blog.csdnimg.cn/blog_migrate/2b4ff23a89d13ca67954c4df63f069c8.png)
第2次测试范围:143-150元之间
'''
150元存钱游戏(2525元存140-150元一笔,共17笔的具体数据
作者:阿夏
时间:2024年2月21日
'''
import itertools
# 一笔零钱 s=2525.87去掉角分
money=2525
# 判断150元可以存几笔
s0=2525/150
print(s0)
# # 16.833333333333332 最多存16笔150元
# # 16笔都存150,怕银行账户记录判为违规(xiqian),所以希望存入的数字略有不同。
# # 如果想存16+1=17笔
n=int(s0)+1
f1=int(input('最少的钱数额143\n'))# 存款数额最少的数字
f2=150 # 存款数额最多的数字
numbers = range(f1, f2+1)
combinations = itertools.combinations_with_replacement(numbers, n)
com=[]
for combination in combinations:
if sum(combination) == money:
print(combination)
com.append(combination)
print(n,'笔,',f1,'元到',f2,'元,共有',len(com),'种排列')
终端输入:143元
第3次测试范围:145-150元之间
'''
150元存钱游戏(2525元存140-150元一笔,共17笔的具体数据
作者:阿夏
时间:2024年2月21日
'''
import itertools
# 一笔零钱 s=2525.87去掉角分
money=2525
# 判断150元可以存几笔
s0=2525/150
print(s0)
# # 16.833333333333332 最多存16笔150元
# # 16笔都存150,怕银行账户记录判为违规(xiqian),所以希望存入的数字略有不同。
# # 如果想存16+1=17笔
n=int(s0)+1
f1=int(input('最少的钱数额,如145\n'))# 存款数额最少的数字
f2=150 # 存款数额最多的数字
numbers = range(f1, f2+1)
combinations = itertools.combinations_with_replacement(numbers, n)
com=[]
for combination in combinations:
if sum(combination) == money:
print(combination)
com.append(combination)
print(n,'笔,',f1,'元到',f2,'元,共有',len(com),'种排列')
终端输入:145元
最终我使用了第3项145-150元 339种排列的第1条进行货币基金购买
145元 5次
150元 12次![](https://i-blog.csdnimg.cn/blog_migrate/dfd396295399bf5ce6413ffd13dfffbc.png)
第4次测试范围:148-150元之间
'''
150元存钱游戏(2525元存140-150元一笔,共17笔的具体数据
作者:阿夏
时间:2024年2月21日
'''
import itertools
# 一笔零钱 s=2525.87去掉角分
money=2525
# 判断150元可以存几笔
s0=2525/150
print(s0)
# # 16.833333333333332 最多存16笔150元
# # 16笔都存150,怕银行账户记录判为违规(xiqian),所以希望存入的数字略有不同。
# # 如果想存16+1=17笔
n=int(s0)+1
f1=int(input('最少的钱数额,如148\n'))# 存款数额最少的数字
f2=150 # 存款数额最多的数字
numbers = range(f1, f2+1)
combinations = itertools.combinations_with_replacement(numbers, n)
com=[]
for combination in combinations:
if sum(combination) == money:
print(combination)
com.append(combination)
print(n,'笔,',f1,'元到',f2,'元,共有',len(com),'种排列')
分析:
虽然第4项只有5种排列,数量少,最适合,但考虑我的最终目标是凑满150元一只,所以没有选择第4项148-150元的结果(因为150元只有4只)!,而选择了第3项145-150元(150元有12只)
利用Python进行本金投放的计算。
整体代码(以此为准)
'''
150元存钱游戏(2525元存140-150元一笔,共17笔的具体数据
作者:阿夏
时间:2024年2月21日
'''
import itertools
# 一笔零钱 s=2525.87去掉角分
money=int(float(input('请输入总数(如2525.87)\n')))
# 判断150元可以存几笔
s0=money/150
print(s0)
# # 16.833333333333332 最多存16笔150元
# 0.83可以算出 、0.0整数可以算出 0.4 可以算出时间很长
# # 16笔都存150,怕银行账户记录判为违规(xiqian),所以希望存入的数字略有不同。
# # 如果想存16+1=17笔
n=int(s0)+1
f1=int(input('输入最少的钱数额,如145\n'))# 存款数额最少的数字
f2=150 # 存款数额最多的数字
numbers = range(f1, f2+1)
combinations = itertools.combinations_with_replacement(numbers, n)
com=[]
for combination in combinations:
if sum(combination) == money:
print(combination)
com.append(combination)
print(money,'元',n,'笔,',f1,'元到',f2,'元,共有',len(com),'种排列')
其他数字的测算
一、5,0结尾数字
结果:5、0结尾数字大部分都能推算出金额,但也少量可能出现0排列。