2011-12-13 81 views
4
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左右?谷歌的計算器也這樣做? BTW:這是我的Python計算器Python的三角函數返回意外值

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

這一個和其他三角函數都是問題。 大部分情況下,這只是一個簡單的python計算器,但我想添加一些trig函數。

回答

3

Python的sin和cos的弧度不是度數。你可以使用math.radians函數進行轉換。基本上,你使用的是錯誤的單位。

+0

每一種語言,我知道用途弧度三角函數,無一例外。 – duffymo

+0

@duffymo,我曾經使用一個庫,曾經使用0-256 sorta度。但是,幾乎所有東西都使用弧度。 –

+0

咦?請找到它的鏈接。我編寫了Fortran,Pascal,C,C++,Java和Python - 都使用弧度。 – duffymo

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 
2

調用math.sin

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

此代碼做你認爲它之前,從角度到弧度轉換輸入。它需要的b,然後將該答案(即以弧度爲單位的而不是!)從弧度轉換爲度數。

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

你可能想:

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

我得到了0.0156031852817當我身份證明,我怎麼進入返回度? – user1080694

+0

對不起,沒有想到 – user1080694

+1

@ user1080694正弦數學上的值不是度數或弧度,它是一個周期函數,它將在-1和1之間以2 * pi的週期發生振盪。正弦的倒數可以是度數,但是在python中,math.asine函數將以弧度返回,然後可以使用數學轉換爲度數.degrees – TimothyAWiseman

10

你不想Ø轉換的返回值sin()爲度 - 返回值不是一個角。你不是要爭論轉換爲弧度,因爲math.sin()預計弧度:

>>> math.sin(math.radians(90)) 
1.0 
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 
>>>