1

我是编程和 python 的新手。我需要帮助编写一个几何级数,该几何级数应该计算级数 1,2,4,8,16... 这是我到目前为止所拥有的:

def work_calc (days_worked, n):
      temp=int(1)
      if days_worked<2:
            print (1)
      else:
            while temp <= days_worked:
                  pay1 = (temp**2)
                  pay = int(0)
                  pay += pay1
                  temp +=1
                  print ('your pay for ',temp-1,'is', pay1)

main()

现在它给了我这个输出:1, 4, 9, 16, 25 我需要:1,2,4,8,16,32...

我正在编写基本上应该这样做的代码:

Example:
Enter a number: 5
your value 1 is: 1
your value 2 is : 2
your value 3 is : 4
your value 4 is : 8
your value 5 is : 16
your total is: 31

提前感谢您的帮助和指导!PS:在编程方面,我有时(大部分)就像一个愚蠢的金发女郎,所以感谢您的耐心..

4

3 回答 3

2

正如我所说,看起来您需要以下功能2

def work_calc (days_worked, n):
    for temp in range(days_worked):
        print ('your pay for ', temp + 1, 'is', 2 ** temp)

如果你想打印字符串(不是你现在正在做的元组):

def work_calc (days_worked):
    for temp in range(days_worked):
        print 'your pay for {} is {}'.format(temp + 1, 2 ** temp)

>>> work_calc(5)
your pay for 1 is 1
your pay for 2 is 2
your pay for 3 is 4
your pay for 4 is 8
your pay for 5 is 16

请注意 - 您的代码正在计算 2 的平方temp,而不是 2 的幂,这就是为什么不起作用

于 2013-09-14T10:38:56.237 回答
2

我知道这对于您想要做的事情可能有点过头了,并且您在其他答案中得到了很好的建议来解决您的问题,但是在这里介绍 python 的一些其他功能是一些其他方法:列表理解:

def work_calc(days):
    powers_of_two = [2**x for x in range(days)]
    for i, n in enumerate(powers_of_two):
        print('your pay for {} is {}'.format(i+1,n))
    print('your total is {}'.format(sum(powers_of_two)))

这是紧凑而整洁的,但会将 2^n 的整个列表保存在内存中,对于小的 n 这不是问题,但对于大的可能会很昂贵。生成器表达式与列表推导非常相似,但将计算推迟到迭代结束。

def work_calc(days):
    powers_of_two = (2**x for x in range(days))
    total = 0
    for i, n in enumerate(powers_of_two):
        total += n 
        print('your pay for {} is {}'.format(i+1,n))
    print('your total is {}'.format(total))

必须将总数移动到滚动计算中,并且每次仍然计算 2**n,生成器函数将避免功率计算:

import itertools

def powers_of_two():
    n = 1
    while True:
        yield n
        n *= 2

def work_calc(days):
    total = 0
    for i, n in enumerate(itertools.islice(powers_of_two(), days)):
        total += n 
        print('your pay for {} is {}'.format(i+1,n))
    print('your total is {}'.format(total))

正如我所说的矫枉过正,但希望能介绍一些 python 的其他特性。

于 2013-09-14T14:39:44.073 回答
0

这是一个家庭作业问题吗?(没有足够的代表发表评论)

在序列中,1,2,4,8,16,32每一项都是前一项的两倍。

因此,您可以保留上一个学期的记录并将其翻倍以获得下一个学期。

正如其他人所提到的,这与计算 2^n (不是我之前所说的 n^2) 相同,其中 n 是术语的数量。

print ('your pay for 1 is' 1)
prevpay = 1
while temp <= days_worked:
    pay1 = prevpay*2
    pay = int(0)
    pay += pay1
    temp +=1
    prevpay = pay1
    print ('your pay for ',temp-1,'is', pay1)
于 2013-09-14T10:44:48.733 回答