【问题标题】:How to get the type of an object which data has passed by user如何获取用户已传递数据的对象的类型
【发布时间】:2019-12-16 06:38:05
【问题描述】:

我在 python 中接受用户的输入,如何知道用户传递了 int 或 string 或 float 等??

number1 = eval(sys.argv[1])
number2 = eval(sys.argv[2])

如果用户传递的输入是浮点数或整数,我想对它们求和,但如何知道用户传递的数据类型?因为用户传递的所有数据都是默认类型是字符串。

【问题讨论】:

    标签: python-3.x types user-input


    【解决方案1】:

    Python 提倡“请求宽恕,而不是许可”的方法。所有用户输入都可能是一个字符串 - 特别是如果您从 sys.argv 获取它 - 但确定这一点的最佳方法是尝试使它们成为数字(使用 try/except)然后还原如果失败,则采取不同的行为。

    num1str, num2str = sys.argv[1], sys.argv[2]
    try:
        # might as well do float, because every valid integer that can be represented in a 
        # string is also a valid float
        num1 = float(num1str)
        num2 = float(num2str)
        num3 = num1 + num2
    except ValueError:  
        # this happens if the variable cannot be converted, e.g. the user entered something
        # that cannot be interpreted as a float
        ...
    

    【讨论】:

    • “每个有效的整数......也是一个有效的浮点数”,但值得指出的是精度不同。 Python 浮点数在大约 16 位十进制数字处失去精度。以float('12345678901234567') != int('12345678901234567') 为例。
    【解决方案2】:

    有内置的方法:

    int()
    str()
    

    例如转换,如果可能的话,而type() 告诉你它是什么:

    x = "Hi there"
    print(type(x))
    
    y = 3
    print(type(y))
    y = str(y)
    print(type(y))
    

    当接收到用户输入时,你可以尝试转换它,如果成功,使用转换的结果:

    _in = input("Some input please  ")
    
    try:
        _in = int(_in)
    except:
        try:
            _in = float(_in)
        except:
            pass
    
    print(_in)
    print(type(_in))
    
    >>Some input please  3
    >>3
    >><class 'int'>
    
    >>Some input please  3.5
    >>3.5
    >><class 'float'>
    

    【讨论】:

    • 但是用户输入在python3中默认是字符串,那么如何知道用户输入的字符串值或int或float值..
    • 您可以尝试转换它,如果成功,则使用结果。我会更新我的答案。
    • 如果输入是字符串那么 ??如果没有,我一直都必须申请??
    • 嗯...是的。输入不会神奇地变成基于其内在值的字符串。你可以做我上面做的事情(当你需要一个数字作为输入时它应该工作得很好),或者你可以使用re 来匹配输入字符串和正则表达式,但这将是一样的,如果不是更复杂的话就逻辑开关而言(á la if/else、try/except 等)
    【解决方案3】:

    我们可以为此使用 eval(),

    import sys
    
    
    def main():
        number1 = eval(sys.argv[1])
        number2 = eval(sys.argv[2])
        print(number1 + number2)
    
    
    if __name__ == '__main__':
        main()
    

    当用户输入一个整数作为输入时, input() 函数返回一个字符串,但在 eval() 的情况下,它会将返回的值从字符串计算为整数,在 float 中也是如此。无需每次都检查数据类型。

    请参阅下面链接的第三个数字,

    https://towardsdatascience.com/python-eval-built-in-function-601f87db191

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2020-07-31
      • 1970-01-01
      相关资源
      最近更新 更多