【问题标题】:Writing loop insid a function changes the outputs在函数内编写循环会更改输出
【发布时间】:2018-10-13 23:53:59
【问题描述】:

我写了以下代码,它的输出是正确的,即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

谢谢

【问题讨论】:

    标签: python python-3.x loops


    【解决方案1】:

    您不小心将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
    

    【讨论】:

      【解决方案2】:

      您的 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
      

      【讨论】:

        猜你喜欢
        • 2015-09-30
        • 2011-02-07
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多