2016-02-07 34 views
0
def distance_from_zero(distance): 
    if type(distance) == int or type(distance) == float: 
     return abs(distance) 
     print(distance) 
    else: 
     return "Nope" 
     print distance_from_zero(distance) 

distance_from_zero(18) 
+2

返回后的任何代码都未执行!在编程时记住这一点 –

+1

目前,在递归调用之前放置'return'语句是防止无限递归的唯一方法。 – chepner

+0

我不认为我明白你的意思是“返回打印”。我最好的猜测是“打印返回的值” - ? –

回答

2

您应该在返回之前打印。一旦你返回,你的打印语句不可达。

取代:

return abs(distance) 
print(distance) 

有:

print(distance) 
return abs(distance) 

这:

return "Nope" 
print distance_from_zero(distance) 

有:

print distance_from_zero(distance) 
return "Nope" 
+0

谢谢!我还有一个简单的问题。在控制台中,我的代码最后总是没有。这是为什么? – INeedVerification

+0

@JacobKJakielaszek您可以将控制台中输出的全部内容与控制台中的输出一起复制粘贴吗? – Atri

0

返回后的代码永远不会执行。

您必须恢复订单。

喜欢的东西:

print(distance) 
return abs(distance) 
0

这是原来的代码与打印语句放在正确的位置。请注意仍然出现的无限递归错误。

def distance_from_zero(distance): 
    if type(distance) == int or type(distance) == float: 
     print(distance) 
     return abs(distance) 
    else: 
     # This print forces infinite recursion because of distance 
     # print distance_from_zero(distance) 
     return "Nope" 

这是测试它

def distance_from_zero(distance): 
    if type(distance) == int or type(distance) == float: 
     print(distance) 
     return abs(distance) 
    else: 
     try: 
      distance = float(distance) 
      print(distance) 
      return abs(distance) 
     except: 
      print ("invalid distance specified", distance) 
      return "Nope" 

当然,如果能够被丢弃,因为float(int)float(float)还是回到一个正常的浮动最初的一种方式。

def distance_from_zero(distance): 
    try: 
     distance = float(distance) 
     print(distance) 
     return abs(distance) 
    except: 
     print ("invalid distance specified", distance) 
     return "Nope" 
+0

它看起来像你遗漏了'距离'和'浮动(距离)之间的等号# – zondo

+0

@zondo谢谢。我会修好它 – sabbahillel

0

首先,为什么在调用abs()之前需要检查参数的类型?只需调用它。 abs()最了解它可以使用的操作数的类型。如果看到一个不能处理的问题,TypeError将引发异常并且调用者可以处理它。

如果您确实想处理函数中的错误,请使用try/except块,而不要试图猜测abs()支持的类型,例如,支持复数; abs(complex(1, 2))是完全合法:

try: 
    distance = abs(distance) 
except TypeError as e: 
    print('{!r} is not a valid distance'.format(distance)) 
    return None # or some other error 
else: 
    print(distance) 
    return distance 

最后,如果你真的想支持限制为仅intfloat类型,最好是使用isinstance()type()因为是支持继承:

if isinstance(distance, (int, float)): 
    # it's a float or an int 
    distance = abs(distance) 

一几个其他的事情要注意:

  • 致电print()打电话之前return中的函数。 return 终止函数并将执行返回给调用代码,因此return之后的任何语句都不会执行。
  • 你似乎想abs()后打印距离的价值,所以 你需要将结果保存在一个变量中(或执行两次计算):

    distance = abs(distance) 
    print(distance) 
    return distance 
    
0

我想在你编辑了一些东西之后Python会停止读取定义,所以你应该交换printreturn指令。

相关问题