Python 将input()识别为str、float或int并相应地执行操作

Python 将input()识别为str、float或int并相应地执行操作,python,python-3.x,Python,Python 3.x,这里是Python初学者。我正在编写一个使用无限循环的程序,允许用户输入关键术语来访问不同的“工具”或“模块” 在其中一个“模块”中,用户可以输入一个值并将其转换为二进制。我想: 允许程序识别值是int还是a 浮点运算,然后运行将值转换为二进制的代码 允许程序识别输入的值是否为str,str显示“返回”,当前循环将退出 据我所知,当input()自动将输入的内容转换为str时,就会出现这个问题(原因是:“首先它会打印作为参数给出的字符串”) 如何让下面的代码识别输入是str、float还是int

这里是Python初学者。我正在编写一个使用无限循环的程序,允许用户输入关键术语来访问不同的“工具”或“模块”

在其中一个“模块”中,用户可以输入一个值并将其转换为二进制。我想:

  • 允许程序识别值是int还是a 浮点运算,然后运行将值转换为二进制的代码
  • 允许程序识别输入的值是否为str,str显示“返回”,当前循环将退出
  • 据我所知,当input()自动将输入的内容转换为str时,就会出现这个问题(原因是:“首先它会打印作为参数给出的字符串”)

    如何让下面的代码识别输入是str、float还是int,然后执行相关的if语句?目前,我的代码的这一部分可以接受'back'退出循环,但会将任何int或float值作为str,使程序再次提示用户输入十进制值

        #decimal to binary   
        while search == "d2b":
            dec2bin = input("\nDecimal Value: ")
            if type(dec2bin) == int:
                print("Binary Value: " + "{0:b}".format(dec2bin))
            elif type (dec2bin) == str:
                if dec2bin == "back":
                    search = 0
            elif type (dec2bin) == float:
                    #code for float to binary goes here
    
    编辑:与此线程()不同,因为在输入()上使用了列表
    E2:似乎无法使用建议的副本作为问题的解决方案。然而,Francisco在这个帖子中的一条评论给出了解决方案

    使用异常!
    int
    float
    函数在无法转换传递的值时抛出
    ValueError
    异常

    while search == "d2b":
        dec2bin = input("\nDecimal Value: ")
        try:
            dec2bin = int(dec2bin)
        except ValueError:
            pass
        else:
            print("Binary Value: " + "{0:b}".format(dec2bin))
            continue
    
        try:
            dec2bin = float(dec2bin)
        except ValueError:
            pass
        else:
            #code for float to binary goes here
            continue
    
        if dec2bin == "back":
            search = 0
    

    尝试转换的顺序很重要,因为传递给
    int
    的每个值都对
    float
    有效,传递给
    float
    的每个值都是传递给
    str

    的有效值。请使用异常!
    int
    float
    函数在无法转换传递的值时抛出
    ValueError
    异常

    while search == "d2b":
        dec2bin = input("\nDecimal Value: ")
        try:
            dec2bin = int(dec2bin)
        except ValueError:
            pass
        else:
            print("Binary Value: " + "{0:b}".format(dec2bin))
            continue
    
        try:
            dec2bin = float(dec2bin)
        except ValueError:
            pass
        else:
            #code for float to binary goes here
            continue
    
        if dec2bin == "back":
            search = 0
    
    尝试转换的顺序很重要,因为传递给
    int
    的每个值都对
    float
    有效,而传递给
    float
    的每个值都是传递给
    str

    的有效值,您可以使用并实现这一点。因此,您的代码如下所示:

    while search == "d2b":
        dec2bin = input("\nDecimal Value: ")
        if dec2bin.lstrip("-").isdigit():
            print("Binary Value: " + "{0:b}".format(int(dec2bin))) # OR, simply bin(int(dec2bin))
        elif dec2bin.isalpha():  # OR, isalnum() based on the requirement
            if dec2bin == "back":
                search = 0
        else:
            try:
                _ = float(dec2bin)
            except:
                pass
            else:
                #code for float to binary goes here
    
    这里,我使用从字符串开头删除
    -
    ,因为
    。isdigit()
    无法检查负数字符串

    有关
    str
    对象可用的方法的完整列表,请参阅。

    您可以使用和来实现此目的。因此,您的代码如下所示:

    while search == "d2b":
        dec2bin = input("\nDecimal Value: ")
        if dec2bin.lstrip("-").isdigit():
            print("Binary Value: " + "{0:b}".format(int(dec2bin))) # OR, simply bin(int(dec2bin))
        elif dec2bin.isalpha():  # OR, isalnum() based on the requirement
            if dec2bin == "back":
                search = 0
        else:
            try:
                _ = float(dec2bin)
            except:
                pass
            else:
                #code for float to binary goes here
    
    这里,我使用从字符串开头删除
    -
    ,因为
    。isdigit()
    无法检查负数字符串


    请参阅
    str
    对象可用方法的完整列表。

    使用
    ast.literal\u eval()
    可以执行类似的操作。下面是将
    input()
    str
    转换为
    str
    float
    int
    的示例代码

    import ast  
    def input_conv(strr):
       try:
          base = ast.literal_eval(strr)
          return base
       except:
          return strr
    
    >>> b = input()
    hi
    >>> input_conv(b)
    'hi'
    >>> type(input_conv(b))
    <class 'str'>
    >>> b = input()
    1
    >>> type(input_conv(b))
    <class 'int'>
    >>> b = input()
    1.222
    >>> type(input_conv(b))
    <class 'float'>
    
    导入ast
    def输入转换(strr):
    尝试:
    base=ast.literal\u eval(strr)
    返回基地
    除:
    返回strr
    >>>b=输入()
    你好
    >>>输入转换(b)
    “嗨”
    >>>类型(输入转换(b))
    >>>b=输入()
    1.
    >>>类型(输入转换(b))
    >>>b=输入()
    1.222
    >>>类型(输入转换(b))
    
    使用
    ast.literal\u eval()
    可以执行类似的操作。下面是将
    input()
    str
    转换为
    str
    float
    int
    的示例代码

    import ast  
    def input_conv(strr):
       try:
          base = ast.literal_eval(strr)
          return base
       except:
          return strr
    
    >>> b = input()
    hi
    >>> input_conv(b)
    'hi'
    >>> type(input_conv(b))
    <class 'str'>
    >>> b = input()
    1
    >>> type(input_conv(b))
    <class 'int'>
    >>> b = input()
    1.222
    >>> type(input_conv(b))
    <class 'float'>
    
    导入ast
    def输入转换(strr):
    尝试:
    base=ast.literal\u eval(strr)
    返回基地
    除:
    返回strr
    >>>b=输入()
    你好
    >>>输入转换(b)
    “嗨”
    >>>类型(输入转换(b))
    >>>b=输入()
    1.
    >>>类型(输入转换(b))
    >>>b=输入()
    1.222
    >>>类型(输入转换(b))
    
    您可以使用负片number@PadraicCunningham:更新了答案。谢谢你提醒我。我没有票数,所以不能+1,你也可以看看isdecimal做了什么;)@帕德林:我会的。但是我现在使用的机器没有安装Python 3。如果我做错了什么,请随意编辑答案。好的。我现在在另一台机器上。你是对的。使用传统的
    try/except更新了答案您可以选择否定答案number@PadraicCunningham:更新了答案。谢谢你提醒我。我没有票数,所以不能+1,你也可以看看isdecimal做了什么;)@帕德林:我会的。但是我现在使用的机器没有安装Python 3。如果我做错了什么,请随意编辑答案。好的。我现在在另一台机器上。你是对的。用传统的
    try/except更新了答案这在我的代码中似乎是正确的,谢谢。如果您不介意的话,可以用与ints类似的方式将浮点格式化为二进制吗?我现在正在用我所知道的关于格式化和获取错误的知识做一些实验。@CharlieWebb取决于您将
    float
    转换为二进制的意思,也许可以回答您的问题。因此,当前代码按照:dec2bin=input(“\nCimal Value:”)将int格式化为二进制。请尝试:dec2bin=int(dec2bin)除了ValueError:pass-else:print(“二进制值:“+”{0:b}.format(dec2bin))continue在代码的float部分末尾是否可能有类似的内容?我需要将浮点转换为str或int吗?就我自己的python知识而言,阅读您链接的线程目前有点困难——我不理解回复中的大部分代码。这在我的代码中似乎正常工作,谢谢。如果您不介意的话,可以用与ints类似的方式将浮点格式化为二进制吗?我现在正在做一些关于格式化和出错的实验。@CharlieWebb取决于您将
    float
    转换为二进制的意思,也许可以回答您的问题。因此,当前代码按照:dec2bin=input(“\nCimal Value:”)将int格式化为二进制,尝试:dec2bin=int(dec2bin)而不是Val