python数字输入鲁棒性

为什么输入123总是显示‘输入有误’?

num =input('请输入数字:')
if type(eval(num)) in [float,complex]:
    print(eval(num)**2)
elif type(eval(num))==int:
    if '+' or '*' or 'x' in num:
        print("输入有误")
    elif num.isdecimal():
        print(eval(num) ** 2)

if '+' or '*' or 'x' in num
改为
if '+' in num or '*' in num or 'x' in num

优先级问题,你这么写,实际判断的是 '+' or '*' or ('x' in num)
'+'不是0,所以为真,那么整个or表达式就是真


 if '+' or '*' or 'x' in num:
改为
 if  '+' in num or '*' in num or 'x' in num:
这才是你实际的目标,判断num中是否有这三个字符

改成这样:

num = input('请输入数字:')
if type(eval(num)) in [float, complex]:
    print(eval(num) ** 2)
elif type(eval(num)) == int:
    if '+' in num or '*' in num or 'x' in num:
        print("输入有误")
    elif num.isdecimal():
        print(eval(num) ** 2)