函数返回None而不是预期的输出

时间:2017-10-01 06:45:14

标签: python-3.x

这段代码应该找到最大的数字,然后它应该打印出有多少,但由于某种原因,这个注释if语句不起作用。

#!/bin/python3

import sys

def birthdayCakeCandles(n, ar):
    j=1
    b=0
    f=0
    maxn=0
    for f in range(0,n-1,1):
        b=ar[f]
      #  if maxn==b:
            j=j+1
        elif b>maxn:
            maxn=b
        print(j)    



n = 4 
ar = 3, 1, 2, 3
print(birthdayCakeCandles(n, ar))

当我运行此代码时输出为:

1
1
1
None

所以,最终答案应该是2而不是None。

3 个答案:

答案 0 :(得分:0)

在您的代码中

首先,你不是{{1}来自你的功能的任何东西,

第二件事,你正在迭代你的数字集合的return个元素,你可以解决这个问题:使用n-1

第三,在range(0, n, 1)部分,您没有将elif的值重置为1。

所有三个修复:

j

另一个可以提供帮助的解决方案:

#!/bin/python3

import sys

def birthdayCakeCandles(n, ar):
    j=1
    b=0
    f=0
    maxn=ar[0]
    for f in range(1,n,1):
        b=ar[f]
        if maxn==b:
            j=j+1
        elif b>maxn:
            maxn=b
            j = 1
        print(j)    
return j


n = 4 
ar = 3, 1, 2, 3
print(birthdayCakeCandles(n, ar))

答案 1 :(得分:0)

None输出来自您尝试打印不返回任何内容的函数。你的最后一行应该只是:

birthdayCakeCandles(n, ar)

你的范围声明中也有一个关闭。 stop参数最多但不包括。您的数组位置为0-3,因此您的停止参数应为4.例如:

for f in range(0,n,1):

虽然startstep是默认值,但为了便于阅读,您可以range(n):

答案 2 :(得分:0)

如果您在StackOverflow中提出问题,最好使用有意义的变量名称,例如" counter"," num"," array&#34 ;," name_input"等。这将有助于其他人快速了解您使用该变量的原因。如果您的代码难以理解,大多数人会忽略您的问题。请重新编写您的问题并编辑您的代码示例,以便它具有更易理解和更有意义的变量名称。