如何将此循环乘以一定限制?python

时间:2017-10-07 18:01:41

标签: python python-3.x

这是任务:编写一个具有限制(lim)的函数并返回prodCount,其中prod定义为(1+1/1**2)(1+1/2**2)(1+1/3**2) ... 计数是它运行的次数。它应该在prod小于极限时结束。这是我到目前为止所得到的:(我在答案中得到的帮助修复了代码)

def variabel(n):
return 1+1/n**2
def tol():
tol1 = float(input("Hva er grensen?"))
prod = 1
prod2 =2
prod3 = 2
n = 1
count = 0
while tol1 < prod2:
    prod3 = variabel(n)*prod
    prod2 = prod3-prod
    prod = prod3
    n += 1
    count += 1
    if tol1 >= prod2:
        print("Produktet ble", prod, "etter", count, "itterasjoner")
tol()

1 个答案:

答案 0 :(得分:2)

首先提示将帮助您解决此类问题,并帮助您保持代码的整洁。

  1. 将代码分解为更小的子问题,并为每个子问题创建一个辅助方法

    问题1:以通用方式解决1 / n ** 2

    def default_function(x):
        return 1/x**2
    

    问题2:从这个

    创建一个系列
    def my_series(start=1,func=default_function):
        #return 1/n**2 for ever 
        for i in itertools.count(start):
            yield func(i) 
    
  2. 这可以让你尝试各种各样的事情,例如,如果我想永远打印值

    for value in my_series(): # will print forever...
        print(value)
        time.sleep(1)
    

    如果您只想要前10个值

    for i, value in zip(range(1,11),my_series()):
        print("{0}. {1}".format(i,value)) 
    

    如果你想绘制前100个值

    from matplotlib import pyplot as plt
    xs_and_ys = zip(range(1,101),my_series()) #[(1,series[0]),(2,series[1]),...]
    xs,ys=zip(*xs_and_ys) # transpose into separate xs and ys
    plt.plot(xs,ys)
    plt.show()
    

    现在您会注意到我没有为您完成您的作业,相反,我希望我能为您提供可用于解决第3个子问题的工具

    问题3:返回系列直到它们的乘积大于或小于某个阈值