Python 3.x 在Python3.x中,如何读取任何数字,然后返回数字的一半?
我想让用户输入一个数字,可以是浮点数、整数和复数,但是如果我使用输入函数,Python3会将其视为字符串。如果我不知道用户将输入什么类型的数字,如何计算输入数字的一半?您可以使用它来安全地解释字符串,就像它们是Python文本一样:Python 3.x 在Python3.x中,如何读取任何数字,然后返回数字的一半?,python-3.x,input,Python 3.x,Input,我想让用户输入一个数字,可以是浮点数、整数和复数,但是如果我使用输入函数,Python3会将其视为字符串。如果我不知道用户将输入什么类型的数字,如何计算输入数字的一半?您可以使用它来安全地解释字符串,就像它们是Python文本一样: from ast import literal_eval print(type(literal_eval("1"))) # <class 'int'> print(type(literal_eval("1.0"))) # <class 'fl
from ast import literal_eval
print(type(literal_eval("1"))) # <class 'int'>
print(type(literal_eval("1.0"))) # <class 'float'>
print(type(literal_eval("1+1j"))) # <class 'complex'>
从ast导入文字\u评估
打印(类型(文字评估(“1”))#
打印(类型(文字评估(“1.0”))#
打印(类型(文字评估(“1+1j”))#
您可以使用来安全地解释字符串,就像它们是Python文本一样:
from ast import literal_eval
print(type(literal_eval("1"))) # <class 'int'>
print(type(literal_eval("1.0"))) # <class 'float'>
print(type(literal_eval("1+1j"))) # <class 'complex'>
从ast导入文字\u评估
打印(类型(文字评估(“1”))#
打印(类型(文字评估(“1.0”))#
打印(类型(文字评估(“1+1j”))#
我将其解析为复数,然后仅在虚部为零时打印出实部:
try:
num = complex(input('Enter something: '))
except ValueError:
print('Invalid input')
if num.imag:
print(num / 2)
else:
print(num.real / 2)
另一个选项是嵌套的try
-,除了
:
num = input('Enter something: ')
try:
print(int(num) / 2)
except ValueError:
try:
print(float(num) / 2)
except ValueError:
try:
print(complex(num) / 2)
except ValueError:
print('Invalid input')
我将其解析为复数,然后仅在虚部为零时打印出实部:
try:
num = complex(input('Enter something: '))
except ValueError:
print('Invalid input')
if num.imag:
print(num / 2)
else:
print(num.real / 2)
另一个选项是嵌套的try
-,除了
:
num = input('Enter something: ')
try:
print(int(num) / 2)
except ValueError:
try:
print(float(num) / 2)
except ValueError:
try:
print(complex(num) / 2)
except ValueError:
print('Invalid input')
字符串可以分别使用
float()
和int()
转换为浮点和整数,但复数是一个更困难的问题。对于初学者,您必须说明复数的格式,即3+4i
@Primusa我被告知复数被写成$a+bj$,其中$a,b\in\mathbb R$,在Python 3中。字符串可以分别使用float()
和int()
转换为浮点和整数,但复数是一个更困难的问题。对于初学者,您必须说明复数将采用的格式,即3+4i
@Primusa我被告知复数被写成$a+bj$,其中$a,b\in\mathbb R$,在Python 3中。是否存在复数无法解析的浮点或整数表示形式?@madpysicator这就是我将复数
放在链上的原因。只有当它不是int
或float
时,它才会将其解析为复杂。我想说的是,您可以将其解析为复杂,并完全避免所有嵌套块。@mad物理学家唯一的原因是,如果您键入一个正常的int,请说5
,它将显示2.5+0j
而不是2.5
。看起来您已经成功地处理了这个问题+1是否存在复数无法解析的浮点或整数表示?@MadPhysicast这就是为什么我将复数
放在链上。只有当它不是int
或float
时,它才会将其解析为复杂。我想说的是,您可以将其解析为复杂,并完全避免所有嵌套块。@mad物理学家唯一的原因是,如果您键入一个正常的int,请说5
,它将显示2.5+0j
而不是2.5
。看起来您已经成功地处理了这个问题+1.