Python三角函数返回意外值

时间:2011-12-13 00:59:11

标签: python math trigonometry

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左右的东西? Google的计算器也是这样做的吗? 顺便说一句:这是我的python计算器

            b = input("arg1\n") #inarg1
            var = math.degrees(math.sin(b))
            print var

这个和其他触发功能是问题所在。 在大多数情况下,这只是一个简单的python计算器,但我想添加一些trig函数。

6 个答案:

答案 0 :(得分:10)

您不希望将sin()的返回值转换为度数 - 返回值不是角度。你想要将参数转换为弧度,因为math.sin()需要弧度:

>>> math.sin(math.radians(90))
1.0

答案 1 :(得分:3)

Python的sin和cos取弧度而非度数。您可以使用math.radians函数进行转换。基本上,你使用的是错误的单位。

答案 2 :(得分:3)

大多数数学函数,包括Python的数学函数,都使用radians作为trigonometric routines的度量。

比较

>>> math.sin(90)
0.8939966636005579
>>> math.sin(3.1415926535)
8.979318433952318e-11
>>> math.cos(180)
-0.5984600690578581
>>> math.cos(2*3.1415926535)
1.0
>>> 

答案 3 :(得分:2)

您正在使用学位,但sin函数需要radians(请参阅文档:help(math.sin))。 90°是/ 2。

>>> import math
>>> math.sin(math.pi/2)
1.0
>>> math.radians(90) - math.pi/2
0.0

答案 4 :(得分:2)

在调用math.sin

之前,将输入从度数转换为弧度

答案 5 :(得分:2)

        var = math.degrees(math.sin(b))

此代码执行您认为的操作。它需要sin b,然后将该答案(弧度中)从弧度转换为度数。

90弧度的sin.894。 .894弧度是51度。所以这就是你得到答案的原因,但这都是错的。

你可能想要:

        var = math.sin(math.radians(b))