【时事篇-05-02】20240221 2525元存17只货币基金的具体数目测算( itertools)

文章讲述了作者使用Python和itertools库计算如何将2525.87元拆分成140-150元不等的17笔资金存入货币基金,以达到最佳收益和避免账户记录问题。过程中尝试了不同范围的组合,最终选定145-150元之间的方案。
摘要由CSDN通过智能技术生成

背景需求:

前文提到存10个货币基金,每个投150元,1500元,每天有1分钱利息,10个基金就有0.1元,比1500元投1只货币基金0.06元,的收益高一点。

【时事篇-05】20240112 150元存46只货币基金-CSDN博客文章浏览阅读568次,点赞15次,收藏11次。【时事篇-02】20240110 365天存钱法(sum法)-CSDN博客【时事篇-02】20240110 365天存钱法(sum法)https://blog.csdn.net/reasonsummer/article/details/136106686?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136106686%22%2C%22source%22%3A%22reasonsummer%22%7D

今天有了一笔流动现金,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种可能,太多了

第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次

第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排列。

  • 36
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值