跳转到内容

BOO大全/把Boo當作計算機

维基教科书,自由的教学读本
(重定向自BOO/BooAsCalculator

目錄 下一章:變數與型別


把Boo當作計算器

[编辑]

Guido van Rossum 在他的 python 書裡,以在互動 Python 提示裡輸入運算式的方式帶領人們進入 Python 的世界。這是個很好的建議,而我們最好也以同樣的方式開始學習 Boo。Boo (與 Python) 都提供了足以作為計算器的良好互動環境,這環境除了一般的四則運算之外,也可以使用十六進制與位元運算。即便你是頑固的 C++ 或 C# 開發者,Boo 提示也是很有幫助的。 Boo互動選項

>>> 2.5+2*(1 + 0.234/4)
(System.Double) 4.617
>>> 23 + 24 - 4
(System.Int32) 43
>>> 0xFF
(Int32) 255
>>> 20/3
(System.Int32) 6
>>> 20/3.0
(System.Double) 6.66666666666667

Boo 的計算是很一般的計算器運算;計算時會自動使用運算式裡可容納最多位數的型別來呈現結果。浮點運算通常以雙精度計算並且整數也會自動被轉換。

看看整數運算,明顯的會整除。

不靠好用的函數,工程計算器將無法完成。在 CLI 裡,大部分的函式庫都在 System 命名空間,而數學函式都在 Math 命名空間。使用 import 述句就可以使用這些命名空間;當然,類別也被引入,省去我們打字的麻煩。

>>> import System
>>> Math.Sin(1.4)
(System.Double) 0.98544972998846
>>> 2*Math.PI
(System.Double) 6.28318530717959
>>> import System.Math
>>> Sin(PI/2)
(System.Double) 1
>>> Min(10,20)
(System.Int32) 10
>>> Min(1.2,0.8)
(System.Double) 0.8

這些函式除了某些特定函數,如 Min 和 Max 之外,大部分都以雙精度運作。Min、Max 例外的原因是因為提供了不同數值型別的覆載函數。要看 Math (或任何類別) 裡面有什麼的話,可以使用內建函式 help:

>>> help(Math)
class Math(object):

    public static E as double

    public static PI as double

    static def Abs(value as short) as short

    static def Abs(value as sbyte) as sbyte
     .....

此外也有位元運算,這與 C 家族語言很類似。而 Convert.ToString() 在要看十六進制結果時很有用 (第二個引數表明進制)。

>>> 1 << 2
(System.Int32) 4
>>> 16 >> 1
(System.Int32) 8
>>> 0xFFFF & 0x0FF0
(System.Int32) 4080
>>> Convert.ToString(4080,16)
(System.String) 'ff0'

另外一個很好的特性是,可以在寫長串數字時,使用 _ 來適當的為數字分組。

>>> 20_000
(Int32) 20000
>>> 20_000_000.2
(Double) 20000000.2

使用者自訂函式也很容易定義:

>>> def hex(n as int):
... 	print Convert.ToString(n,16)
... 
>>> hex(0xFF << 2)
3fc

Boo (與Python) 都需要對函式主體縮排,所以在輸入 print 述句之前,先按下 tab ;要結束的話,就按下 Enter (是的,這會出現空白行)。不像 Python,Boo 通常會要求你宣告引數的型別 (請參見 函式) (譯註:事實上可以不用,我想或許是 Boo 版本問題。畢竟作者寫這文章時,是在 2005 年。)


目錄 下一章:變數與型別