我写了下面的代码,它的输出是正确的,即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
谢谢
您不小心将
num = 0
放入了for
循环中,这意味着num
每次都会被重置。它还返回第一个值,因为您将return
语句缩进到for
循环中这就是你想要的:
return语句位于for循环中,因此它只会迭代一次。将return语句放在for循环之外。正如上面提到的那样,也把
num=0
放在for循环之外相关问题 更多 >
编程相关推荐