我必须创建以下代码,以确定一个人在一定时间内接触到多少辐射。我使用for
循环创建了它并且我的答案是正确的75%,我检查了一个使用while
循环的朋友的代码,他有100%正确所以,我的问题是为什么或两个代码之间有什么区别或我在For
循环中没有做什么?
我用这些行调用了函数
radiationExposure(0, 11, 1)
radiationExposure(40, 100, 1.5)
这是代码:
def f(x):
import math
return 10*math.e**(math.log(0.5)/5.27 * x)
def radiationExposure(start, stop, step):
cuenta = 0.0
Iter = stop - start
for i in range(start,(Iter)+start):
temp = f(i) * step
cuenta += temp
return cuenta
其他代码(这是正确的):
def f(x):
import math
return 10*math.e**(math.log(0.5)/5.27 * x)
def radiationExposure(start, stop, step):
result = 0
while start < stop:
result += f(start) * step
start += step
return result
答案 0 :(得分:2)
您忽略了范围内的step
参数。 while
循环通过将step
添加到start
来递增,但您只增加1。
您可以在step
循环中包含for
值:
for i in range(start, stop, step):
请注意,我删除了Iter
变量;你不需要它,它是多余的。只需使用stop
作为range()
对象的结束值。
现在i
将设置为start
,start + 1 * step
,start + 2 * step
等,而不是start
,start + 1
,{{1等等。
您可能是因为start + 2
不支持浮点值。您无法使用range()
,因此要正确解决此问题, 要使用其他类型的循环。
如果你真的想要,你仍然可以使用1.5
:
range()
首先计算你的循环必须执行的总步数,然后多次循环。每次迭代都会从循环计数器计算该迭代的实际值。
我认为使用length = int(1 + (stop - 1 - start) / step)
for counter in range(length):
i = start + counter * step
temp = f(i) * step
cuenta += temp
循环更容易。
至少在这种变化的情况下,两种方法的结果是相同的:
while
答案 1 :(得分:1)
for
循环步骤1
并忽略step
参数
for i in range(start, (Iter)+start)
要考虑该步骤,请将最后一个参数添加到range
for i in range(start, (Iter)+start, step)