使用不同的循环结构时的不同答案

时间:2015-02-02 12:40:05

标签: python for-loop while-loop

我必须创建以下代码,以确定一个人在一定时间内接触到多少辐射。我使用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

2 个答案:

答案 0 :(得分:2)

您忽略了范围内的step参数。 while循环通过将step添加到start来递增,但您只增加1。

您可以在step循环中包含for值:

for i in range(start, stop, step):

请注意,我删除了Iter变量;你不需要它,它是多余的。只需使用stop作为range()对象的结束值。

现在i将设置为startstart + 1 * stepstart + 2 * step等,而不是startstart + 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)