用python做计算器(高级版)
刚刚闲的不得了,又把计算器升级了
下载库
使用windows带的cmd,用win+打开,输入cmd,再输入pip install sympy
加载库
import sympy
新增功能
if(opeSym != "+" and opeSym != "-" and opeSym != "*" and opeSym != "/" and opeSym != "**" and opeSym != "//" and opeSym != "sqrt" and opeSym != "log" and opeSym != "factorial"):
factorial是阶乘,4的阶乘是4*3*2*1,写作4!
print直接输出结果
print(float(num1) + float(num2))
print()函数里面不仅可以写入string类型,还可以直接写入算式,例如print(x+y)等
为什么要用sympy而不是math
在精确值上面,sympy带来的精确值远比math高。如图所示,在计算根号8乘根号8的时候,math库会给出大于8的答案,这个答案很明显是错的。但是sympy库却给出了正确的答案,所以在计算数学的时候,个人更推荐sympy。
把程序合起来
import sympy
while(1):
while(1):
print("--------------------")
total = 0.0
num1 = input ("Enter the first number: ")
if("." in num1):
pass
elif(num1.isalnum() == False):
print("Invalid entering, please enter again.")
break
opeSym = input ("Enter your operation: ")
if(opeSym != "+" and opeSym != "-" and opeSym != "*" and opeSym != "/" and opeSym != "**" and opeSym != "//" and opeSym != "sqrt" and opeSym != "log" and opeSym != "factorial"):
print("Invalid entering, please enter again.")
break
num2 = input ("Enter the second number: ")
if("." in num2):
pass
if(opeSym == "factorial"):
pass
elif(num2.isalnum() == False):
print("Invalid entering, please enter again.")
break
if(opeSym == "+"):
print(float(num1) + float(num2))
elif(opeSym == "-"):
print(float(num1) - float(num2))
elif(opeSym == "*"):
print(float(num1) * float(num2))
elif(opeSym == "/"):
print(float(num1)/float(num2))
elif(opeSym == "**"):
print(float(num1)**float(num2))
elif(opeSym == "//"):
print(float(num1)//float(num2))
elif(opeSym == "sqrt"):
print(sympy.root(float(num1),float(num2)))
elif(opeSym == "log"):
print(sympy.log(float(num1),float(num2)))
elif(opeSym == "factorial"):
print(sympy.factorial(float(num1)))
效果
虽然也会出现一堆的0,但是这是因为我用的是float型,所以会以这种形式出现。