代码赢了';我无法识别我的if语句(Python)

代码赢了';我无法识别我的if语句(Python),python,if-statement,Python,If Statement,代码无法识别我的if语句。当我运行此代码时,我输入以下数字:-10。但是,当它应该返回if语句时,它将返回else语句。我做错了什么,有什么帮助吗 def distance_from_zero(d): if type(d)== int or type(d)==float: return abs(d) else: return "Not an integer or float!" x = raw_input("Enter number: ")

代码无法识别我的if语句。当我运行此代码时,我输入以下数字:-10。但是,当它应该返回if语句时,它将返回else语句。我做错了什么,有什么帮助吗

def distance_from_zero(d):
    if type(d)== int or type(d)==float:
        return abs(d)
    else:
        return "Not an integer or float!"
x = raw_input("Enter number: ")        
print distance_from_zero(d)

raw_input
始终返回字符串。因此,如果键入数字9,它不会返回整数
9
,而是返回字符串
“9”
。因此,您的测试
type(d)==int或type(d)==float
永远不会为真

你可以这样做

def distance_from_zero(d):
    try:
        return abs(int(d))
    except ValueError:
        pass
    try:
        return abs(float(d))
    except ValueError:
        pass
    return "Not an integer or float!"
x = raw_input("Enter number: ")        
print distance_from_zero(x)

这利用了python中流行的一种称为“duck typing”的设计理念,在这种设计理念中,您不需要测试对象的类型,只需将对象视为您想要的类型,并处理如果它不是该类型就会弹出的异常。

原始输入总是返回字符串。因此,如果键入数字9,它不会返回整数
9
,而是返回字符串
“9”
。因此,您的测试
type(d)==int或type(d)==float
永远不会为真

你可以这样做

def distance_from_zero(d):
    try:
        return abs(int(d))
    except ValueError:
        pass
    try:
        return abs(float(d))
    except ValueError:
        pass
    return "Not an integer or float!"
x = raw_input("Enter number: ")        
print distance_from_zero(x)

这利用了python中流行的一种称为“duck typing”的设计理念,在这种设计理念中,您不需要测试对象的类型,只需将对象视为您想要的类型,并处理如果它不是该类型就会弹出的异常。

原始输入返回字符串,而不是int或float。尝试对从原始输入()中获得的变量进行类型转换,以便将其设置为int或float。

原始输入返回字符串,而不是int或float。尝试键入从原始输入()获得的变量,以便将其设置为int或float。

x
将始终是一个
字符串,因为它来自
原始输入

关于模块内置函数原始输入的帮助内置

原始输入(…) 原始输入([提示]->字符串

Read a string from standard input.  The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled.  The prompt string, if given,
is printed without a trailing newline before reading. (END)

x
将始终是一个
字符串,因为它来自
原始输入

关于模块内置函数原始输入的帮助内置

原始输入(…) 原始输入([提示]->字符串

Read a string from standard input.  The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled.  The prompt string, if given,
is printed without a trailing newline before reading. (END)

你说的“不承认我的if声明”是什么意思?请编辑你的问题并更具体一些。它是否发出错误消息?如果是,请在问题中包含堆栈跟踪。它是否给了您意外的输出?如果是这样,请编辑您的问题,以包含输入、预期结果以及您收到的结果。您可能希望最后一行是
print distance\u from\u zero(x)
,对吗?@MarkHildreth nope它不会发出错误消息。我编辑了这个问题。@Brionius yep yep抱歉..--你说的“不承认我的if声明”是什么意思?请编辑你的问题并更具体一些。它是否发出错误消息?如果是,请在问题中包含堆栈跟踪。它是否给了您意外的输出?如果是这样,请编辑您的问题,以包含输入、预期结果以及您收到的结果。您可能希望最后一行是
print distance\u from\u zero(x)
,对吗?@MarkHildreth nope它不会发出错误消息。我编辑了这个问题。@Brionius yep yep抱歉..--