【问题标题】:How Can I Put type() with if statement in python?如何在 python 中将 type() 与 if 语句放在一起?
【发布时间】:2015-06-16 13:07:05
【问题描述】:

当我尝试将 type() 与 if 语句放在一起时,我有 TypeError: a float is required

示例:

from math import *
x=input("Enter a Number: ")
if type (sqrt(x)) == int:
    print (sqrt(x))
else:
    print("There is no integer square root")

显然我不能使用x= float(x)

【问题讨论】:

  • “显然我不能使用x= float(x)”——为什么不呢?
  • 使用float.is_integer 方法来测试一个浮点数是否是一个整数。
  • 你也可以使用isinstance
  • 这里没有类型的问题。输入返回一个字符串,句点。在将其传递给 sqrt() 之前,您需要将其转换为浮点数(x = float(x) 可以正常工作)。
  • 我认为您收到了错误 TypeError: a float is required。那是因为x 是一个字符串。你不能取字符串的平方根。请注意,即使您执行sqrt(float(x)),您的 if 语句也永远不会计算为 true,因为 math.sqrt 始终返回一个浮点数。

标签: python math if-statement type-conversion typeerror


【解决方案1】:

这里有两个问题:

第一个

x=input("Enter a Number: ")

将是一个字符串,而不是一个数字,使用 int(x) 应该可以解决这个问题

第二次

if type (sqrt(x)) == int:

sqrt() 总是返回一个浮点数,你可以使用float.is_integer(),像这样:sqrt(x)).is_integer() 来检查平方根是否为整数。

最终代码:


    from math import *
    x=int(input("Enter a Number: "))
    if sqrt(x).is_integer():
        print (sqrt(x))
    else:
        print("There is no integer square root")

【讨论】:

  • 我建议sqrt(x).is_integer() 而不是float.is_integer(sqrt(x))。这里不需要 unbound 方法。
【解决方案2】:

您必须将输入字符串转换为浮点,然后将其传递给sqrt()。就 Python 而言,sqrt("5.4") 并不比sqrt("Bob") 更有意义。而x=float(x) 是进行这种转换的好方法。

这里没有类型问题:input()始终为字符串,sqrt()始终为浮点数(从不为整数)。

【讨论】:

    【解决方案3】:

    似乎你只需要一个整数而不是一个整数。要检查某项是否为整数,请进行模除以 1。

    from math import *
    x = float(input("Enter a Number: "))
    if sqrt(x) % 1 == 0:
        print(sqrt(x))
    else:
        print("There is no integer square root")
    

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2017-04-23
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多