課程名稱:程序設計方法學
實驗1:程序設計語言工具
時間:2015年10月21日星期三,第3、4節 地點:理工樓1#208
一、實驗目的
1、深入理解程序設計語言及其幾種常見的編程范型;
2、激發學生對編程語言的興趣;
3、培養學生的自學能力。
二、實驗內容
學習一門新的程序設計語言(不能是已經學習過的C\C#\C++\JAVA\PASCAL),通過使用該門語言編程,解決一個實際問題。
要求:
1.實驗報告中應首先詳細說明待解決的問題、你所使用的語言以及選擇的開發環境;
2.實驗報告中應附上完整的源代碼(有對應的設計圖表,如流程圖等請一並附上),以及在本地計算機上調試、運行該程序的截圖(要求截圖的結果中能體現個人的學號、姓名等信息)。
3.結合上述解題過程,簡要說明該語言的特點(如其支持的編程范型及語法特性等)和你使用該語言的心得體會。(要求500字以上)
三、實驗環境
硬件條件:微型計算機
操作系統:Windows 7 操作系統
開發環境:PyCharm (Python IDE 集成開發環境)
四、實驗步驟和結果
(一)待解決的問題描述
輸入若干學生的信息(信息包括:學生姓名、學生成績、學生性別),然后根據學生成績對學生進行排序,按成績由高到低輸出學生信息列表。
(二)解決該問題所用的語言
Python 語言(基於 Python 2.X 版本)
(三)選擇的開發環境:
PyCharm (Python IDE 集成開發環境)
(四)解題過程的實驗操作步驟
1.分析題目后所畫出的程序流程圖如下:
2.在集成開發環境“PyCharm”上的代碼實現如下:
#-*-coding:utf-8-*- # 此語句的作用是:讓py源文件里面可以有中文 class Student(object): # 自定義一個Student類,包括學號、姓名、分數、性別等信息 def __init__(self,number, name, score, sex): # 初始化Student,參數 number,name,score,sex self.number = number self.name = name self.score = score self.sex = sex def __cmp__(self, other): # 重寫比較方法,根據Student類屬性score進行比較 return cmp(self.score, other.score) def show(self): return 'number:'+self.number+'name:'+self.name+'; score:'+str(self.score)+'sex:'+self.sex def get_input(): # 獲取控制台的輸入 number = raw_input('Please input number : ') if not number: # 當學號輸入為空時,返回None return (None,None,None,None ) name = raw_input('Please input name : ') score = raw_input('Please input %s\'s score : ' % name) sex = raw_input('Please input %s\'s sex : '% name) if number and name and score and sex: return (number, name,int(score),sex) # 為方便比較,將score強制轉換為int型 else: return (None, None, None, None) def main(): s_list = [] while True: # 一直循環輸入【學生的學號、姓名、成績及性別】 number, name, score, sex = get_input() if number and name and score and sex: s = Student(number, name, score, sex) s_list.append(s) else: # 當輸入姓名或成績為空時跳出循環 break s_list.sort(reverse=True) # 對Student實體進行排序(reverse=True表示逆序排序,即從大到小排序) print("排序列表如下所示:") for i, s in enumerate(s_list): # 遍歷已經排序的實體列表,並進行顯示 print ' '.join([str(i+1), s.number, s.name, str(s.score), s.sex]) if __name__ == '__main__': # 調用主函數 main()
3.對上述代碼的相關說明
(1)在代碼首行輸入了:#-*-coding:utf-8-*- 的原因:
py文件當中是不支持中文的,即使輸入的注釋是中文也不行,為了解決這個問題,就需要把文件編碼類型改為UTF-8的類型,輸入這個代碼就可以讓PY源文件里面有中文了。而且注意要寫在所有代碼的第一行。
(2)關於函數的定義:
①關鍵字def 用於告訴Python,正在定義一個新的函數。
②類中的函數名稱兩邊有下划線(如:__init__)。這種特殊方法意味着,當創建新的對象時,該方法就會被調用,就可以把我們自己的類型變成Python的內置類型那樣了,此即提高了程序的可讀性。
③函數定義的參數列表中有自動的self,這樣當Python 在調用某個對象中的某個方法時,會自動將該對象的引用作為該方法的第一個參數傳進去,然后我們就可以在該函數中訪問該對象的實例變量了(即在相應的變量上使用點運算符)。所以,關於self 的規則就意味着,當我們在定義一個方法時,除了實際需要傳入的那些參數之外,還必須再多寫一個。相反,當我們在調用某個方法時,實際提供的參數要比該方法定義中所需的少一個才行。最重要的一點是需要將self 放在成員變量之前。
(3)Python自帶一些預定義的函數,成為內置函數(built-in),上述代碼中使用raw_input 內置函數來從鍵盤上讀取一行文本。“raw”意味着它將以字符串的形式返回用戶輸入的一切內容,哪怕有些內容看上去像是一個數字。如果希望用戶輸入一個數字,那就必須用int 或float 將得到的字符串轉換為所需的類型。
(4)s_list.sort(reverse=True) 是對Student實體進行排序(reverse=True表示逆序排序,即從大到小排序;若reverse=False則表示是順序排序,即從小到大排序)。
4.代碼執行結果截圖如下:
五、實驗結果和討論
通過分析問題,畫出了相應的流程圖,編寫代碼實現,調試運行代碼后得到的示例結果截圖如下所示:
六、總結
(一)本次實驗按時按量完成。通過實驗基本掌握了新的一門程序設計語言。
(二)本次實驗使我深入理解了程序設計語言及其幾種常見的編程范型;也、激發了我對編程語言的興趣;而且很大程度的提升了我的自學能力。
(三)Python 語言的特點:
1.Python是一種面向對象、解釋型的計算機程序設計語言。
2.Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL(GNU General Public License)協議。
3.Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。
4.Python具有豐富和強大的庫。
5.Python常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起,能夠跨平台使用。
6.Python三大優點:簡單、功能強大、支持面向對象。
7.Python支持命令式編程、面向對象程序設計、函數式編程、面向切面編程、泛型編程多種編程范式。
(四)使用Python 語言的心得體會
Python是一種簡單易學,功能強大的編程語言,它有高效率的高層數據結構,能簡單而有效地實現面向對象編程。Python簡潔的語法和對動態輸入的支持,再加上解釋性語言的本質,使得它在大多數平台上的很多領域都是一個理想的腳本語言,特別適用於快速的應用程序開發。
首先Python 語言是一門腳本語言。Python在設計上堅持了清晰划一的風格,簡潔優雅,沒有了大括號,沒有了分號,使得Python變得非常的整潔。而且它是一門易讀、易維護,可移植性非常好,可以在linux、windows、蘋果等多種操作系統上運行,並且被大量用戶所歡迎的、用途廣泛的語言。Python的作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。這就是Python給我的有很嚴格的縮進規則的感覺。
其次Python 語言是一門動態語言。在命令行下面輸入一個1+1,回車之后就能給個2的結果。不要編譯連接等步驟,一邊寫代碼一邊就可以有結果。不過在此我更是覺得Python語言或許更適合作為一門入門語言。首先從語法上講,Python語言比現在很多作為第一編程語言 (C/C++、Visual Basic等)要簡單很多。其次,這種解釋語言的機制,更能讓我們這些初學者體驗到學習成果,不需要了解很多東西,也能編出個小程序來,這個過程比其他語言要快和簡單很多。再次,從我們自學的角度來講,搭建Python的基礎開發環境也很簡單,只要安裝一個十幾兆的程序,就得到了一個命令行工具,一個簡單的GUI的IDEL,還有其他文檔等,這樣就不必把時間太多用在開發工具上了,它不像學習C++等這些語言還要去逐步熟悉Visual C++等工具。此外,還有一點就是Python的學習很有彈性,我稍微學一點就能做點東西,而想要深入研究仍然有無窮的方向可以選擇,因為Python的應用范圍也是很廣闊。
最后,Python 是強類型的。為變量指定數據類型稱為“強類型”。Python有一個統一的、明確的、強大的類型系統,比Java的類型系統更強,而且Python的這種強類型是屬於動態型的強類型。
真正的學習其實是在自己寫應用腳本或程序的時候,在寫的時候肯定會有不明白的東西,這就需要去網上查資料,一來二去就明白了。學習Python語言的過程中查閱了不少線上線下的資料,遇到不會的東西,通過自己先查資料自己解決,這樣印象深刻,漸漸總結經驗,提高編程可復用性。