我刚开始尝试通过youtube和他们在线的麻省理工学院讲座来学习代码。 我正在编写的计算机上使用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
现在我在代码中添加print语句来测试它
print 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")
再一次,我为此道歉,过于戏剧化,非常简单。只是不要试图错过任何东西,做一切/得到教授得到的确切答案。
答案 0 :(得分:1)
由于print语句和返回值之间的区别,您在交互式终端中遇到了混乱。
当您使用完美的正方形运行该函数时,return
是一个显示在控制台中的整数。当你使用非完美的正方形运行函数时print
sa值被写入控制台(sys.stdout
),那么它也是return
的无,它也显示在控制台。
答案 1 :(得分:1)
当您在Python交互式提示中键入表达式时,它通常会打印该表达式的结果。但是,当表达式返回None
时,它不会打印该返回值。在任何一种情况下,如果您正在调用的函数执行显式print
,则会打印该数据。这就是视频中发生的事情:当他用方块调用它时,它返回了平方根,并且交互式循环打印出返回值;当他用非正方形调用它时,函数打印34 is not a perfect square
,并返回None
,交互式循环没有打印。
您的案例的不同之处在于您撰写了print sqrt(34)
。所以你明确告诉它打印返回值。这对None
值没有特殊例外,因此在函数返回的情况下打印None
。
答案 2 :(得分:0)
你是&#34;得到&#34; None
,因为您返回None
。
如果你想吃None
尝试类似的东西:
a = sqrt(34)
if a: print (a)