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

时间:2016-10-21 20:36:51

标签: python python-3.x

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

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

  1. 允许程序识别该值是int还是 float,然后运行将值转换为二进制值的代码
  2. 允许程序识别输入的值是否为str,并且str表示' back',其中将退出当前循环。
  3. 据我所知,这个问题正在发生,因为input()会自动转换输入到str的内容(由于:http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/io.html"首先它会打印您提供的字符串作为参数" )。

    如何使下面的代码识别输入是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
    

    编辑:与此线程(Python: Analyzing input to see if its an integer, float, or string)不同,因为在那里使用了一个列表而不是input() E2:似乎无法使用建议的副本作为问题的解决方案。但是,Francisco在这个帖子中的评论有解决方案

3 个答案:

答案 0 :(得分:1)

使用例外! intfloat函数在无法转换传递的值时会抛出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 {{1}}

答案 1 :(得分:0)

您可以使用str.isalpha()str.isdigit()来实现此目的。因此,您的代码将如下:

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

在这里,我使用str.lstrip()从字符串的开头删除-,因为.isdigit()无法检查负数字符串。

有关str个对象的完整方法列表,请参阅Python 3: String Methods

答案 2 :(得分:0)

使用ast.literal_eval()可以执行类似的操作。这是将input() str转换为 strfloatint的示例代码。

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'>