Python无法返回最终值

时间:2014-02-28 00:01:39

标签: python math return

我坚持这项任务。 我尝试与我的代码进行不同的组合以获得返回但失败了。 该问题通过使用递归询问在一段时间内发现辐射暴露。

问题:我可以正确地获得所有计算[我使用在线python执行器检查它]但是当进程返回到最终返回时,结果是None。我不知道为什么我的代码无法返回最终的计算结果。我希望:那里的一些古茹可以给我一些线索谢谢。

global totalExposure
totalExposure=0 

def f(x):
    import math
    return 10*math.e**(math.log(0.5)/5.27 * x)

def radiationExposure(start, stop, step):
    time=(stop-start)
    newStart=start+step

    if(time!=0):
        radiationExposure(newStart, stop, step) 
        global totalExposure
        totalExposure+=radiation   
        radiation=f(start)*step
    else:
        return totalExposure

测试案例1:

>>> radiationExposure(0, 5, 1)
39.10318784326239

5 个答案:

答案 0 :(得分:2)

您似乎忘记了return子句中的ifelse中有一个,但if.

中没有

答案 1 :(得分:1)

正如保罗所说,你的if陈述没有回复。另外,在分配变量radiation之前,您正在引用变量global totalExposure totalExposure = 0 def f(x): import math return 10 * math.e**(math.log(0.5)/5.27 * x) def radiationExposure(start, stop, step): time = (stop-start) newStart = start+step if(time!=0): radiationExposure(newStart, stop, step) global totalExposure radiation = f(start) * step totalExposure += radiation return totalExposure else: return totalExposure rad = radiationExposure(0, 5, 1) # rad = 39.1031878433 。一些调整,我能够让它工作。

{{1}}

答案 2 :(得分:1)

没有global的清洁版

import math

def f(x):
    return 10*math.e**(math.log(0.5)/5.27 * x)

def radiationExposure(start, stop, step):

    totalExposure = 0
    time = stop - start
    newStart = start + step

    if time > 0:
       totalExposure = radiationExposure(newStart, stop, step) 
       totalExposure += f(start)*step

    return totalExposure

rad = radiationExposure(0, 5, 1)

# rad = 39.1031878432624

答案 3 :(得分:1)

@furas'代码迭代而不是递归:

def radiationExposure2(start, stop, step):

    totalExposure = 0
    time = stop - start
    newStart = start + step
    oldStart = start

    while time > 0:
       totalExposure += f(oldStart)*step

       time = stop - newStart
       oldStart = newStart
       newStart += step

    return totalExposure

转换为for循环:

def radiationExposure3(start, stop, step):

    totalExposure = 0
    for time in range(start, stop, step):
       totalExposure += f(time) * step

    return totalExposure

使用生成器表达式:

def radiationExposure4(start, stop, step):
    return sum(f(time) * step for time in range(start, stop, step))

答案 4 :(得分:-1)

正如其他提到的那样,你的if语句没有回复。你似乎忘记了if子句中的返回。在if中有一个但在if中没有。