0

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

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)
4

3 回答 3

4

raw_input总是返回一个字符串。因此,如果您键入数字 9,它不会返回整数9,而是返回字符串"9"。因此,您的测试type(d)== int or 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 中流行的一种称为“鸭子类型”的设计理念,在这种设计理念中,您无需测试以查看对象的类型,而是将对象视为您想要的任何类型并处理弹出的异常如果不是那种类型。

于 2013-10-07T01:21:19.477 回答
0

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

于 2013-10-07T01:22:26.357 回答
0

x将永远是一个string,因为它来自raw_input

关于内置函数 raw_input 模块builtin的帮助:

raw_input(...) raw_input([提示]) -> 字符串

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)
于 2013-10-07T01:22:34.017 回答