Python的三角函数返回意外值

4 投票
6 回答
6136 浏览
提问于 2025-04-17 08:15
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

撰写回答