这是任务:编写一个具有限制(lim)的函数并返回prod
和Count
,其中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()
答案 0 :(得分:2)
首先提示将帮助您解决此类问题,并帮助您保持代码的整洁。
将代码分解为更小的子问题,并为每个子问题创建一个辅助方法
问题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)
这可以让你尝试各种各样的事情,例如,如果我想永远打印值
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:返回系列直到它们的乘积大于或小于某个阈值