Python編程和數學有什麼關係呢?Python的起源是怎樣的呢?
我們先來簡單認識一下Python,和Python交個朋友。
Python的全拼是P—Y—T—H—O—N,發音是Python,漢語解釋是蟒蛇的意思。
我們再來看Python的圖標,下圖Python的圖標,Python的圖標看上去也是蛇。
同學們可能會感到比較奇怪,Python是一門程式語言,程式語言和蟒蛇有什麼關係呢?
把程式語言和蟒蛇聯繫起來的是荷蘭人吉多·范羅蘇姆,英文讀音是Guido van Rossum,他是一名電腦程式員。
在1989年的聖誕期間,吉多休假在家,吉多不是一個可以閒得住的人。他一直在考慮如何對ABC語言進行改進,ABC語言是由荷蘭數學與計算機科學國家研究所研製的程式語言,它主要用於編程教學使用,吉多想對ABC語言進行改進,改進的語言不但能用於教學,而且可以用於應用開發。
於是他在1989年開始編寫Python語言。到1991年第一個Python解釋器誕生,吉多整整用了兩年左右的時間研發Python語言。
對外發布新的程式語言,需要給程式語言起個名稱,當時吉多迷上了英國肥皂劇《Monty Python飛行馬戲團》,他就從這個肥皂劇的名稱中選擇了Python。Monty Python是英國六人喜劇團體,他們製作的肥皂劇在七、八十年代特別受歡迎,吸引了眾多的粉絲,吉多就是其中的粉絲之一。因此,新的程式語言被吉多命名為Python,也就不足為怪了。
下圖是Monty Python飛行馬戲團的海報。
前面我們知道了Python的創始人是荷蘭人吉多·范羅蘇姆,Python語言是在ABC語言的基礎上創建的新的程式語言,由此可見Python語言本身就與數學密切相關。
我們再來看一看編程與數學的關係。
1、數值計算與編程
同學們現在接觸最多的數學知識就是四則運算,四則運算也稱為數值計算,不過同學們現在接觸的都是簡單的數值計算,很容易利用筆算或口算來完成數值計算。
複雜的數值計算包括解多元方程組、積分、微分等運算,這些複雜的數值計算,同學們在高中和大學才能接觸到。這類複雜計算有時依靠人的腦力很難計算,需要藉助於計算機並編寫計算程序才能完成,一些運算量比較大的簡單四則運算也需要藉助程序來完成運算。
下面我們來看一個隨著n的增大,運算量越來越大的四則運算。
現在我們做個簡單的乘法運算,我們先從2開始:
先做2X1運算,運算的值是2;
再做3X2X1運算,運算的值是6;
繼續做4X3X2X1運算,運算的值是24;
再做5X4X3X2X1運算,運算的值是120;
一直到nX(n-1)X(n-2)X3X2X1的運算,這裡的n是指自然數1、2、3、4、5、6、……
類似上面的運算也稱為階乘運算,階乘運算是所有小於及等於該數的自然數的積。例如自然數6的階乘運算是:
6 X 5 X 4 X 3 X 2 X 1 = 720
當n的值超過20時,依靠人力運算已經很困難了,這時就需要藉助電腦程式來完成運算了。
下面的Python代碼用於求階乘運算,factorial(n)是求階乘運算的函數,n是要求階乘的自然數, n是指自然數1、2、3、4、5、6、……。
同學們可以先不用理解這段代碼及factorial(n)函數,在後面的課程我們會詳細講述,在這裡主要是理解用編程來實現數值計算的意義。
def factorial(n):fac = 1 for i in range(1,n + 1): fac = fac*i return fac
下圖是在Python Shell窗口編寫的factorial(n)函數代碼,並利用factorial(n)函數分別計算了自然數6、10、20、100的階乘。從計算結果可以看出,20的階乘計算結果已經是天文數了,100的階乘結果有上百位數,是一個非常大、非常大的數了。可見,複雜的數值計算或運算量很大的數值計算都需要通過編寫電腦程式來完成計算。
2、數學模型與編程
同學們有沒有想過,我們為什麼要學習數學,學習數學的目的是什麼呢?
學習數學僅僅是為了認識數字,會寫會算嗎?我相信大多數同學不會贊同我的回答。我們學習數學不只是要認識數字,會寫會算,還要能通過學過的數學知識解決現實中存在的問題,將現實生活中的問題轉化為數學問題並予以解決。
這就要求對現實生活中的問題進行數學建模,並驗證模型的正確性。數學模型的實現與驗證一般都是通過計算機編程來實現。
一個完整的數學建模過程主要有三部分組成:
1、用適當的方法對實際問題進行描述;
2、採用各種數學和計算機手段求解模型;
3、驗證模型運行的正確性。
同學們來看一個簡單的數學建模案例。
問題描述:給出任意一個年份,如2019年、2016年等,判斷出該年份是否是閏年?
要解決這個問題,首先要找出年份與閏年的規律,即年份與閏年有什麼規律可遵循,然後將規律轉換為數學模型。規律已經被總結出來:一是年份可以被400整除的是閏年;二是年份被4整除但不能被100整除的是閏年。這就建立了數學模型,也就是求解模型。
有了數學模型,我們就可以利用數學模型來求解問題,也就是驗證模型的正確性。
例如,我們來判斷2016年是否是閏年,根據判斷閏年的數學模型,首先判斷2016是否能被400整除,2016不能被400整除。再判斷2016是否能被4整除,並且不能被100整除,我們發現2016既能被400整除,並且不能被100整除,因此2016是閏年。
如果每次都需要人工運算,就比較麻煩了,可以通過編寫程序來求解模型。
下面就是根據判斷閏年的數學模型編寫的Python代碼,同學們現在暫時可以先不用理解代這段代碼。
def leapyear(year):if year % 400 == 0: return "閏年" elif year % 4 == 0 and year % 100 !=0: return "閏年" return "不是閏年"
下圖是在Python Shell窗口編寫的leap(year)函數代碼,並利用leap(year)函數分別判斷2016年、2018年、2019年、2000年是否是閏年。
3、數學實驗與編程
用編程可以求解數學模型,解決現實問題。同學們也可以通過編程建立數學實驗,幫助同學們提高抽象思維和空間想像能力。
抽象能力和空間想像能力對學好數學非常重要,尤其對小學的同學們來說,是培養抽象能力和空間想像非常重要的階段。
要提高抽象能力和空間想像能力,數學實驗是很重要的方法。
例如:在我們不識數的時候,爸爸媽媽會讓我們數指頭,數蘋果、數人數等等,這就是數學實驗。通過數數我們逐漸理解了1、2、3、4、5、6等數字的概念,數字是個抽象的概念。說它抽象,是因為數字是看不見、摸不著的,雖然可以把數字的符號寫在紙上,但這個數字符號並沒有和我們所熟知的自然界的事物聯繫起來。
通過數數這個數學實驗,同學們就會把數字符號和對應的幾個蘋果、幾個手指、幾個人等聯繫起來,也就自然理解了數字的概念。
現在不少初中要學的數學知識,已經提前滲透在了小學各個年級。例如:各類平面圖形的認識、各類立體圖形的認識、四邊形的周長計算、旋轉平移等,也會在這個階段出現,這些數學知識都需要具備抽象思維和空間想像能力才能學好。
但在一些同學頭腦當中,還根本沒有建立起抽象思維和空間想像能力,這對於打好數學基礎,進而在初中乃至高中學好數學,是十分不利的。
在這種情況下,數學實驗就非常重要了。這是就需要藉助計算機編程建立數學實驗室,用圖形、簡單動畫、計算過程步驟的展現來理解前面所說的數學知識。
給同學們看一個簡單的物體平移的動畫例子,來理解數學實驗對學好數學的重要性。
笑臉當前在A點,現在讓笑臉由A點移動到B點。通過動畫,同學們很容易理解圖形平移的概念。
這種圖形的平移動畫就是圖形平移的數學實驗。
同學們學會編程後,可以通過編程實現這樣的動畫,編寫類似的數學實驗。
編程是學好數學的重要工具
同學們,編程是學好數學的一個非常重要的工具。
通過編程可以提高人的邏輯思維和抽象思維,而邏輯思維和抽象思維是學好數學的前提。
同學們在學習數學的過程中,可以通過學到的編程知識,來求解和驗證數學模型,也可以構建數學實驗,將抽象的數學知識通過動畫、圖形展現出來,在感知和抽象中架起一座橋梁,用於更好地理解數學概念。