農林漁牧網

您現在的位置是:首頁 > 農業

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

2022-03-02由 非同步社群 發表于 農業

非零因子什麼時候可以提取

讓我們開始用 Python 探索數學與科學的世界。本章將從一些簡單的問題開始,這樣你就可以逐漸瞭解如何使用 Python。首先是基礎的數學運算,隨後編寫簡單的程式來操作和理解數字。

1 基本數學運算

本書中,Python 互動介面將成為我們的朋友。啟動 Python 3 的 IDLE 介面,鍵入print(‘Hello IDLE’),然後按 Enter 鍵,在螢幕上輸出 Hello IDLE(見圖 1-1)。關於如何安裝 Python 並啟動 IDLE 的說明,請參閱附錄 A。IDLE 會按照輸入的命令執行,並將單詞輸出到螢幕上。恭喜你,你剛剛已經編寫了一個程式!

當再次看到“>>>”提示時,IDLE 已準備好接收更多的指令。

Python 可以像一個神奇的計算器那樣進行簡單的計算。只要輸入一個表示式, Python 就會對它進行計算。按 Enter 鍵後,結果會立刻顯示。

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

1-1 Python 3 的 IDLE 介面

試試看。你可以使用加法(+)和減法(−)運算子來加減數字。例如:

>>> 1 + 2 3 >>> 1 + 3。5 4。5 >>> -1 + 2。5 1。5 >>> 100 – 45 55 >>> -1。1 + 5 3。9

使用乘法運算子(*)進行乘法運算:

>>> 3 * 2 6 >>> 3。5 * 1。5 5。25

使用除法運算子(/)進行除法運算:

>>> 3 / 21。5 >>> 4 / 2 2。0

如你所見,當要求 Python 執行除法運算時,它也會返回數字的小數部分。

