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