1. 程式人生 > 其它 >Python流程控制(迴圈、判斷等)

Python流程控制(迴圈、判斷等)

技術標籤:◍' Python '◍python

目錄

if else條件語句

if else對縮排的要求

if語句巢狀

pass語句及其作用

assert斷言函式

while迴圈語句

for迴圈

迴圈結構中else用法

巢狀迴圈實現氣泡排序

break、continue用法

各種推導式(列表推導式、字典推導式、集合推導式)

使用[]生成list

使用()生成generator

大小寫key合併(字典)

快速更換key和value(字典)

集合推導式

zip函式及用法

reversed函式及用法

sorted函式


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用法

  1. 使用 continue 語句,可以跳過執行本次迴圈體中剩餘的程式碼,轉而執行下一次的迴圈。
  2. 只用 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']