如何在序列中添加数字直到用户输入而不是添加一个?

时间:2015-03-11 21:42:48

标签: python

我正在参加Python的在线入门计算机科学课程。一个家庭作业问题说国际象棋的发明者要求一粒米饭。第一天1粒,第二天2粒,第三天4粒,第五天8粒......一直到68天。我必须创建一个执行此操作的函数,返回输入的平方数的晶粒数。

我相信我所要做的就是从用户那里获得正方形的数量。将所有两个的倍数相加到用户输入的点,然后加1。我不知道该怎么做。这有什么恼人的;你可以知道该做什么,但不知道怎么做。

def function(li):
    for i in range(len(li))
    #I need a loop that adds all the multiples of 2 up to the point of the user's input than returns that value. 
    function()

2 个答案:

答案 0 :(得分:2)

同样可以通过查看序列1,2,4,8...作为2^0,2^1,2^2,2^3...来完成,您可以创建一个简单的函数,根据天数为您提供金额。

def fun(days):
    return 2**(days-1)

print fun(64)
9223372036854775808

答案 1 :(得分:0)

根据您的逻辑,谷物从1开始并且与前一天相比加倍

第一天:1(2 ** 0)

第二天:2(2 ** 1)

第三天:4(2 ** 2)

第四天:8(2 ** 3)

所以在第四天总共会有2**0 + 2**1 + 2**2 + 2**3

使用公式:

x**0 + x**1 + x**2 + x**3 .. x**m =  (x**(m+1) - 1)/(x-1)

我们在2**(m+1) -1

时获得x =2

所以在第四天(即自从我们从零指数开始以来m = 3),总谷物将是2**4 -1 =15

基于以上逻辑,您的功能应该是:

def totalGrains(days):
    return 2**days - 1