在函数中写入循环会改变输出

2024-05-29 04:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了下面的代码,它的输出是正确的,即35

def ant(z, O_m, O_D):             
    return 1/(O_m * (1 + z)**3 + O_D)**(0.5)

def cc(k, H0, O_m, O_D):
    HH = H0 * (1/ant(zcc[k], O_m, O_D))
    hd =((Hcc[k] - HH)/sigcc[k])**2
    return hd

num = 0
for j in range(len(zcc)):
            num = num + cc(j, H0, O_m, O_D)    
print(num)  #35

但是当我把它放到循环中时,它只打印循环的第一个数字,即0.02

def ccD(H0, O_m, O_D):
    for j in range(len(zcc)):
        num = 0
        num = num + cc(j, H0, O_m, O_D)
        return num
print(ccD(70, 0.3, 0.7))   #0.02

我把数据写在这里:

zcc, Hcc, sigcc=np.genfromtxt('cc.txt',unpack=True)

0.0708  69     19.68
0.09    69      12
0.12    68.6    26.2
0.17    83      8
0.179   75        4
0.199   75      5
0.2     72.9   29.6
0.240   79.69   2.65
0.27    77       14
0.28    88.8    36.6
 0.35   84.4    7
0.352   83       14
0.38    81.5    1.9
0.3802  83    13.5
0.4       95    17
0.4004   77    10.2
0.4247  87.1    11.2
 0.43   86.45   3.68
0.44    82.6    7.8
0.4497  92.8    12.9
0.47    89       67
0.4783  80.9    9
 0.48   97      62
0.51    90.4    1.9
0.57    92.4    4.5
0.593   104     13
 0.6    87.9    6.1
0.61    97.3    2.1
0.68    92      8
0.73    97.3    7
0.781   105     12
0.875   125     17
0.88    90      40
0.9      117    23
1.037   154    20
1.3      168    17
1.363   160    33.6
1.43    177     18
1.53    140     14
1.75    202    40
1.965   186.5   50.4
2.34    222      7
2.336   226      8

谢谢


Tags: inforlenreturndefhhrangenum
2条回答

您不小心将num = 0放入了for循环中,这意味着num每次都会被重置。它还返回第一个值,因为您将return语句缩进到for循环中

这就是你想要的:

def ccD(H0, O_m, O_D):
    num = 0
    for j in range(len(zcc)):
        num = num + cc(j, H0, O_m, O_D)
    return num

return语句位于for循环中,因此它只会迭代一次。将return语句放在for循环之外。正如上面提到的那样,也把num=0放在for循环之外

def ccD(H0, O_m, O_D):
    num = 0
    for j in range(len(zcc)):
        num = num + cc(j, H0, O_m, O_D)
    return num

相关问题 更多 >

    热门问题