循環和判斷
1.if
- 形式
1 if condition_1: 2 statement_block_1 3 elif condition_2: 4 statement_block_2 5 else: 6 statement_block_3
-
說明
如果
condition_1
為 True 將執行statement_block_1
塊語句
如果condition_1
為False,將判斷condition_2
如果condition_2
為 True 將執行statement_block_2
塊語句
如果condition_2
為False,將執行statement_block_3
塊語句 -
舉例:
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj info = {"fuzj":"123123","jeck":"123123"} user = input("Username: ") passwd = input("Password: ") if user in info.keys() and passwd == info[user]: print("Username is correct...") print("Welcome to Login....") else: print("Username or Password is invalid...")
[具體請點擊這里](http://www.runoob.com/python3/python3-conditional-statements.html )
2.for
- 形式
for <variable> in <sequence>:
<statements>
else:
<statements>
- 舉例
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj age = 22 m = 0 for i in range(10): guess_num = int(input("Your age: ")) if m < 3: if guess_num == age: print("your are right...") break elif guess_num > age: print("too big...") else: print("too small...") else: re = input("do you want to contine: (y/n),you have %s chance " % (9-i)) if re == "y": m = 0 continue else: print("you are lower") break m += 1
[具體請點擊這里](http://www.runoob.com/python3/python3-loop.html)
3.wile
- 舉例
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj count = 0 while True: count += 1 if count > 10 and count < 15: continue if count < 20: print("fuzj",count) else: break
4.break和continue
-
作用
break:跳出當前的循環體,不在繼續后面的循環,可用在while循環和for循環中
continue:跳出當前的循環,繼續下一次循環,可用在while循環和for循環中 -
舉例:
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj count = 0 while True: count += 1 if count > 10 and count < 15: continue if count < 20: print("fuzj",count) else: break
數據類型
1.數字
數字提供了標量存儲和直接訪問,它是不可更改類型,如果變更數字的值會生成新的對象
-
數值類型
- 整型(int):在32位機器上,整數的位數為32位,取值范圍為-231~231-1,即-2147483648~2147483647在64位系統上,整數的位數為64位,取值范圍為-263~263-1,即-9223372036854775808~9223372036854775807
- 長整型(long):或長,是無限大的整數,這樣寫整數,后面跟着一個大寫或小寫的L。從python3起,取消了長整型的概念
- 浮點型(float):浮點數用來處理實數,即帶有小數的數字
- 復數(complex):由實數部分和虛數部分組成,一般形式為x+yj,其中的x是復數的實數部分,y是復數的虛數部分,這里的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
下面表說明以上概念
| int | long | float | complex |
|---|---|---|---|
| 10 | 51924361L | 0.0 | 3.14j |
| 100 | -0x19323 | 15.20 | -.6545+0J |
| -20 | 0122L | 32.3+e18 | 4.53e-7j |
-
內置函數
-
數學函數
- abs(x) 返回數字的絕對值,如abs(-10) 返回 10
- ceil(x) 返回數字的上入整數,如math.ceil(4.1) 返回 5
- cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
- exp(x) 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045
- fabs(x) 返回數字的絕對值,如math.fabs(-10) 返回10.0
- floor(x) 返回數字的下舍整數,如math.floor(4.9)返回 4
- log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
- log10(x) 返回以10為基數的x的對數,如math.log10(100)返回 2.0
- max(x1, x2,...) 返回給定參數的最大值,參數可以為序列。
- min(x1, x2,...) 返回給定參數的最小值,參數可以為序列。
- modf(x) 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。
- pow(x, y) x**y 運算后的值。
- round(x [,n]) 返回浮點數x的四舍五入值,如給出n值,則代表舍入到小數點后的位數。
- sqrt(x) 返回數字x的平方根,數字可以為負數,返回類型為實數,如math.sqrt(4)返回 2+0j
-
隨機數函數
- choice(seq) 從序列的元素中隨機挑選一個元素,比如random.choice(range(10)),從0到9中隨機挑選一個整數。
- randrange ([start,] stop [,step]) 從指定范圍內,按指定基數遞增的集合中獲取一個隨機數,基數缺省值為1
- random() 隨機生成下一個實數,它在[0,1)范圍內。
- seed([x]) 改變隨機數生成器的種子seed。如果你不了解其原理,你不必特別去設定seed,Python會幫你選擇seed。
- shuffle(lst) 將序列的所有元素隨機排序
- uniform(x, y) 隨機生成下一個實數,它在[x,y]范圍內。
-
三角函數
- acos(x) 返回x的反余弦弧度值。
- asin(x) 返回x的反正弦弧度值。
- atan(x) 返回x的反正切弧度值。
- atan2(y, x) 返回給定的 X 及 Y 坐標值的反正切值。
- cos(x) 返回x的弧度的余弦值。
- hypot(x, y) 返回歐幾里德范數 sqrt(xx + yy)。
- sin(x) 返回的x弧度的正弦值。
- tan(x) 返回x弧度的正切值。
- degrees(x) 將弧度轉換為角度,如degrees(math.pi/2) , 返回90.0
- radians(x) 將角度轉換為弧度
-
2.布爾值
只有True和False兩個值,對應的整型數字為1和0,1代表True,0代表False。正好與shell的0和1相反
* 舉例
>>> 1 > 2
False
>>> 2 > 1
True
3.字符串
-
字符串賦值變量
- 通常將字符串賦值給變量只需要將此字符串使用單引號或雙引號括起來即可 如:name =
abc
,此時已經將字符串abc賦值給了變量name, - 字符串拼接
- 通常將字符串賦值給變量只需要將此字符串使用單引號或雙引號括起來即可 如:name =
>>> print("fu" + "zj") fuzj >>> print("fu","zj") fu zj >>> print("fu""zj") fuzj
注意:字符串拼接+號會重新在內存空間中開辟一塊新的地址空間存放新的字符串;,號會中間自動加空格
-
字符串常見操作
- 移除空白/換行符 strip.()
View Code>>> a = " Hellow World " >>> a.lstrip() #移除左邊空格 'Hellow World ' >>> a.rstrip() #移除右邊空格 ' Hellow World' >>> a.strip() #移除所有空格 'Hellow World' >>> a = " Hellow World \n" #移除換行符 >>> a.strip() 'Hellow World' 分割 split.() >>> a = "1,2,3,4,5" >>> a.split(",") #按逗號分割字符串,分割后的結果為列表 ['1', '2', '3', '4', '5'] >>> a.split("3") ['1,2,', ',4,5']
- 長度 len.()
View Code>>> a = "1,2,3,4,5" >>> len(a) 9
- 索引
View Code>>> a = "1,2,3,4,5" >>> a[1] ',' >>> a[0] '1' >>> a[3] ','
- 切片
View Code>>> a = "1,2,3,4,5" >>> a[0:2] '1,' >>> a[0:4] '1,2,' >>> a[:4] '1,2,' >>> a[3:4] ',' >>> a[2:4] '2,'
-
字符串格式化輸出
- 方法
View Code>>> name = "fuzj" >>> print("Welcom %s" % name) Welcom fuzj
-
字符串格式化符號
符 號 描述 %c 格式化字符及其ASCII碼 %s 格式化字符串 %d 格式化整數 %u 格式化無符號整型 %o 格式化無符號八進制數 %x 格式化無符號十六進制數 %X 格式化無符號十六進制數(大寫) %f 格式化浮點數字,可指定小數點后的精度 %e 用科學計數法格式化浮點數 %E 作用同%e,用科學計數法格式化浮點數 %g %f和%e的簡寫 %G %f 和 %E 的簡寫 %p 用十六進制數格式化變量的地址 -
format格式化輸出
- 語法:它通過{}和:來代替% ,{}里可以是數字索引,可以是關鍵字參數,從0開始
- 示例:
View Code>>> print("hi {0},i am {1},let us go to {2}".format('fuzj','jeck','Beijing')) hi fuzj,i am jeck,let us go to Beijing >>> print("hi {name},i am {name1},let us go to {addr}".format(name='fuzj',name1='jeck',addr='Beijing')) hi fuzj,i am jeck,let us go to Beijing
-
其他常用函數
- string.replace(
原字符串
,新字符串
) 替換string中字符串 - string.center(width,
自定義字符串
) 返回一個原字符串居中,並使用自定義字符串填充至長度 width 的新字符串 - string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數
- string.find(str, beg=0, end=len(string)) 檢測 str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內,如果是返回開始的索引值,否則返回-1
- string.isalnum() 檢查字符串是否全部是字母或數字,可以同時出現字母和數字
- string.isalpha() 檢查字符串是否只包含字母,
- string.isdigit() 檢查字符串只包含數字
- string.lower() 轉換 string 中所有大寫字符為小寫.
- string.upper() 轉換 string 中的小寫字母為大寫
- string.replace(
4.運算
- 算術運算符
| 運算符 | 描述 | 實例 |
|---|---|---|
| + | 加 - 兩個對象相加 | a + b 輸出結果 30 |
| - | 減 - 得到負數或是一個數減去另一個數 | a - b 輸出結果 -10 |
| * | 乘 - 兩個數相乘或是返回一個被重復若干次的字符串 | a * b 輸出結果 200 |
| / | 除 - x除以y | b / a 輸出結果 2 |
| % | 取模 - 返回除法的余數 | b % a 輸出結果 0 |
| ** | 冪 - 返回x的y次冪 | a**b 為10的20次方, 輸出結果 100000000000000000000 |
| // | 取整除 - 返回商的整數部分 | 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0 |
-
比較運算符
運算符 描述 實例 == 等於 - 比較對象是否相等 (a == b) 返回 False。 != 不等於 - 比較兩個對象是否不相等 (a != b) 返回 true. <> 不等於 - 比較兩個對象是否不相等 (a <> b) 返回 true。這個運算符類似 != 。 > 大於 - 返回x是否大於y (a > b) 返回 False。 < 小於 - 返回x是否小於y。所有比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫。 (a < b) 返回 true。 >= 大於等於 - 返回x是否大於等於y。 (a >= b) 返回 False。 <= 小於等於 - 返回x是否小於等於y。 (a <= b) 返回 true。 -
賦值運算符
| 運算符 | 描述 | 實例 |
|---|---|---|
| = | 簡單的賦值運算符 | c = a + b 將 a + b 的運算結果賦值為 c |
| += | 加法賦值運算符 | c += a 等效於 c = c + a |
| -= | 減法賦值運算符 | c -= a 等效於 c = c - a |
| *= | 乘法賦值運算符 | c *= a 等效於 c = c * a |
| /= | 除法賦值運算符 | c /= a 等效於 c = c / a |
| %= | 取模賦值運算符 | c %= a 等效於 c = c % a |
| **= | 冪賦值運算符 | c **= a 等效於 c = c ** a |
| //= | 取整除賦值運算符 | c //= a 等效於 c = c // a |
- 邏輯運算符
| 運算符 | 邏輯表達式 | 描述 | 實例 |
|---|---|---|---|
| and | x and y | 布爾與- 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。 |
(a and b) 返回 20。 |
| or | x or y | 布爾或- 如果 x 是 True,它返回 True,否則它返回 y 的計算值。 |
(a or b) 返回 10。 |
| not | not x | 布爾非- 如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。 |
not(a and b) 返回 False |
- 成員元算符
| 運算符 | 描述 | 實例 |
|---|---|---|
| in | 如果在指定的序列中找到值返回 True,否則返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
| not in | 如果在指定的序列中沒有找到值返回 True,否則返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
- 身份運算符
| 運算符 | 描述 | 實例 |
|---|---|---|
| is | is是判斷兩個標識符是不是引用自一個對象 | x is y, 如果 id(x) 等於 id(y) , is 返回結果 1 |
| is not | is not是判斷兩個標識符是不是引用自不同對象 | x is not y, 如果 id(x) 不等於 id(y). is not 返回結果 1 |
- 位運算符

- 優先級

* 練習
>>> 1 + 2 #相加 3 >>> 10 - 2 #相減 8 >>> 10 * 2 #相乘 20 >>> 10 / 2 #相除 5.0 >>> 10 / 3 #相除,python3會保留小數點,python2只會取整數,需使用10.0 /3形式 3.3333333333333335 >>> 10 % 3 #取余數 1 >>> 10 // 3 #取商的整數部分 3 >>> "abc" == "abc" #字符串相比較 True >>> "abc" != "abc" False >>> "abc" <> "aasdbc" #python3不支持,python2可以 File "<stdin>", line 1 "abc" <> "aasdbc" ^ SyntaxError: invalid syntax >>> 1 > 2 False >>> 1< 2 True >>> 10 >= 2 True >>> 10 <= 11 True >>>
5.列表List
序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。
列表是最常用的Python數據類型,它可以作為一個方括號內的逗號分隔值出現
-
定義列表
-
手動定義
創建一個列表,只要把逗號分隔的不同的數據項使用方括號括起來即可。注意字符串要使用引號
>>> list1 = ['fuzj','jeck','123'] >>> list2 = [1,2,3,4,5] >>> list3 = ['h','s',1,2,3,4]
- 函數生成 list.()
>>> list("hollow") ['h', 'o', 'l', 'l', 'o', 'w'] >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-
列表操作
- 索引
列表使用下標來索引表中的值,索引從0開始。同時支持根據列表項來查找索引,涉及函數list.index()
View Code>>> test = ["a","b","c","d","e"] >>> test[0] #0表示第一個 'a' >>> test[1] 'b' >>> test[5] #超出下標范圍將報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range >>> test = ["a","b","c","d","e"] >>> test.index("a") #根據列表項來查找索引 0 >>> test.index("d") 3
-
切片
切片就是使用一組索引來取出兩個索引中間的所有值,切片操作符是序列名后跟一個方括號,方括號中有一對可選的數字,並用冒號分割。數是可選的,而冒號是必須的。切片操作符中的第一個數(冒號之前)表示切片開始的位置,第二個數(冒號之后)表示切片到哪里結束,第三個數(冒號之后)表示切片間隔數,即步長。如果不指定第一個數,Python就從序列首開始。如果沒有指定第二個數,則Python會停止在序列尾。注意,返回的序列從開始位置開始 ,剛好在 結束 位置之前結束。即開始位置是包含在序列切片中的,而結束位置被排斥在切片外。
最后總結為,顧頭不顧尾
View Code>>> test = ["a","b","c","d","e","f","g"] >>> test[0:5] #取第一個到第四個中間所有值 ['a', 'b', 'c', 'd', 'e'] >>> test[1:4] #取第2個到第三個中間所有值 ['b', 'c', 'd'] >>> test[1:-1] #取第2個到倒數第二個中間所有值 ['b', 'c', 'd', 'e', 'f'] >>> test[1:-2] #取第二個到倒數第三個中間所有值 ['b', 'c', 'd', 'e'] >>> test[1:] #取第二個到最后中間所有值 ['b', 'c', 'd', 'e', 'f', 'g'] >>> test[1::2] #取第二個到最后中間所有值,並且中間每隔一個打印。這又稱為步長 ['b', 'd', 'f']
- 追加
此操作是針對列表的末尾進行添加新值,涉及的函數list.append()或list.extend()
append()是直接將括號里的對象加入到列表,extend.()一般用在列表中,將列表的值加入到list中,並且不去重
View Code>>> test = ["a","b","c","d","e","f","g"] >>> test.append("hhh") #將hhh加入到test列表 >>> test ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'hhh'] >>> new = [1,2,3,4,5] >>> test.append(new) #使用append將new列表加入到test列表,發現是將整個列表作為test一個列表項 >>> test ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'hhh', [1, 2, 3, 4, 5]] >>> test.extend(new) #使用extend講new列表加入到test列表。發現是將new的列表項作為test的新的列表項 >>> test ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'hhh', [1, 2, 3, 4, 5], 1, 2, 3, 4, 5]
- 插入
此操作是在列表的任意位置插入新的列表項,涉及的函數 list.insert()
View Code>>> test ['a', 'ddddd', 'b', 'ddddd', 'c'] >>> test = ["a","b","c"] >>> test.insert(1,"ddddd") >>> test ['a', 'ddddd', 'b', 'c'] >>> test.insert(-1,"ddddd") >>> test ['a', 'ddddd', 'b', 'ddddd', 'c']
- 更新
此操作是根據索引來更新對應的列表項
View Code>>> test ['a', 'ddddd', 'b', 'ddddd', 'c'] >>> test[4]="g" >>> test ['a', 'ddddd', 'b', 'ddddd', 'g']
- 刪除
此操作是直接刪除列表項,涉及的函list.remove(),del,list.pop()
list.remove()每次只能刪除一個列表項
del可以同時刪除所有匹配的(通用函數)
list.pop() 每次刪除最后一個列表項,並打印刪除內容
View Code>>> test = ["a","b","c","d","b","b","b","d","d","d"] >>> test ['a', 'b', 'c', 'd', 'b', 'b', 'b', 'd', 'd', 'd'] >>> test.remove("d") >>> test ['a', 'b', 'c', 'b', 'b', 'b', 'd', 'd', 'd'] >>> del test[0:3] >>> test ['b', 'b', 'b', 'd', 'd', 'd'] >>> test.pop() 'd' >>> test ['b', 'b', 'b', 'd', 'd']
- 循環
可使用for循環遍歷列表,打印列表項
View Code>>> for i in test: print(i) b b b d d
- 復制
列表的復制一般為淺復制,會在內存塊中開辟新的空間,供新的列表使用,但是列表中如果某個項是一個列表或字典時,此時copy的只是一個鏈接,此鏈接還繼續指向原來的地址塊,下面腳本說明此問題
View Code#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import copy name = ['zhangsan','lisi',[1,3,4,5,6,9],2,9,0,9,7,8,8,9,4,3,2,6,7,8,9] name1 = name.copy() #name1為name的淺copy name2 = name #name2為name直接在內存塊里鏈接 name3 = copy.deepcopy(name) #name3為name的深度copy name[0] = 'fuzj' #修改name的列表項 name[2][4] = 555555555555 #修改name列表項下的列表項 print('name:',name) print('name1:',name1) print('name2:',name2) print('name3:',name3)
運行結果
View Codename: ['fuzj', 'lisi', [1, 3, 4, 5, 555555555555, 9], 2, 9, 0, 9, 7, 8, 8, 9, 4, 3, 2, 6, 7, 8, 9] name1: ['zhangsan', 'lisi', [1, 3, 4, 5, 555555555555, 9], 2, 9, 0, 9, 7, 8, 8, 9, 4, 3, 2, 6, 7, 8, 9] name2: ['fuzj', 'lisi', [1, 3, 4, 5, 555555555555, 9], 2, 9, 0, 9, 7, 8, 8, 9, 4, 3, 2, 6, 7, 8, 9] name3: ['zhangsan', 'lisi', [1, 3, 4, 5, 6, 9], 2, 9, 0, 9, 7, 8, 8, 9, 4, 3, 2, 6, 7, 8, 9]
發現,淺copy的由於內存地址塊變了。所以即使是原來list列表項發生變化,但是自己不會變,但是列表項中的列表值變了。是因為他們還指向的是同一地址塊。而深度copy是把列表項的列表的地址塊也copy了。所以不變
PS:python3才支持list.copy()函數,pyhton2不支持 -
列表常用其他函數
- list.reverse() 反向列表中元素
- list.sort([func]) 對原列表進行排序
- list.count(obj) 統計列表項在列表中出現的次數
- len(list) 顯示列表長度
6.元組tuple
元組同列表類似,但是元組的項不能改變,這個元組一旦定義好之后,就不能改變,元組使用小括號,列表使用方括號。元組創建很簡單,只需要在括號中添加元素,並使用逗號隔開即可
-
創建:
tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, 3, 4, 5 ); tup3 = "a", "b", "c", "d"; -
訪問:
同list,根據下標索引來訪問,也支持切片,分步
``` >>> test = (1,2,3,4,5,6) >>> test[0] 1 >>> test[3] 4 >>> test[0:3] (1, 2, 3) ```
- 刪除
使用del函數來刪除
del 元組名
-
其他函數
- cmp(tuple1, tuple2) 比較兩個元組元素
- len(tuple) 計算元組元素個數
7.字典dict
- 格式及創建
字典是另一種可變容器模型,且可存儲任意類型對象。
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一的,但值則不必。
值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。
- 訪問字典
訪問字典的值,一般是根據key來索引value,也可以使用get()函數來獲取
``` >>> Dict = {"a":1,"b":2,"c":3} >>> Dict["a"] 1 >>> Dict["b"] 2 >>> Dict["d"] #key不存在時將報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'd' >>> Dict.get("c") #使用get函數獲取的話,如果key不存在則返回空 1 >>> Dict.get("er") ```
-
更新字典
更新key值時,如果key存在則更新,不存在將作為新key放入字典
View Code>>> Dict["c"] = 1 >>> Dict["d"] = 100 >>> Dict {'c': 1, 'b': 2, 'd': 100, 'a': 1}
-
刪除key
使用del 函數刪除
View Code>>> Dict {'c': 1, 'b': 2, 'd': 100, 'a': 1} >>> del Dict["d"] >>> Dict {'c': 1, 'b': 2, 'a': 1}
-
其他常用函數
- dict.clear() 清空字典
- len(dict) 計算字典的長度
- dict.copy() 返回字典的淺復制
- dict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值
- dict.has_key(key)如果鍵在字典dict里返回true,否則返回false python3已經不支持,建議使用in
- dict.keys() 返回字典的所有key
- dict.update(dict2) 把dict2的k/v 更新到dict里
- dict.values() 返回字典所有values
- dict.items() 將字典的key/value 拼成元組,最后以列表形式返回總的key/values
- radiansdict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default
