Python入门课程编程问题:计算每日翻倍金额并对比付款方案
编程问题:两种收益方案对比计算
题目要求:你可以选择一次性获得100万美元,或者从1美分开始,每天金额翻倍,持续30天。编写程序计算翻倍方式的最终金额,判断哪种方案所得金额更高。
我的尝试代码:
i = 0.01 for i in range(31): day = i day_1 = day * (2 ** 2) print(i)
i = 0.01 for i in range(31): day = i day_1 = day * (2 ** 2) print(i)
我不知道如何让程序自动计算到第30天的每日金额,不想逐天编写代码,希望找到更高效的实现方法。
解决方案
你的代码存在几个逻辑问题:
- 初始化
i=0.01后,循环里用range(31)直接覆盖了i的值,导致初始金额没被用到 - 计算翻倍的公式错误,
2**2是翻4倍,不符合每天翻倍的逻辑 - 没有正确迭代更新每日的金额
下面提供两种高效实现方式:
方式一:循环迭代计算(直观易懂)
用一个变量保存当前金额,每天乘以2,循环30次即可得到最终金额:
# 初始金额为1美分(0.01美元) current_money = 0.01 # 循环30天,每天翻倍 for _ in range(30): current_money *= 2 # 对比两种方案 one_time_reward = 1000000.0 print(f"30天后翻倍方案总金额: ${current_money:.2f}") print(f"一次性奖励金额: ${one_time_reward:.2f}") if current_money > one_time_reward: print("翻倍方案所得金额更高!") else: print("一次性拿100万美元更划算!")
方式二:数学公式直接计算(效率更高)
第n天的金额公式为:初始金额 × 2^(n-1),30天的话直接计算0.01 × 2^29即可,无需循环:
initial = 0.01 total_money = initial * (2 ** 29) one_time_reward = 1000000.0 print(f"30天后翻倍方案总金额: ${total_money:.2f}") print(f"一次性奖励金额: ${one_time_reward:.2f}") print("翻倍方案更赚!" if total_money > one_time_reward else "一次性拿100万更好!")
如果需要查看每天的金额,只需要在循环里加入打印语句即可:
current_money = 0.01 print("每日金额变化:") for day in range(1, 31): print(f"第{day}天: ${current_money:.2f}") current_money *= 2 print(f"第30天最终金额: ${current_money/2:.2f}") # 最后一次循环后金额是第31天的,所以除以2得到第30天的结果
内容的提问来源于stack exchange,提问作者Jantek
相关产品推荐
相关产品推荐

