Python 3.x 在Python3.x中,如何读取任何数字,然后返回数字的一半?

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

我想让用户输入一个数字,可以是浮点数、整数和复数,但是如果我使用输入函数,Python3会将其视为字符串。如果我不知道用户将输入什么类型的数字,如何计算输入数字的一半?

您可以使用它来安全地解释字符串,就像它们是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”))#
您可以使用来安全地解释字符串,就像它们是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.