繁体   English   中英

当我期望它返回 true 时,isinstance 返回 False

[英]isinstance returning False when I expect it to return true

我对 Python 很陌生。 我只是在尝试一段代码,其中预期的行为是:

它检查用户输入是否是 integer,如果是,则输出它的平方根。 如果不是 integer,系统只会说它不是 integer 并且不进行任何计算。 在这里计算平方根并不重要——我知道有计算它的内置函数,我只是在练习写几行代码。

但是我遇到了两个问题

  1. 我正在尝试使用实例来检查用户输入是否真的是 integer。 问题是,即使我将 integer(比如 64)作为输入,以下检查也会返回错误。 我不知道为什么:

     number1 = input("Please enter an integer ") print(number1) result = isinstance (number1, int) print(result)
  2. 其次是 IF Else 循环。 我定义了一个 function SQUARE_ROOT(),并尝试仅在输入为 integer 时调用它。 但是,如果输入是字符串,例如“Sun””,Else 部分仍会执行并返回值错误。

    ValueError: int() 以 10 为底的无效文字:'sun'。

    我不确定这里的问题又是什么。 我确实尝试检查压痕,对于我相当缺乏经验的眼睛来说似乎并没有错

    output 一个数的平方根的函数

     #import math #print("Please enter a number") def SQUARE_ROOT(number2): #Sq_root = math.pow(int(number2),0.5) Sq_root = int(number2)**0.5 print(Sq_root) number1 = input("Please enter an integer ") print(number1) result = isinstance (number1, int) print(result) if(result == "False"): print("You have not entered an integer. the program will quit") #Print(quit) #sys.exit() else: print ("You have correctly entered an integer") SQUARE_ROOT(number1)

在此处输入图像描述

当您接受输入时,您得到的不是 integer 字符串,这就是它返回错误的原因。

number1 = int(input("Please enter an integer "))
print(number1)
result = isinstance (number1, int)
print(result)

您的 else 正在执行,因为 if 语句不正确,因为您正在将字符串与 boolean 进行比较。 为此,您必须将书籍转换为字符串或仅从 false 中删除引号。 第二件事是您必须将输入从字符串格式转换为 integer 然后尝试调用 is instance。 希望它应该工作。

您在 function 中使用int(...)但正如@buran 所说input(...)返回字符串并且您询问它是否为 int。 这就是它返回False的原因。

您可以通过在输入后添加print(type(number1))来检查。

所以基本上在Python 2.7中,我们有两种方式来接受用户的输入。

raw_input:总是返回字符串

输入:数据和它的类型得到保留。 因此,如果用户输入1234 ,则数据类型将变为int ,如果它在字符串中,则为 str,依此类推。

在此处输入图像描述

现在来到Python 3.x , function raw_input已被删除, input function 行为被它们取代。

简而言之, input function 接受并返回的所有内容都是str类型,就像raw_input在 Py2 中的工作方式一样。

在此处输入图像描述

因此,根据您的问题,解决方案是您必须在找到所需的类型后进行类型转换。 您可以借助isdigit方法来了解它是否是一个数字,而不是使用 isinstance ,一旦您将它们转换为int ,无论如何都是正确的。

number1 = input("Please enter an integer ")
if number1.isdigit():    
    print ("You have correctly entered an integer")
    SQUARE_ROOT(int(number1))
else:
    print("You have not entered an integer. the program will quit")
    #Print(quit)
    #sys.exit()

感谢大家为我指出正确的方向。 我做了更多的工作,并希望代码来处理用户可以输入 int 或 float 或字符串(错误地)的情况。 我最终想出的代码如下。 即使我是初学者,我确信这可能不是编写代码的最佳方式(我在不循环时使用),但它现在可以完成工作。 再次感谢

def SQUARE_ROOT(message):
    while True:
        try:
            number2 = float(message)      
        except ValueError:
            print("Not a number! The program will exit.")
            break
        else:
            Sq_root = float(number2)**0.5
            print("The square root of", number2, "ïs",Sq_root)
            print("Good Bye")
            break

userInput = input("PLease enter a number to get it's square root, or type exit ")

if userInput == "exit" :
    print ("Good Bye")
    
else :
    number1 = SQUARE_ROOT(userInput)   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM