代码将无法识别我的if语句(Python)

时间:2013-10-07 01:17:19

标签: python if-statement

代码不会识别我的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)

3 个答案:

答案 0 :(得分: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)

这使用了一种名为“duck typing”的python中流行的设计理念,其中,您只需将对象视为您希望的类型并处理异常,而不是测试对象的类型是什么。如果它不是那种类型,则弹出。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

x始终为string,因为它来自raw_input

  

模块内置

中内置函数raw_input的帮助      

的raw_input(...)       raw_input([prompt]) - >串

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)