很简单。编译器返回"None",而我认为它不应该



我刚刚开始尝试通过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)

最新更新