python中求和的计算
在我的课堂上,我被要求写一个程序来计算下面的等式,其中d是距离最近的整数的距离 到目前为止,我写的是:python中求和的计算,python,sum,Python,Sum,在我的课堂上,我被要求写一个程序来计算下面的等式,其中d是距离最近的整数的距离 到目前为止,我写的是: def suma(x,y,z): d = 0 f = 0 if x - math.ceil(x) < math.floor(x) - x: d == x - math.ceil(x) else: d == math.floor(x) - x for i in range(y,z): k = list
def suma(x,y,z):
d = 0
f = 0
if x - math.ceil(x) < math.floor(x) - x:
d == x - math.ceil(x)
else:
d == math.floor(x) - x
for i in range(y,z):
k = list(range(y,z))
f += math.pow(2,k[i])*pow(d,2)*(x/pow(2,k[i]))
return f
print(suma(6,0,15))
def suma(x,y,z):
d=0
f=0
如果x-数学楼层(x)<数学楼层(x)-x:
d==x-math.ceil(x)
其他:
d==数学楼层(x)-x
对于范围内的i(y,z):
k=列表(范围(y,z))
f+=数学功率(2,k[i])*pow(d,2)*(x/pow(2,k[i]))
返回f
印刷品(suma(6,0,15))
结果是我得到了0.0,我想知道我在哪里犯了错误
我非常感谢您在评估以下代码时提供的支持-我不仅对Python完全陌生,而且对编程也完全陌生,我渴望学习并期待反馈
事先非常感谢通过执行
d==x-math.ceil(x)
,您实际上是在比较d的值。你的意思是写d=x-math.ceil(x)
这就是为什么它最终返回0,因为d的值永远不会更新。通过执行
d==x-math.ceil(x)
,您实际上是在比较d的值。你的意思是写d=x-math.ceil(x)
这就是为什么它最终返回0,因为d的值从未更新。除了对赋值使用
==
之外,您的代码还有一些问题:
- 您的
不是最接近整数的距离;当你输入d
时,你得到x=6.3
,但应该得到-0.7
。相反,只需使用0.3
d=x-round(x)
- 您对
范围的循环没有任何意义,只起作用,因为
是y
,因此0
与k[i]
相同;相反,只需对范围(y,z)内的k循环i
def suma(x, y, z):
d = x - round(x)
f = 0
for k in range(y, z):
f += 2**k * d**2 * x/(2.**k)
return f
或更短,与生成器表达式一起使用sum
。此外,无需在循环的每次迭代中计算d**2
:
def suma(x, y, z):
d2 = (x - round(x))**2
return sum(2**k * d2 * x/(2.**k) for k in range(y, z))
此外,如评论中所述,
2**k*d**2*x/(2.**k)
应与d**2*x
相同,因为这两个2**k
相互抵消,因此您可以进一步简化代码;您甚至不需要总和,因为这些术语独立于k
(假设您的公式是正确的)
除了在作业中使用
==
之外,您的代码还有一些问题:
- 您的
不是最接近整数的距离;当你输入d
时,你得到x=6.3
,但应该得到-0.7
。相反,只需使用0.3
d=x-round(x)
- 您对
范围的循环没有任何意义,只起作用,因为
是y
,因此0
与k[i]
相同;相反,只需对范围(y,z)内的k循环i
def suma(x, y, z):
d = x - round(x)
f = 0
for k in range(y, z):
f += 2**k * d**2 * x/(2.**k)
return f
或更短,与生成器表达式一起使用sum
。此外,无需在循环的每次迭代中计算d**2
:
def suma(x, y, z):
d2 = (x - round(x))**2
return sum(2**k * d2 * x/(2.**k) for k in range(y, z))
此外,如评论中所述,
2**k*d**2*x/(2.**k)
应与d**2*x
相同,因为这两个2**k
相互抵消,因此您可以进一步简化代码;您甚至不需要总和,因为这些术语独立于k
(假设您的公式是正确的)
执行
d==…
不会将任何内容分配给d
。你的意思是d=…
我知道你没有给d赋值,因为你使用==运算符“结果是给我0.0”。你应该得到什么结果?在不知道正确答案的情况下很难调试它。@ZuzannaNikitorowicz欢迎使用堆栈溢出。没有必要在问题中添加代码语言(在本例中为Python)——这都是由标记(您已经添加):)处理的,只是一个数学问题:为什么您的等式中有math.pow(2,k[i])*(1/pow(2,k[i])
?等于1。所以你基本上是在做math.pow(d,2)*x
,在求和中…做d==…
不会给d
赋值。你的意思是d=…
我知道你没有给d赋值,因为你使用==运算符“结果是给我0.0”。你应该得到什么结果?在不知道正确答案的情况下很难调试它。@ZuzannaNikitorowicz欢迎使用堆栈溢出。没有必要在问题中添加代码语言(在本例中为Python)——这都是由标记(您已经添加):)处理的,只是一个数学问题:为什么您的等式中有math.pow(2,k[i])*(1/pow(2,k[i])
?等于1。所以你基本上是在做math.pow(d,2)*x
,在求和中…我同意这是一个问题,但即使将=
s更改为=
s,结果仍然是0.0。肯定还有别的事情发生。是的,通过做d=math.floor(x)-x
,每次x是整数时,它都将是0。对于d=x-math.ceil(x)
我同意这是一个问题,但即使将=
s更改为=
s,结果仍然是0.0。肯定还有别的事情发生。是的,通过做d=math.floor(x)-x
,每次x是整数时,它都将是0。这同样适用于d=x-math.ceil(x)
当x=6.8
时,例如,round(x)
给出7
,d
将是-0.2
。在这里,这并不重要,因为我们考虑了正方形,但在另一种情况下,这应该被考虑在内。我只是想指出,因为OP似乎对舍入函数感到困惑。@Motun-True;首先我有一个abs
,但正如你所说,这个数字是平方的。OP的问题