我正在从书中练习,我应该编写一个可以取大于2的正整数的程序,并写出在得到小于2的值之前必须重复将这个数除以2的次数。< / p>
def inStr():
n = -1
while n<2:
try:
n = int(input('Enter a positive integer greater than 2: '))
except:
pass
print(positive(n)) # prints None
def positive(n, step=0):
if n < 2:
# print(step) #it prints correct answer
return step #but why it returns None?
positive(n//2, step+1)
inStr()
我不明白为什么def positive(n, step=0)
会返回None
?
答案 0 :(得分:2)
因为你没有告诉它返回任何其他内容。您需要将return
放在那里:
def positive(n, step=0):
if n < 2:
# print(step) #it prints correct answer
return step #but why it returns None?
return positive(n//2, step+1)
有时函数会调用自身,但不会想要返回结果。你需要告诉Python这次你想要的。由于您没有告诉Python要返回什么,因此默认情况下会返回None
。
答案 1 :(得分:2)
您似乎忘记在return
之前添加positive(n//2, step+1)
。因此,您的函数positive
有时不返回任何内容(即None
)。
试试这个:
def inStr():
n = -1
while n<2:
try:
n = int(input('Enter a positive integer greater than 2: '))
except:
pass
print(positive(n)) # prints None
def positive(n, step=0):
if n < 2:
# print(step) #it prints correct answer
return step #but why it returns None?
return positive(n//2, step+1)
inStr()