1.首先建立一个用于计算的Cal()类,并在其中定义好储存运算结果的属性result,用于加减乘除、平方、n次方、取倒数、取百分号、清零的方法
2.定义变量ult_result作为对象,利用while True死循环进行多次运算,让用户通过数字指定运算操作符,并通过if-else语句判断用户要求的运算
3.当用户输入字符时,利用break语句跳出循环,结束计算
源代码:
#定义计算类
class Cal:
result = 0
def plus(self, num1): #加法
self.result += num1
print('=',self.result)
def minus(self, num1): #减法
self.result -= num1
print('=',self.result)
def times(self, num1): #乘法
self.result *= num1
print('=',self.result)
def devide(self, num1): #除法
try:
self.result /= num1
except:
print("MathError!") #不能除以零
self.result = 0
print('=',self.result)
def square(self, num1): #平方
self.result = pow(num1,2)
print('=',self.result)
def nth_power(self, num1, num2): #n次方
self.result = pow(num1 , num2)
print('=',self.result)
def reciprocal(self, num1): #取倒数
self.result = 1 / num1
print('=',self.result)
def percent_sign(self, num1): #百分号
self.result = num1 * 0.01
print('=',self.result)
def clear(self): #清除数据
self.result = 0
print('0')
opr = {1:'+',2:'-',3: '*',4: '÷',5: 'x²',6: 'x^n',7: '1/x',8: '%',9: 'CLEAR','p': '()'} #用户输入代号,如何立刻返回对应符号
numget1 = float(input('计算开始\n'))
ult_result = Cal()
ult_result.result = numget1
while True:
print('='*20,"\n1. +\t2. -\t3. *\n4. ÷\t5. x²\t6. x^n\n7. 1/x\t8. %\t9. CLEAR\n'p':()\n",'='*20)
try:
signget1 = int(input())
print(ult_result.result,opr[signget1])
if 1<=signget1<= 4:
numget2 = input()
if numget2 == 'p': #如果输入括号的情况
print('()')
num_emptybox = ult_result.result #将原值储存
sign_emptybox = signget1 #将原操作符储存
ult_result.result = float(input())
print('='*20,"\n1. +\t2. -\t3. *\n4. ÷\t5. x²\t6. x^n\n7. 1/x\t8. %\t9. CLEAR\n'p':()\n",'='*20)
signget1 = int(input())
print(ult_result.result,opr[signget1])
if (1<=signget1) and (signget1 <= 4):
numget2 = float(input())
if signget1 == 1 :
print(ult_result.result,'+',numget2)
ult_result.plus(numget2)
elif signget1 == 2:
print(ult_result.result,'-',numget2)
ult_result.minus(numget2)
elif signget1 == 3:
print(ult_result.result,'x',numget2)
ult_result.times(numget2)
elif signget1 == 4:
print(ult_result.result,'÷',numget2)
ult_result.devide(numget2)
elif signget1 == 5:
ult_result.square(ult_result.result)
elif signget1 == 6:
nth = float(input("n = "))
ult_result.nth_power(ult_result.result,nth)
elif signget1 == 7:
ult_result.reciprocal(ult_result.result)
elif signget1 == 8:
ult_result.percent_sign(ult_result.result)
num2_emptybox = ult_result.result ##将新值储存
ult_result.result = num_emptybox ##将原值重新调用
signget1 = sign_emptybox #将原操作符重新调用
numget2 =num2_emptybox ##将新值调用
numget2 = float(numget2)
if signget1 == 1 :
print(ult_result.result,'+',numget2)
ult_result.plus(numget2)
elif signget1 == 2:
print(ult_result.result,'-',numget2)
ult_result.minus(numget2)
elif signget1 == 3:
print(ult_result.result,'x',numget2)
ult_result.times(numget2)
elif signget1 == 4:
print(ult_result.result,'÷',numget2)
ult_result.devide(numget2)
elif signget1 == 5:
ult_result.square(ult_result.result)
elif signget1 == 6:
nth = float(input("n = "))
ult_result.nth_power(ult_result.result, nth)
elif signget1 == 7:
ult_result.reciprocal(ult_result.result)
elif signget1 == 8:
ult_result.percent_sign(ult_result.result)
elif signget1 == 9:
ult_result.clear()
continue
except :
print('计算结束')
break