我刚刚开始尝试通过YouTube和他们在线的MIT讲座学习代码。我在我正在编码的计算机上使用CompileOnline.com,而老师正在使用实际的Python程序。(同一版本)我的所有代码与他的代码相同
def sqrt(x):
ans = 0
if x >= 0:
while ans*ans < x: ans = ans + 1
if ans*ans != x:
print x, 'is not a perfect square.'
return None
else: return ans
else:
print x, 'is a negative number.'
return None
现在,当我将打印语句添加到代码进行测试
时打印sqrt(16) - 然后编译,我没有得到" 4"。然后PRINT SQRT(34) - 编译和我得到的" 34是一个完美的正方形",然后在下一行上获得"无"。在视频中,这个家伙进行了测试,我猜在一个与编写代码的不同的屏幕上,他可以简单地键入" SQRT(16)",而不是" Print Sqrt(16)","当他这样做时,他会像我一样获得4个。但是,当他键入" SQRT(34)"时,他会获得" 34不是一个完美的数字",这就是它,而不是"无"。当我用负数测试时,这也会发生。
我想我的问题是,当我使用负数或不是完美正方形的数字时,为什么我会获得"无"?
我很抱歉,这可能是一个非常愚蠢的问题,但是我只是想确切地确保他能确保我正确地做到这一点,而不是缺少可能很重要的事情。我也想知道这是否是因为我正在使用网站,并且他正在使用实际程序?
屏幕/窗口/框(无论它叫什么,而不是编写代码的位置)教授使用的是
>>>sqrt(16)
4 (his answer)
>>>sqrt(34)
34 is not a perfect number. (his answer)
(This is where I get "None")
再次,我为这过于戏剧性和令人难以置信的简单而表示歉意。只是不想错过某些事情,做所有事情/得到教授得到的确切答案。
由于打印语句和返回值的区别,您在交互式终端中陷入混乱。
使用完美的正方形运行函数时,return
S一个整数显示在控制台中。当您使用非完美平方运行该函数时,它将print
S一个值写入控制台(sys.stdout
),然后它也将其return
s无,它也显示在控制台中。
当您在python交互提示中输入表达式时,通常会打印该表达式的结果。但是,当表达式返回None
时,它不会打印该返回值。无论哪种情况,如果您要调用的函数执行明确的print
,则该数据将被打印。这就是视频中发生的事情:当他用正方形打电话给它时,它返回了平方根,交互式循环打印了返回值;当他用非方面调用它时,该功能打印了34 is not a perfect square
,并返回了None
,交互式循环未打印。
您的情况的区别在于您写了print sqrt(34)
。因此,您要明确地告诉它以打印返回值。None
值没有特殊例外,因此您在函数返回的情况下打印了None
。
您正在获取" None
,因为您返回None
。
如果您想吃None
,请尝试以下操作:
a = sqrt(34)
if a: print (a)