如果希望結果為整數形式,則應該使用向下取整除法運算子(//):

>>> 3 // 2 1

向下取整除法運算子將第一個數字除以第二個數字,然後將結果向下取整到最接近的小的整數。當其中一個數字為負數時,這將變得有趣。例如:

>>> -3 // 2 -2

最終結果是小於除法運算結果的整數(除法運算結果是−3/2 = −1。5,所以最終結果是−2)。

另一方面,如果只需要餘數,則應該使用模運算子(%):

>>> 9 % 2 1

可以使用指數運算子(**)計算數字的冪。下面的例子展示了這一點:

>>> 2 ** 2 4 >>> 2 ** 10 1024 >>> 1 ** 10 1

我們也可以使用指數運算子號計算指數小於 1 的冪。例如,n 的平方根可以表示

n2/1,立方根表示為n3/1:

>>> 8 ** (1/3) 2。0

你也可以使用括號將數學運算式組合成更復雜的表示式。Python 會按照標準的 PEMDAS 規則評估表示式的計算順序—括號、指數、乘法、除法、加法和減法。考慮以下兩個表示式,一個沒有括號,而另一個有括號:

>>> 5 + 5 * 5 30 >>> (5 + 5) * 5 50

在第一個表示式中,Python 首先計算乘法:5 乘以 5 等於 25;25 加 5 等於 30。在第二個表示式中,Python 首先計算括號中的表示式,正如我們預期的:5 加 5 等10;10 乘以 5 等於 50。

這些是在 Python 中運算元字的最基本原則。接下來我們學習如何給數字命名。

2 標籤:給數字命名

當開始設計更復雜的 Python 程式時,我們會給數字命名,有些時候是為了方便,但大部分情況是出於必要。這裡有一個簡單的例子:

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

達相同的想法的。然而,考慮到變數也是一個數學術語(例如在方程式 x +2 = 3 中的x),為了避免概念上的混淆,本書只在數學方程式和表示式語境中使用變數這個術語。

3 不同型別的數字

你可能注意到了,之前在介紹數學運算時我們使用了兩類數字—沒有小數點的數字(稱為整數)以及帶有小數點的數字(稱為浮點數)。無論數字是整數、浮點數、分數,還是羅馬數字,人類都能很容易地識別和處理它們。但是,本書編寫的一些程式只有在某些特定型別的數字上執行才有意義,所以我們經常需要編寫程式碼來檢查是否輸入了正確的數字型別。

Python 將整數和浮點數視為不同的型別。如果使用 type()函式,Python 會顯示你剛剛輸入的數字型別。例如:

>>> type(3) >>> type(3。5) >>> type(3。0)

在這裡,你可以看到 Python 將數字 3 分類為整數(型別“int”),但將 3。0 分類為浮點數(型別“float”)。我們都知道 3 和 3。0 在數學上是等同的,但是在許多情況下,Python 會以不同的方式處理這兩個數字,因為它們是兩種不同的數字型別。

我們在本章中編寫的一些程式僅在輸入為整數的情況下才能正常工作。正如我們剛剛看到的那樣,Python 不會將 1。0 或 4。0 這樣的數字識別為整數,所以如果我們想將類似的數字作為這些程式的有效輸入,我們必須把它們從浮點數轉換為整數。幸運的是,Python 內建的一個函式可以做到這點:

>>> int(3。8) 3 >>> int(3。0) 3

int()函式獲取輸入的浮點數,去掉小數點後的所有內容,返回得到的整數。float()

函式的工作原理有點兒類似,但它是執行反向的轉換:

>>> float(3) 3。0

float()獲取輸入的整數,並在整數後新增一個小數點,將其轉換為浮點數。

3。1 分數的操作

Python 也可以操作分數,但要做到這一點,我們需要使用 Python 的 fractions

模組。你可以將模組視為由他人編寫的程式,但你可以在自己的程式中使用。模組包括類、函式甚至標籤定義。它可以是 Python 標準庫的一部分,也可以從第三方位置分發。在後一種情況下,你必須先安裝該模組才能使用它。

fractions 模組是標準庫的一部分,意味著它已經安裝了。它定義了一個類Fraction,這是用來在我們的程式中輸入分數的。在使用之前,我們需要匯入(import)該模組,這是一種通知 Python 我們要使用這個模組中的類的方法。我們來看一個簡單的例子,建立一個新的標籤 f,它指代的是分數 3/4:

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

3。2 複數

{到目前為止,我們看到的數字是所謂的實數。Python 還支援複數,其中虛部由字母 j 或 J 標識(與在數學符號中常用字母 i 來表示不同)。例如,複數 2 + 3i 在 Python 中表示為 2 + 3j:

>>> a = 2 + 3j >>> type(a)

正如你所看到的,當我們對一個複數使用 type()函式時,Python 告訴我們這是一個複數型別的物件。

你還可以使用 complex()函式定義複數:

>>> a = complex(2, 3) >>> a (2 + 3j)

這裡我們將複數的實部和虛部作為兩個引數傳遞給 complex()函式,並返回一個複數。

你可以用與實數相同的方式對複數進行加減運算:

>>> b = 3 + 3j >>> a + b (5 + 6j) >>> a - b (-1 + 0j)

複數的乘法和除法也可以進行類似的操作:

>>> a * b (-3 + 15j) >>> a / b (0。8333333333333334 + 0。16666666666666666j)

但模(%)和向下取整除法(//)操作對複數無效。

可以使用 real 和 imag 屬性來提取複數的實部和虛部,如下所示:

>>> z = 2 + 3j >>> z。real 2。0 >>> z。imag 3。0

複數的共軛(conjugate)具有相同的實部,但是具有相同大小和相反符號的虛部。可以使用 conjugate()函式獲得:

>>> z。conjugate() (2 - 3j)

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

4 獲取使用者輸入

當編寫程式時,使用 input()函式接收使用者輸入是一種簡單且友好的方法。透過它我們可以編寫要求使用者輸入數字的程式,對使用者輸入的數字執行特定的操作,然

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

這兩個函式就是我們之前看到的 int()函式和 float()函式,但是這次,不是將輸入從一類數字轉換為另一類,而是將一個字串作為輸入(’1’)並返回一個數字(2或2。0)。然而,有一點要注意,int()函式不能將包含浮點數的字串轉換為整數。如果將一個具有浮點數的字串(例如“2。5”或“2。0”)輸入 int()函式中,你會收到一條錯誤訊息:

>>> int(‘2。0’) Traceback (most recent call last): File “”, line 1, in int(‘2。0’) ValueError: invalid literal for int() with base 10: ‘2。0’

這是一個異常(exception)的例子,Python 以這種方式告訴你,由於錯誤它不能繼續執行你的程式。在這種情況下,異常是 ValueError 型別(有關異常情況的簡單回顧,請參閱附錄 B)。

同樣,當你輸入一個分數如 3/4 時,Python 不能將其轉換為等價的浮點數或整數,再次引發 ValueError 異常:

>>> a = float(input()) 3/4 Traceback (most recent call last): File “”, line 1, in a=float(input()) ValueError: could not convert string to float: ‘3/4’

你可能會發現在 try…except 塊中執行轉換非常有用,這樣你就可以處理此異常並提醒使用者程式遇到無效輸入。下面我們來看看 try…except 的程式塊。

4。1 處理異常和無效輸入

{:-:}如果你不熟悉 try…except,這裡簡單介紹一下它的基本思想:如果你在一個 try…except 程式塊中執行一個或多個語句,一旦執行出錯,你的程式不會崩潰,而是輸出一個 Traceback。然後,程式的執行轉移到 except 後的塊,你可以在其中執行適當的操作,例如,輸出有用的錯誤訊息或嘗試其他操作。

下面使用 try…except 塊執行之前的轉換,並在輸入無效時輸出一條有用的錯誤訊息:

>>> try: a = float(input(‘Enter a number: ’)) except ValueError: print(‘You entered an invalid number’)

請注意,我們需要指定要處理的異常型別。在這裡,因為要處理 ValueError 異常,所以將異常型別指定為 except ValueError。

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

>>> a = int(input()) 1。0Traceback (most recent call last): File “”, line 1, in a=int(input()) ValueError: invalid literal for int() with base 10: ‘1。0’

為了避免這個錯誤,我們可以設定一個 ValueError 捕獲,就像我們之前看到的那樣。這樣一來,該程式將捕獲浮點數,而這在針對整數的程式中則不起作用。然而,它也會標記像 1。0 和 2。0 這樣的數字,Python 將這些數字視為浮點數,但是這些數字等同於整數,如果將它們作為正確的 Python 型別輸入,就可正常工作。

為了解決這個問題,我們將使用 is_integer()函式來過濾小數點後帶有效數字的任何數字(此方法僅針對 Python 中的 float 型別的數字,不適用於已經以整數形式輸入的數字)。

這裡有一個例子:

>>> 1。1。is_integer() False

在這裡,我們呼叫 is_integer()來檢查 1。1 是否為整數,結果為 False,因為 1。1 是一個浮點數。而將 1。0 作為浮點數呼叫時,檢查結果為 True:

>>> 1。0。is_integer() True

我們可以使用 is_integer()過濾掉非整數輸入,同時保留 1。0 這樣的輸入,即表示為浮點數,但等價於整數。稍後我們會看到該方法如何應用於更大的程式。

4。2 將分數和複數作為輸入

我們之前學到的 Fraction 類還能夠將字串(例如’3/4’)轉換為 Fraction 物件。

事實上,這就是我們接收分數作為輸入的方法:

>>> a = Fraction(input(‘Enter a fraction: ’)) Enter a fraction: 3/4>>> aFraction(3, 4)

嘗試輸入一個分數,如 3/0:

>>> a = Fraction(input(‘Enter a fraction: ’)) Enter a fraction: 3/0Traceback (most recent call last): File “”, line 1, in a= Fraction(input(‘Enter a fraction: ’)) File “/usr/lib64/python3。3/fractions。py”, line 167, in __new__ raise ZeroDivisionError(‘Fraction(%s, 0)’ % numerator) ZeroDivisionError: Fraction(3, 0)

ZeroDivisionError 異常資訊告訴我們(如同你已經知道的),分母為 0 的分數無效。如果你計劃讓使用者在某個程式中將分數作為輸入,最好始終捕獲此類異常。你可以這樣做:

>>> try: a= Fraction(input(‘Enter a fraction: ’)) except ZeroDivisionError: print(‘Invalid fraction’) Enter a fraction: 3/0Invalid fraction

現在,每當程式的使用者輸入分母為 0 的分數時,Python 將輸出分數無效(Invalid

fraction)的資訊。

類似地,complex()函式可以將諸如’2+3j’的字串轉換為複數:

>>> z = complex(input(‘Enter a complex number: ’)) Enter a complex number: 2+3j>>> z(2+3j)

如果你輸入的字串為’2 + 3j’(帶空格),則會導致 ValueError 錯誤資訊:

>>> z = complex(input(‘Enter a complex number: ’)) Enter a complex number: 2 + 3jTraceback (most recent call last): File “”, line 1, in z= complex(input(‘Enter a complex number: ’)) ValueError: complex() arg is a malformed string

{當將字串轉換為複數時,最好捕獲 ValueError 異常,就像我們對其他數字型別所做的那樣。

5 編寫一個數學計算程式

現在我們已經學習了一些基本的概念,我們可以將它們與 Python 的條件語句和迴圈語句結合起來,編寫一些更高階、更有用的程式。

5。1 計算整數因子

當非零整數 a 除另一個整數 b,餘數為

0

時,a 稱為 b 的因子。例如,2_是所有偶數整數的因子。我們可以編寫下面的函式來確定非零整數 a 是否是另一個整數 b _的因子:

>>> def is_factor(a, b): if b % a == 0: return True else: return False

我們使用本章前面介紹的%運算子來計算餘數。如果你發現自己在問“4 是不是1024 的因子”這類問題,可以使用 is_factor()函式得到答案:

>>> is_factor(4, 1024) True

對於任何正整數 n,如何找到其所有的正因子?對於

1

和 n 之間的每個整數,我們檢查 n 除以該整數後的餘數。如果餘數為_0,那麼這個整數就是一個因子。使用 range()函式來編寫一個程式,它將遍歷 1 到 _n 之間的每個數字。

在編寫完整的程式之前,先來看看 range()如何工作。range()函式的典型用法如下所示:

>>> for i in range(1, 4): print(i) 1 2 3

在這裡,我們設定了一個 for 迴圈,並給 range()函式傳入了兩個引數。range()函式從第一個整數引數(起始值)開始,一直到第二個整數引數(停止值)截止。在這個例子中,我們告訴 Python 輸出該範圍內的數字,從 1 開始,到 4 停止。注意,這意味著 Python 不會輸出 4,所以最後輸出的數字是停止值之前的數字 3。同時也要注意,range()函式只接收整數作為引數。

你也可以不指定 range()函式的起始值,在這種情況下,起始值被假定為 0。

例如:

>>> for i in range(5): print(i) 0 1 2 3 4

{:-:}range()函式產生的兩個連續整數之間的差稱為步長值(step value)。預設情況下,步長值為 1。要定義其他的步長值,請將其指定為第三個引數(這時,需指定起始值)。例如,下面的程式將輸出 10 以下的奇數:

>>> for i in range(1,10,2): print(i) 1 3 5 7 9

我們已經瞭解了 range()函式是如何工作的,接下來考慮一個因子計算程式。因為我們將要編寫一個相當長的程式,所以在 IDLE 編輯器裡編寫,而不是在互動式

IDLE 介面中。你可以在 IDLE 中選擇 File->New Window(或者 New File)來啟動編輯器。請注意,我們首先用三個單引號(’)來註釋程式碼,這些引號之間的文字不會被 Python 作為程式的一部分執行,它們只是我們對程式的註釋。

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

5。2 生成乘法表

考慮三個數字 a、b 和 n,其中 n 是整數,使得 a×n = b。此處我們可以說,b是 a 的第 n 個倍數。例如,4

2

的第二個倍數,1024

2

的第

512

個倍數。

一個數字的乘法表列出了該數字的所有倍數。例如,2 的乘法表是這樣的(這裡給出了 2 的前三個倍數):

2×1=2

2×2=4

2×3=6

我們的下一個程式就是為使用者輸入的任何數字生成最大到乘數 10 的乘法表。在這個程式中,我們將使用 format()函式與 print()函式來使程式的輸出看起來更友好、更可讀。下面簡要介紹一下它的工作原理。

format()函式可以插入標籤並對其進行設定,以獲得一個友好的、可讀的字串輸出。例如,假設我們有在雜貨店購買的所有水果的名稱,併為每種水果建立了單獨的標籤,現在想輸出一個連貫的句子,可以使用 format()函式:

>>> item1 = ‘apples’ >>> item2 = ‘bananas’ >>> item3 = ‘grapes’ >>> print(‘At the grocery store, I bought some {0} and {1} and {2}’。format(item1, item2, item3)) At the grocery store, I bought some apples and bananas and grapes

首先,我們建立了三個標籤(item1、item2 和 item3),每個標籤指代不同的字串(蘋果、香蕉和葡萄)。然後,在 print()函式中,我們鍵入字串,它包含了三個在大括號中的佔位符,分別為{0}、{1}和{2}。接下來是。format(),它的引數為之前建立的三個標籤,這會告訴 Python 按照列出的順序,用這些標籤儲存的值來填充這三個佔位符,因此,在 Python 的輸出文字中,第一個標籤的內容替換了{0},第二個標籤的內容替換了{1},依此類推。

{:-:}使用標籤指向我們要輸出的值並非必要,我們可以在。format()中直接鍵入值,如下例所示:

>>> print(‘Number 1: {0} Number 2: {1} ’。format(1, 3。578)) Number 1: 1 Number 2: 3。578

請注意,佔位符的數量和標籤(或鍵入值)的數量必須相等。

瞭解了 format()的工作原理之後,接下來讓我們看看生成乘法表的程式:

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

Enter a number : 55。0 x 1 = 5。0 5。0 x 2 = 10。05。0 x 3 = 15。0 5。0 x 4 = 20。0 5。0 x 5 = 25。0 5。0 x 6 = 30。0 5。0 x 7 = 35。0 5。0 x 8 = 40。0 5。0 x 9 = 45。0 5。0 x 10 = 50。0

看到這張清晰又有秩序的乘法表了嗎?這正是我們使用了。format()函式,根據可讀、統一的模板輸出的內容。

你可以使用 format()函式來進一步控制數字輸出的形式。例如,如果希望數字只有兩位小數,可以參考下面的例子:

>>> ‘{0}’。format(1。25456) ‘1。25456’ >>> ‘{0:。2f}’。format(1。25456) ‘1。25’

第一個 format 語句將我們輸入的數字原封不動地輸出。在第二個語句中,我們將佔位符修改為{0:。2f},這意味著我們只需要小數點後面的兩個數字,其中 f 表示一個浮點數。如你所見,在下一個輸出中,小數點後只有兩個數字。請注意,如果數字小數點後的位數多於你指定的位數,則該數字將四捨五入,例如:

>>>‘{0:。2f}’。format(1。25556) ‘1。26’

在這裡,1。25556 向上取整到最接近的百分位,並輸出為 1。26。如果將。2f 應用到整數上,則會在小數點後面新增零:

>>>‘{0:。2f}’。format(1)‘1。00’

新增兩個零是因為我們指定在小數點後輸出兩個數字。

5。3 轉換測量單位

國際單位制定了 7 個基本量,將它們用於匯出其他量,其他量稱為匯出量。長度(包括寬度、高度和深度)、時間、質量和溫度是 7 個基本量中的 4 個,它們各自都有一個標準的計量單位,分別為米、秒、千克和開爾文。

但是,這些標準計量單位各自也對應著多個非標準計量單位。你更熟悉溫度為 30 攝氏度或 86 華氏度,而不是 303。15 開爾文。這是否意味著 303。15 開爾文比 86 華氏度還要熱三倍?並非如此!我們不能僅比較 86 華氏度與 303。15 開爾文的數值,因為它們以不同的計量單位表示,即使它們測量的物理量是相同的(溫度)。只有當物理量的兩個數值用相同的計量單位表示時,才能比較它們。

不同計量單位之間的轉換可能會很棘手,這就是為什麼在高中數學課上經常被要求解決涉及不同計量單位之間轉換的問題。這是測試你基本數學技能的好方法。

但是,Python 也有很多數學技能,與高中生不同的是,它不會厭倦一遍又一遍地計算數字!接下來,我們將探討如何編寫程式來執行單位轉換。

我們從長度開始。在美國和英國,英寸和英里經常用於長度測量,而其他大多數國家使用釐米和千米。

1 英寸約等於 2。54 釐米,你可以使用乘法運算將英寸的計量值轉換為釐米。然後你可以將以釐米為單位的計量值除以 100,獲得以米為單位的計量值。例如,你可以將 25。5 英寸轉換成米:

>>>(25。5 * 2。54)/ 100 0。6476999999999999

另一方面,1 英里大約相當於 1。609 千米,所以如果你看到你的目的地距你 650 英里,那麼換算成國際單位的距離應該是 650×1。609 千米:

>>> 650 * 1。6091045。85

現在來看一下溫度轉換—從華氏溫度到攝氏溫度,以及反向轉換。使用以下公式將以華氏度表示的溫度轉換成攝氏度溫度:

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

這裡,我們建立了一個標籤C,值為37(人體正常溫度,單位為攝氏度)。然後,使用公式將其轉換成華氏度,結果為 98。6 華氏度。

一次又一次地編寫這些轉換公式是一件麻煩的事。我們編寫一個可以進行單位轉換的程式。該程式將提供一個選單,允許使用者選擇要執行的轉換,詢問相關輸入,然後輸出計算結果。程式如下所示:

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

5。4 求二次方程的根

假設有一個方程式,如 x + 500

79 = 10,你需要求得未知變數 x 的值,你會怎麼做?重新排列這些等式項,使常數(500、−79 和 10)在方程一側,而變數(x)在另一側,這將得到等式:x = 10−500 + 79。

根據右邊表示式的結果得到 x 的值,即方程的解,也稱為這個方程的根。在Python 中,可以執行以下操作:

>>> x = 10 - 500 + 79>>> x-411

這是一個線性方程的例子。一旦你重新排列了方程式兩邊的計算項,方程就容易計算了。另外,對於x2+2x+1=0這樣的方程式,求 x _的值通常涉及計算一個被稱為二次方程的複雜表示式。這些二次方程通常表示為ax2+bx + c =0,其中a、b 和c 都是常數。計算二次方程的根的公式如下:

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

如何使用 Python程式設計來識別整數、浮點數、分數和複數?

>>> x_1 =(-b + D)/(2 * a)>>> x_1-1。0>>> x_2 =(-b - D)/(2 * a)>>> x_2-1。0

在這個例子中,兩個根的值是相同的,如果將該值代入方程x2+2x+1,則方程的計算結果為 0。

我們的下一個程式將實現把所有這些步驟組合到 roots()函式中,該函式將 a、b和 c 的值作為引數,計算並輸出所有的根:

‘’‘Quadratic equation root calculator’‘’def roots(a,b,c): D =(b * b-4 * a * c)** 0。5 x_1 =(-b + D)/(2 * a) x_2 =(-b - D)/(2 * a) print(‘x1:{0}’。format(x_1)) print(‘x2:{0}’。format(x_2))if__name__ ==‘__main__’: a = input(‘Enter a:’) b = input(‘Enter b:’) c = input(‘Enter c:’) roots(float(a),float(b),float(c))

在這段程式中,首先,我們使用標籤 a、b 和 c 來指代二次方程中三個常數的值。然後,我們將這三個值作為引數呼叫 roots()函式(先將它們轉換為浮點數),將 a、b 和 c 代入二次方程的公式中,計算並輸出該方程的根。

當你執行程式時,首先詢問輸入 a、b 和 c 的值,這些值對應於使用者想要計算的根的二次方程。

Enter a: 1Enter b: 2Enter c: 1x1:-1。000000x2:-1。000000

嘗試求解一些 a、b、c 取不同常數值時的二次方程,程式將正確地找到根。可能你知道二次方程也可以有複數的根。例如,方程 x

2

+x+1=0__的根都是複數。以

上程式也能讓你求解這類方程。讓我們再次執行程式(常數是 a = 1、b = 1_和 c _= 1):

Enter a: 1Enter b: 1Enter c: 1x1: (-0。49999999999999994+0。8660254037844386j)x2: (-0。5-0。8660254037844386j)

以上輸出的根是複數(用 j 表示),程式可以很好地計算和顯示它們。