Python初学者。我正在编写一个使用无限循环的程序,并允许用户输入关键术语来访问不同的工具'或者'模块'。
在其中一个'模块中,用户可以输入一个值并将其转换为二进制。我想:
据我所知,这个问题正在发生,因为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在这个帖子中的评论有解决方案
答案 0 :(得分:1)
使用例外! 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
{{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
转换为 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'>