一、列表
1.創建一個文件birthday.py,假設你要祝某人生日快樂!首先將年齡存儲在變量age中,將姓名存儲在變量name中,讓程序輸出類似“阿明,23歲生日快樂!”
例如:假設你要祝某人生日快樂,可能會編寫類似於下面的代碼
然而,會輸出什么呢?
這是一個類型錯誤,Python發現你使用了一個值為整數(int)的變量,但是它不知道這個變量表示的是數值23,還是字符2和3。所以像這樣在字符串中使用整數時,需要顯示的指出你希望python將這個整數用作字符串。使用函數str():
2.1 列表簡介[5分鍾]
列表由一系列按特定順序排列的元素組成。
在python中,用方括號來表示列表,用逗號來分隔其中的元素。使用索引來訪問列表中的元素。【演示】
2.2修改添加和刪除[30分鍾]
修改:直接修改
添加:a. 在列表末尾添加元素:films.append(‘尋夢環游記’)
b. 在列表中插入元素:films.insert(0,’功夫熊貓’)
刪除:a. 根據要刪除的元素在列表中的索引:del films[0]或a=films.pop(0)
b. 根據值刪除元素:films.remove(‘海底總動員’)
² 注意:remove方法,如果列表中有相同的值,只刪除第一個。
列表排序:films.sort()
列表反轉:films.reverse()
列表長度:len(films)
【小練習】:想出5個你渴望去旅游的地方,將它們存儲在一個列表中,練習剛才講過的一些列表方法。
2.3 使用for循環遍歷列表[10分鍾]
我們要顯示列表中所有元素的值,逐個使用print語句,增加一個列表項,增加一個print語句【演示】,但是如果列表項再增加100個?需要迭代。
in,冒號,縮進
一些錯誤:忘記縮進,不必要的縮進,遺漏冒號【演示】
2.4數值列表range[10分鍾]
Python函數range()讓你能夠輕松的生成一系列的數字,經常和for一起使用。例如:,運行,只打印1~4,
還可以使用range()函數直接生成數值列表,例如:
,還可以指定步長,例如:,這是打印十以內的奇數。
【試一試】如果打印十以內的偶數怎么寫?
numbers = list(range(0,11,2))
print(numbers)
2.5列表解析[10分鍾]
列表解析(列表生成式)可以用來快速生成符合某種規則的列表,例如:,要使用這種語法:
首先,指定一個描述性的列表名,如squares;
然后,指定一個左方括號,並定義一個表達式,用於生成你要存儲到列表中的值;
接下來,編寫一個for循環,用於給表達式提供值,再加上右方括號。
【試一試】使用列表解析,生成一個包含前10個整數的立方的列表
cubic = [value**3 for value in range(1,11)]
print(cubic)
2.6 切片[10分鍾]
切片,可以獲取列表中的任意部分元素,例如,有一個運動隊成員的列表:
【試一試】創建一個從0~99的列表,並使用切片分別獲取:前10個數,后10個數,20~30之間的數,前20個數每隔3個取一個,所有數每隔5個取一個。
a[:10]
a[-10:]
a[20:30]
a[:20:3]
a[:20:5]
二、字典、字符串等
1. 上次課內容回顧[10分鍾]
課堂作業:1.已知a = [1,2,3,4,5,333,11,44],輸出下面的結果:[4,5,333]
2. 有下面2個列表:a = [1,99,33,44,55,22] ,b = [11,33,54]
輸出結果:[1,2,99,33,44,55,22,(11,33,54)]
[1,2,99,33,101,44,55,22]
a.insert(1,2)
b = tuple(b)
a.append(b)
print(a)
a.pop(7)
a.insert(4,101)
print(a)
3.用列表推導式生成100內的大於20的偶數
a= [i for i in range(20,101,2)]
print(a)
2. 課程知識點講解
2.1元組[5分鍾]
元組與列表一樣,也是一種序列,唯一的不同是元組不能修改,是不可變的。
在python中,用圓括號來表示元組。
創建一個普通元組:
創建空元組:
創建只包含一個值的元組: 【注意】必須加逗號
list函數和tuple函數
功能:以一個序列為參數,把其轉換為列表(元組)
2.2字典和集合[20分鍾]
字典:
字典是Python中唯一內建的映射類型,key-value,鍵可以是數字、字符串甚至是元組。
我們看一本書,可以選擇從頭到尾的順序閱讀,也可以快速的翻到某一頁。所以,使用字典的目的,是為了可以通過輕松查找某個特定的詞語(鍵),從而找到它的值。例如:
① 表示一個游戲棋盤的狀態,每個鍵都是由坐標組成的元組,值就是0或1,代表有無棋子
② 存儲文件的修改時間,文件名作為鍵,時間作為值
③ 電話簿,姓名作為鍵,電話號碼作為值
字典的創建方法
1.直接創建:
2.通過dict函數,通過其他字典或鍵值對的序列創建
基本的字典操作
① len(d)返回字典中項的數量
② d[key]返回關聯到鍵上的值
③ d[key]=value,將鍵對應的值改為value
④ deld[key]刪除該項
⑤ keyin d,檢查字典中是否含鍵為key的項
集合:
遍歷字典:
2.3 字符串[20分鍾]
所有標准的序列操作都可以應用於字符串(索引,分片,乘法,判斷成員資格,求長度,取最大值和最小值)。但是字符串是不可變的。
2.4 while循環[5分鍾]
For循環是根據次數循環,while循環是根據狀態循環。我們怎么把次數變成狀態?【提問】,使用一個計數標識。
但是,代碼變復雜了,所以,在迭代處理列表的時候,我們優先使用for循環語句。For循環會負責從列表起始位置開始,一直處理到列表末尾,不會出現“大小差1”錯誤。
2.5 if語句[15分鍾]
分支語句語法:
if 條件表達式1:
語句塊1
elif 條件表達式2:
語句塊2
else:
語句塊3
【注意】下列值作為布爾表達式時,會被解釋器看作False:
False,None,0,“”,(),[ ],{}
其他的一切都被解釋為True
隨着程序變的復雜,我們需要復用代碼,並且使程序盡可能的結構清晰。定義成函數。
三、函數
1. 小練習[20分鍾]
編寫一個函數請統計某個字符串中每個字母的出現次數(忽略大小寫,a與A是同一個字母),並輸出成一個字典。 例s=‘asdfWEfewaWAAa’ 輸出為{'a': 5, 's': 1, 'd': 1, 'f': 2, 'w': 3, 'e': 2}
2. 課程知識點講解
2.1 返回值[10分鍾]
編寫一個函數changeToKg(lb)來計算重量的單位轉換。1磅=0.45359237千克。保留小數點后2位。【學生練習】
還可以返回多個值。
使用return語句,函數可以返回一個或多個值
例:
返回多個值,實際上是返回了一個元組,序列解包
2.2位置參數[15分鍾]
Python的函數定義非常簡單,但靈活性卻非常大。這個靈活性體現在參數的多種形式上,除了普通參數之外,還有關鍵字參數、默認值參數、傳遞任意數量參數。
2.3 關鍵字參數[5分鍾]
如果參數非常多的話,記位置很容易記錯,可以使用關鍵字參數
【注意】一旦使用關鍵字參數,就所有的參數都同時指明關鍵字,否則會報錯
2.4 默認值[5分鍾]
編寫函數時,可給每個參數指定默認值,在調用函數中可以省略相應得參數。例如,如果你發現調用describe_pet()時,描述的都是狗,就可將形參animal_type的默認值設置為“狗”,這樣,調用該函數來描述狗時,就可以省略animal_type這個參數。
2.5可變參數[5分鍾]
在Python函數中,還可以定義可變參數。顧名思義,可變參數就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個。
我們以數學題為例子,給定一組數字a,b,c……,請計算a2 + b2 + c2 + ……。
要定義出這個函數,我們必須確定輸入的參數。由於參數個數不確定,我們首先想到可以把a,b,c……作為一個list或tuple傳進來,這樣,函數可以定義如下:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
2.6可變關鍵字參數[10分鍾]
有時候,需要接受任意數量的參數,但預先不知道傳遞給函數的會是什么樣的信息。比如,創建新用戶時。
【注意】:參數組合使用時,參數定義的順序必須是:必選參數、默認參數、可變參數、可變關鍵字參數。
四、模塊
3. 小練習[10分鍾]
和老師一起完成一個小程序:
說明:字符串是不可變的,列表是可變的,當將列表等可變數據作為函數的參數時,在函數中對其做的修改是永久性的。為了避免這種情況,通常需要創建一個列表的副本,去調用函數。
4. 課程知識點講解
2.1 模塊[20分鍾]
隨着你的程序變得越來越長,你可能想要將它分割成幾個更易於維護的文件。或者,你也可能想在不同的程序中使用順手的函數,而不是把代碼在它們之間中拷來拷去。
為了滿足這些需要,Python提供了一個方法可以從文件中獲取定義,這樣的文件被稱為模塊;模塊中的定義可以導入到另一個模塊中。
模塊,在Python可理解為一個.py文件。文件名就是模塊名,模塊的模塊名(做為一個字符串)可以由全局變量 __name__ 得到。
例如:你可以用自己慣用的文件編輯器在當前目錄下創建一個叫 fibo.py 的文件,錄入如下內容:
現在進入Python解釋器並使用以下命令導入這個模塊:
這樣做不會直接把 fibo 中的函數導入當前的語義表;它只是引入了模塊名 fibo 。你可以通過模塊名按如下方式訪問這個函數:
如果打算頻繁使用一個函數,你可以將它賦予一個本地變量:
2.2 導入模塊[15分鍾]
模塊可以導入其他的模塊。 一個(好的)習慣是將所有的 import 語句放在模塊的開始(或者是腳本)。import 語句的一個變體直接從被導入的模塊中導入命名到本模塊的語義表中。例如:
還可以使用as給函數或模塊指定別名
from fibo import fib as f
import fibo as f
或者導入模塊中的所有定義。需要注意的是在實踐中往往不鼓勵從一個模塊或包中使用 * 導入所有,因為這樣會讓代碼變得很難讀。
2.3 作為腳本來執行模塊[10分鍾]
通常,我們會在模塊中添加類似下面的代碼:
就可以讓此文件像作為模塊導入時一樣作為腳本執行。
如果模塊被導入,不會執行這段代碼:
這通常用來為模塊提供一個便於測試的用戶接口。
2.4 內建模塊[10分鍾]
查看python文檔,build-in-function和內建模塊
sys模塊:
datetime模塊:
2.5 模塊的搜索路徑[5分鍾]
內建模塊,我們是可以隨時隨地使用的,我們自己編寫的模塊如果使用,就需要和主程序放在同一個目錄中。那么,解釋器是根據什么去尋找模塊的呢?
實際上,解釋器由 sys.path 變量指定的路徑目錄搜索模塊,該變量初始化時默認包含了輸入腳本(或者當前目錄), PYTHONPATH 和安裝目錄。
① 程序的根目錄
② PYTHONPATH環境變量設置的目錄
③ 標准庫的目錄
【注意】自己創建模塊時要注意命名,不能和Python自帶的模塊名稱沖突。例如,系統自帶了sys模塊,自己的模塊就不可命名為sys.py,否則將無法導入系統自帶的sys模塊。
如果我們要添加自己的搜索目錄,有兩種方法:
一是直接修改sys.path,添加要搜索的目錄:
第二種方法是設置環境變量PYTHONPATH,該環境變量的內容會被自動添加到模塊搜索路徑中。
2.6 包[10分鍾]
使用模塊可以避免函數名和變量名沖突。相同名字的函數和變量可以分別存在不同的模塊中。但是,如果模塊名沖突了,怎么辦?
為了避免模塊名沖突,Python又引入了按目錄來組織模塊的方法,稱為包(Package)。
包是由一系列模塊組成的集合。當不同作的模塊進行按文件夾分類后再組成一個整體的庫,可以稱為包。為了讓Python將目錄當做內容包,目錄中必須包含__init__.py文件,用於標識當前文件夾是一個包。最簡單的情況下,只需要一個空的__init__.py文件即可。
執行 from package import *時,如果包中的__init__.py 代碼定義了一個名為__all__ 的列表,就會按照列表中給出的模塊名進行導入。
5. 安裝第三方模塊[10分鍾]
安裝第三方模塊,可以通過包管理工具pip完成。第三方庫都會在Python官方的pypi.python.org網站注冊,要安裝一個第三方庫,必須先知道該庫的名稱。
(1)在命令行下,運行:pip install libname
或者,可以下載安裝包之后離線安裝,安裝包一般以whl為后綴名,方法是:pip install libpath
(2)源文件安裝:如果下載下來的安裝包為帶有源文件的壓縮包,解壓之后,運行setup.py進行安裝,方法是:命令行切換到安裝包中setup.py文件所在的目錄,執行 python setup.py install
(3)運行安裝包:有些類庫提供了雙擊運行直接安裝的安裝包,比如python連接mysql數據庫的驅動 mysql-connector-python,這些安裝包的后綴名為msi或者exe。下載下來之后,雙擊運行之后就安裝好了,前提是要根據python的版本及windows的位數下載對應的安裝包,否則安裝過程會報錯或者直接提示無法安裝。
(4)使用Anaconda
【Matplotlib小例子】:np.linspace(0, 2 * np.pi, 50) 這段代碼將會生成一個包含 50 個元素的數組,這 50 個元素均勻的分布在 [0, 2pi] 的區間上。
五、文件和異常處理
2.1 小練習[10分鍾]
我們先看一段程序:
Print(‘Hello,’+name+‘,your phoneNumber is ’+phone+‘!’)
這段程序中使用了我們之前學過的輸入輸出方法,輸入:通過鍵盤讀入數據,輸出:通過終端窗口打印結果。但是這段代碼,使用了一種新的格式化輸字符串方式,也是python官方推薦的格式化方法。格式化字符串的函數str.format(),此函數可以快速處理各種字符串。具體使用方法可以參考:https://www.cnblogs.com/gide/p/6955895.html
雖然本文並非原創,但是我想要達到的目的是讓這些重要的復習點提供給大家讓我們一起更好的學習Python這門語言。
————————————————
版權聲明:本文為CSDN博主「zoe9698」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zoe9698/article/details/80777802