Python的三角函数返回意外值
import math
print "python calculator"
print "calc or eval"
while 0 == 0:
check = raw_input() #(experimental evaluation or traditional calculator)
if check == "eval":
a = raw_input("operator\n") #operator
if a == "+":
b = input("arg1\n") #inarg1
c = input("arg2\n") #inarg2
z = b + c
print z
elif a == "-":
b = input("arg1\n") #inarg1
c = input("arg2") #inarg2
z = b - c
print z
elif a == "/":
b = input("arg1\n") #inarg1
c = input("arg2\n") #inarg2
z = b / c
print z
elif a == "*":
b = input("arg1\n") #inarg1
c = input("arg2]n") #inarg2
z = b * c
print z
elif a == "^":
b = input("arg1\n") #inarg1
c = input("arg2\n") #inarg2
z = b ** c
elif a == "sin":
b = input("arg1\n") #inarg1
var = math.degrees(math.sin(b))
print var
elif a == "asin":
b = input("arg1\n") #inarg1
var = math.degrees(math.asin(b))
print var
elif a == "cos":
b = input("arg1\n") #inarg1
var = math.degrees(math.cos(b))
print var
elif a == "acos":
b = input("arg1\n") #inarg1
var = math.degrees(math.acos(b))
print var
elif a == "tan":
b = input("arg1\n") #inarg1
var = math.degrees(math.tan(b))
print var
elif a == "atan":
b = input("arg1\n") #inarg1
var = math.degrees(math.atan(b))
print var
elif check == "calc" :
x = input() #takes input as expression
print x #prints expression's result
难道90度的正弦值不是1吗? 可是我的计算器显示的结果大约是51.2? 谷歌的计算器也是这样吗? 顺便说一下:这是我用Python写的计算器。
b = input("arg1\n") #inarg1
var = math.degrees(math.sin(b))
print var
问题出在这个和其他三角函数上。 大部分情况下,这只是一个简单的Python计算器,但我想添加一些三角函数。
6 个回答
3
在Python中,sin(正弦)和cos(余弦)函数使用的是弧度,而不是角度。你可以用math.radians这个函数来进行转换。简单来说,你使用的单位不对。
3
大多数数学函数,包括Python的数学函数,使用弧度作为三角函数的度量单位。
对比一下:
>>> math.sin(90)
0.8939966636005579
>>> math.sin(3.1415926535)
8.979318433952318e-11
>>> math.cos(180)
-0.5984600690578581
>>> math.cos(2*3.1415926535)
1.0
>>>
10
你不需要把sin()
的返回值转换成度数,因为返回值并不是一个角度。你应该把传入的参数转换成弧度,因为math.sin()
是需要弧度的:
>>> math.sin(math.radians(90))
1.0