【问题标题】:I want to know why this function return True and False not 1 and 0 (python 3)我想知道为什么这个函数返回 True 和 False 而不是 1 和 0 (python 3)
【发布时间】:2021-04-16 07:06:33
【问题描述】:

当我在函数“my_abs()”中输入 True 或 False 时,我希望结果打印 10 但此函数返回 TrueFalse

def my_abs (a):
    if isinstance(a,int) or isinstance(a,float):
        if a>=0:
            b=a     
        else:
            b=-a
    elif isinstance(a, bool):
        if a == True:
            b="1"
        else:
            b="0"
    elif isinstance(a, complex):
        r=a.real
        i=a.imag
        b=((r**2)+(i**2))**(0.5)
    else:
        b="only a number can be handled!"
    return b


print(my_abs(True))
print(my_abs(False))

【问题讨论】:

  • 布尔在 Python 中是整数。
  • 试试isinstance(True, int)
  • 尝试将第二个 elif 放在第一个 if (bool) (int, float) 的位置。因为布尔值是整数,但整数并不总是布尔值。

标签: python python-3.x function


【解决方案1】:

由于isinstance(True, int) 为True,当您将布尔值作为参数传递时,您将输入if-test 的第一部分。要获得您想要的结果,请尝试更改测试类型的顺序:

def my_abs(a):
    if isinstance(a, bool):
        if a == True:
            b = "1"
        else:
            b = "0"
    elif isinstance(a, int) or isinstance(a, float):
        if a >= 0:
            b = a
        else:
            b = -a
    elif isinstance(a, complex):
        r = a.real
        i = a.imag
        b = ((r ** 2) + (i ** 2)) ** (0.5)
    else:
        b = "only a number can be handled!"
    return b

print(my_abs(True))
print(my_abs(False))

【讨论】:

    【解决方案2】:

    Python 中的布尔值是作为整数的子类实现的,因此这就是您的第一个代码块 (它是一个整数) 正在执行的原因。

    因此,要修复它,您必须重新排列代码以处理此行为。

    def my_abs(a):
        if isinstance(a, bool):
            if a:
                b = "1"
            else:
                b = "0"
        elif isinstance(a, int) or isinstance(a, float):
            if a >= 0:
                b = a
            else:
                b = -a
        elif isinstance(a, complex):
            r = a.real
            i = a.imag
            b = ((r ** 2) + (i ** 2)) ** (0.5)
        else:
            b = "only a number can be handled!"
        return b
    
    
    print(my_abs(True))
    print(my_abs(False))
    

    谢谢:)

    【讨论】:

    • 这里没有进行类型转换。 boolTrue 一个 int 对象,无需强制转换。那是因为boolint 的子类。您可以在自己的课程中看到相同的内容,例如给定class A: passclass B(A): passisinstance(B(), A) 将返回True
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2023-01-16
    • 1970-01-01
    • 2012-01-05
    相关资源
    最近更新 更多