python在字符串中不使用eval()完成一个简单的数值运算
数值运算
描述
获得用户输入的一个字符串,格式如下:
M OP N
其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)
根据OP,输出M OP N的运算结果,统一保存小数点后2位。
注意:M和OP、OP和N之间可以存在多个空格,不能使用eval(),不考虑输入错误情况。
输入输出示例
输入 输出
示例1 10 + 100
示例2 1 / 20
示例3 10/99
示例4 -0.1 * 999
示例5 0x99 -0.00001
、
、
、
、
代码仅供参考,本人小白一个,第一次发,大家不喜勿喷
print("请输入一个类似1+2的计算式:",end="")
wh=input()
#全局变量count用global引用
count=0 #变量count用来记录字符串中运算符的位置,如:3+ 2中count就记录‘+’的位置
def calculate(a,b,wh):
i=wh[count]
if i =='+':
print("{:.2f}".format(a+b))
if i =='-':
print("{:.2f}".format(a-b))
if i=='*':
print("{:.2f}".format(a*b))
if i=='/':
print("{:.2f}".format(a/b))
def out_a(wh):
global count
xbit=0 #16进制数
nint=0 #nint小数
for i in wh:
if i in ['x','X']: #判断是否是16进制数
xbit=1
if i in ['.']: #判断是否是小数
nint=1
if i in ['+','-','*','/']:
if count != 0: #在第一个位置之外找到符号就退出循环,如:-3 +2读第一个'-'时不退出循环
break
count=count+1
else:
count=count+1
if xbit==1:
j=int(wh[0:count],16)
return j
if nint==1:
j=float(wh[0:count])
return j
else:
j=int(wh[0:count])
return j
def out_b(wh):
global count
xbit=0 #16进制数
nint=0 #nint小数
for i in wh[count+1:]:
if i in ['.']:
nint=1
if i in ['x','X']:
xbit=1
if xbit==1:
j=int(wh[count+1:],16) #count是一个全局变量,我们找到第一个数时count指向式子的运算符,第二个数在它后面,所以wh[count+1:]表示第二个数
return j
if nint==1:
j=float(wh[count+1:])
return j
else:
j=int(wh[count+1:])
return j
a=out_a(wh) #获取第一个数
b=out_b(wh) #获取第二个数
print("a=",a)
print("b=",b)
print("计算结果是:",end="")
calculate(a,b,wh) #获取结果