Python流程控制(迴圈、判斷等)
技術標籤:◍' Python '◍python
目錄
if else條件語句
import sys age = int( input("請輸入你的年齡:") ) if age < 18 : print("警告:你還未成年,不能使用該軟體!") print("未成年人應該好好學習,讀個好大學,報效祖國。") sys.exit() #sys 模組的 exit() 函式用於退出程式。 else: print("你已經成年,可以使用該軟體。") print("時間寶貴,請不要在該軟體上浪費太多時間。") print("軟體正在使用中...") 執行結果1: 請輸入你的年齡:16 警告:你還未成年,不能使用該軟體! 未成年人應該好好學習,讀個好大學,報效祖國。 執行結果2: 請輸入你的年齡:20 你已經成年,可以使用該軟體。 時間寶貴,請不要在該軟體上浪費太多時間。 軟體正在使用中...
if else對縮排的要求
if、elif 和 else 後面的程式碼塊一定要縮排,而且縮排量要大於 if、elif 和 else 本身。
age = int( input("請輸入你的年齡:") )
if age < 18 :
print("警告:你還未成年,不能使用該軟體!")
else:
print("你已經成年,可以使用該軟體。")
結果:
#語法錯誤:需要一個縮排的程式碼塊
IndentationError: expected an indented block
另外需要注意的是,不需要使用程式碼塊的地方千萬不要縮排,一旦縮排就會產生一個程式碼塊。
if語句巢狀
if 表示式 1:
if 表示式 2:
程式碼塊 1
else:
程式碼塊 2
else:
if 表示式 3:
程式碼塊 3
else:
程式碼塊 4
pass語句及其作用
pass是 Python 中的關鍵字,用來讓直譯器跳過此處,什麼都不做。
有時候程式需要佔一個位置,或者放一條語句,但又不希望這條語句做任何事情,此時就可以通過 pass 語句來實現。
age = int( input("請輸入你的年齡:") ) if age < 12 : print("嬰幼兒") elif age >= 12 and age < 18: print("青少年") elif age >= 18 and age < 30: print("成年人") elif age >= 30 and age < 50: pass else: print("老年人") print("結束————————") 結果: 請輸入你的年齡:40 結束————————
assert斷言函式
可以看做是功能縮小版的 if 語句,它用於判斷某個表示式的值,
如果值為真,則程式可以繼續往下執行;
反之,Python 直譯器會報 AssertionError 錯誤。
assert 語句的語法結構為:
assert 表示式
assert 語句的執行流程可以用 if 判斷語句表示,如下所示:
if 表示式==True:
程式繼續執行
else:
程式報 AssertionError 錯誤
與其讓程式在晚些時候崩潰,不如在錯誤條件出現時,就直接讓程式崩潰,這有利於我們對程式排錯,提高程式的健壯性。因此,assert 語句通常用於檢查使用者的輸入是否符合規定,還經常用作程式初期測試和除錯過程中的輔助工具。
print("請輸入:" ,end="")
mathmark = int(input())
#斷言數學考試分數是否位於正常範圍內
assert 0 <= mathmark <= 100
#只有當 mathmark 位於 [0,100]範圍內,程式才會繼續執行
print("數學考試分數為:",mathmark)
結果:
請輸入:1
數學考試分數為: 1
請輸入:-1
Traceback (most recent call last):
AssertionError
while迴圈語句
while 語句的語法格式如下:
while 條件表示式:
程式碼塊
列印 1~6 的所有數字,就可以使用 while 迴圈,實現程式碼如下:
# 迴圈的初始化條件
num = 1
# 當 num 小於100時,會一直執行迴圈體
while num < 7 :
print("num=", num)
# 迭代語句
num += 1
print("迴圈結束!")
結果:
num= 1
num= 2
num= 3
num= 4
num= 5
num= 6
迴圈結束!
for迴圈
常用於遍歷字串、列表、元組、字典、集合等序列型別,逐個獲取序列中的各個元素。
for 迴圈的語法格式如下:
for 迭代變數 in 字串|列表|元組|字典|集合:
程式碼塊
格式中,迭代變數用於存放從序列型別變數中讀取出來的元素,所以一般不會在迴圈中對迭代變數手動賦值;
程式碼塊指的是具有相同縮排格式的多行程式碼(和 while 一樣),由於和迴圈結構聯用,因此程式碼塊又稱為迴圈體。
add = "www,baidu.com"
#for迴圈,遍歷 add 字串
for ch in add:
print(ch,end="")
結果:
www,baidu.com
迴圈結構中else用法
無論是 while 迴圈還是 for 迴圈,其後都可以緊跟著一個 else 程式碼塊,它的作用是當迴圈條件為 False 跳出迴圈時,程式會最先執行 else 程式碼塊中的程式碼。
巢狀迴圈實現氣泡排序
array = [3,2,6,2,1,4,9]
for i in range(len(array)-1):
for j in range(len(array)-i-1):
if(array[j]>array[j+1]):
array[j],array[j+1] = array[j+1],array[j]
print(array[i])
結果:
2
2
2
3
4
6
break、continue用法
- 使用 continue 語句,可以跳過執行本次迴圈體中剩餘的程式碼,轉而執行下一次的迴圈。
- 只用 break 語句,可以完全終止當前迴圈。
各種推導式(列表推導式、字典推導式、集合推導式)
推導式comprehensions(又稱解析式),是Python的一種獨有特性。推導式是可以從一個數據序列構建另一個新的資料序列的結構體。 共有三種推導,在Python2和3中都有支援:
- 列表(list)推導式
- 字典(dict)推導式
- 集合(set)推導式
使用[]生成list
def squared(x):
return x * x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print(multiples)
結果:
[0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
使用()生成generator
import sys
multiples = (i for i in range(18) if i % 3 is 0)
print(type(multiples))
print(multiples)
結果:
<class 'generator'>
<generator object <genexpr> at 0x000001A01E92B3C8>
#生成器進行輸出
while True:
try:
print(next(multiples))
except StopIteration:
sys.exit()
結果:
0
3
6
9
12
15
大小寫key合併(字典)
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
k.lower():
mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
for k in mcase.keys()
if k.lower() in ['a','b']
}
print (mcase_frequency)
結果:
{'a': 17, 'b': 34}
快速更換key和value(字典)
mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
print (mcase_frequency)
結果:
{10: 'a', 34: 'b'}
集合推導式
squared = {x**2 for x in [1, 1, 2]}
print(squared)
結果:
{1, 4}
zip函式及用法
它可以將多個序列(列表、元組、字典、集合、字串以及 range() 區間構成的列表)“壓縮”成一個 zip 物件。
所謂“壓縮”,其實就是將這些序列中對應位置的元素重新組合,生成一個個新的元組。
zip() 函式的語法格式為:
zip(iterable, ...)
其中 iterable,... 表示多個列表、元組、字典、集合、字串,甚至還可以為 range() 區間。
my_list = [11,12,13]
my_tuple = (21,22,23)
print([x for x in zip(my_list,my_tuple)])
結果:
[(11, 21), (12, 22), (13, 23)]
my_dic = {31:2,32:4,33:5}
my_set = {41,42,43,44}
print([x for x in zip(my_dic)])
結果:
[(31,), (32,), (33,)]
my_pychar = "python"
my_shechar = "shell"
print([x for x in zip(my_pychar,my_shechar)])
結果:
[('p', 's'), ('y', 'h'), ('t', 'e'), ('h', 'l'), ('o', 'l')]
在使用 zip() 函式“壓縮”多個序列時,它會分別取各序列中第 1 個元素、第 2 個元素、... 第 n 個元素,各自組成新的元組。需要注意的是,當多個序列中元素個數不一致時,會以最短的序列為準進行壓縮。
可以通過呼叫 list() 函式將 zip() 物件強制轉換成列表。
reversed函式及用法
功能是對於給定的序列(包括列表、元組、字串以及 range(n) 區間),該函式可以返回一個逆序序列的迭代器(用於遍歷該逆序序列)。使用 reversed() 函式進行逆序操作,並不會修改原來序列中元素的順序。
reserved() 函式的語法格式如下:
reversed(seq)
其中,seq 可以是列表,元素,字串以及 range() 生成的區間列表。
#將列表進行逆序
print([x for x in reversed([1,2,3,4,5])])
結果:[5, 4, 3, 2, 1]
#將元組進行逆序
print([x for x in reversed((1,2,3,4,5))])
結果:[5, 4, 3, 2, 1]
#將字串進行逆序
print([x for x in reversed("abcdefg")])
結果:['g', 'f', 'e', 'd', 'c', 'b', 'a']
#將 range() 生成的區間列表進行逆序
print([x for x in reversed(range(10))])
結果;[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
#將列表進行逆序,還可以使用 list() 函式,將 reversed() 函式逆序返回的迭代器,直接轉換成列表。
print(list(reversed([1,2,3,4,5])))
結果:[5, 4, 3, 2, 1]
sorted函式
其功能是對序列(列表、元組、字典、集合、還包括字串)進行排序。
使用 sorted() 函式對序列進行排序, 並不會在原序列的基礎進行修改,而是會重新生成一個排好序的列表。
sorted()函式預設對序列中元素進行升序排序,通過手動將其 reverse 引數值改為 True,可實現降序排序。
還可傳入一個 key 引數,它可以接受一個函式,該函式的功能是指定 sorted() 函式按照什麼標準進行排序。
sorted() 函式的基本語法格式如下:
list = sorted(iterable, key=None, reverse=False)
其中,iterable 表示指定的序列,key 引數可以自定義排序規則;reverse 引數指定以升序(False,預設)還是降序(True)進行排序。sorted() 函式會返回一個排好序的列表。
注意,key 引數和 reverse 引數是可選引數,即可以使用,也可以忽略。
#對列表進行排序
a = [5,3,4,2,1]
print(sorted(a))
結果:[1, 2, 3, 4, 5]
#對元組進行排序
a = (5,4,3,1,2)
print(sorted(a))
結果:[1, 2, 3, 4, 5]
#字典預設按照key進行排序
a = {4:1,\
5:2,\
3:3,\
2:6,\
1:8}
print(sorted(a.items()))
結果:[(1, 8), (2, 6), (3, 3), (4, 1), (5, 2)]
#對集合進行排序
a = {1,5,3,2,4}
print(sorted(a))
結果:[1, 2, 3, 4, 5]
#對字串進行排序
a = "51423"
print(sorted(a))
結果:['1', '2', '3', '4', '5']