1、流程控制基本概念
預設情況下,程式的執行流程是這樣的:執行程式後,系統會按編寫好的程式碼,從上至下順序執行程式中的每一行程式碼。但是這樣並不能滿足我們所有的開發需求,實際開發中,我們需要根據不同的條件可以改變程式的執行順序,也可以讓指定的程式反覆執行多次,最終來實現我們要完成的功能。
為了方便我們控制程式的執行流程,程式語言一般都會有基本的流程控制結構。
流程控制語句的基本控制結構有三種:順序結構、選擇結構、迴圈結構。
順序結構說明:
當程式執行的時候,會從程式碼的第一行開始往下一行一行的執行,直到整個程式碼全部執行完成。在此過程中程式按照書寫的順序執行,不會跳過任何一行程式碼,像這樣的執行流程就是常見的順序執行結構。
提示:所以重點要說的是選擇結構、迴圈結構。
2、選擇結構(條件語句)
(1)條件語句概念
我們常用的條件語句一般就是if語句
和switch語句
,但是Python語言中是沒有switch-case
語句的。
- 那我們就說說什麼是
if選擇語句
?
if語句
是指程式語言中用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行程式的哪些操作。 - 再比如我們假設一個場景:
我們去網咖需要給網管提供身份證,提供身份證的主要目的就是登記你的身份資訊,檢視你是否成年,如果識別你成年就可以給你開機器,如果識別你未成年就不能夠給你開機器。
其實這個場景描述的就是條件語句,即條件成立執行某些程式碼,條件不成立則不執行這些程式碼。
(2)if
語句語法
if 條件表示式:
# 這裡是程式碼塊
條件成立執行的程式碼1
條件成立執行的程式碼2
......
執行的流程:if語句
在執行時,會先對條件表示式進行求值判斷,如果為True,則執行if
後程式碼塊中的語句,如果為False,則不執行。
我們來看下一段程式碼:
if False:print('條件成立執行的程式碼1')
print('條件成立執行的程式碼2')
# 輸出結果:
# 條件成立執行的程式碼2
上面示例說明:
在Python中,預設情況下,if語句只會控制緊隨其後的那條語句,如果希望if
條件語句可以控制多條語句,則可以在if
後跟著一個程式碼塊。
什麼是程式碼塊?
程式碼塊中儲存著一組程式碼,同一個程式碼塊中的程式碼,要麼都執行要麼都不執行。
程式碼塊就是一種為程式碼分組的機制,如果要編寫程式碼塊,語句就不能緊隨在
:
後邊,而是要寫在下一行程式碼塊以縮排開始,直到程式碼恢復到之前的縮排級別時結束。
程式碼塊縮排有兩種方式:
- 縮排規則4個空格。(官方文件推薦)
- 或者一個Tab鍵(製表符)。(開發習慣)
在Pycharm中,輸入冒號後會自動換行縮排。
Python程式碼中使用的縮排方式必須統一,也就是說你編寫程式碼的時候,要用空格就全用空格,要用Tab鍵就全用Tab鍵,避免混著用。
現在大部分的Python編輯器,會預設的把Tab鍵轉換成4個空格。
1)快速體驗
if True:
print('條件成立執行的程式碼1')
print('條件成立執行的程式碼2')
# 下方的程式碼沒有縮排到if語句塊,
# 所以不屬於if語句塊,和if條件無關。
print('我是無論條件是否成立都要執行的程式碼')
# 執行結果如下:
# 條件成立執行的程式碼1
# 條件成立執行的程式碼2
# 我是無論條件是否成立都要執行的程式碼
2)例項:
需求分析:如果使用者年齡大於等於18歲,即成年,輸出"已經成年,可以上網"。
簡單版
age = 20
if age >= 18:
print('已經成年,可以上網')
print('系統關閉')
進階版
新增需求:使用者可以輸出自己的年齡,然後系統進行判斷是否成年,成年則輸出"您的年齡是'使用者輸入的年齡',已經成年,可以上網"。
# input()接受使用者輸入的資料是字串型別,
# 條件是age和輸入的整型做判斷,所以這裡要int()轉換資料型別。
age = int(input('請輸入您的年齡:'))
"""
如果age不做型別轉換,age >= 18 表示式會報錯,
變數age是字串,字串和數值型不能進行比較,
在前邊關係運算子(比較運算子)講過。
"""
if age >= 18:
print(f'您的年齡是{age},已經成年,可以上網')
print('系統關閉')
(3)if...else...
語句
作用:條件成立執行if
下方的程式碼,條件不成立執行else
下方的程式碼。
思考:網咖上網的例項,如果成年,允許上網,如果不成年呢?是不是應該回複使用者不能上網?
1)語法:
if 條件:
條件成立執行的程式碼1
條件成立執行的程式碼2
......
else:
條件不成立執行的程式碼1
條件不成立執行的程式碼2
......
執行流程:
if-else
語句在執行時,先對if
後的條件表示式進行求值判斷。如果為結果為True,則執行if
後的程式碼塊,
如果為False,則執行else
後的程式碼塊。
2)示例:
age = int(input('請輸入您的年齡:'))
if age >= 18:
print(f'您的年齡是{age},已經成年,可以上網')
else:
print(f'您的年齡是{age},未成年,請自行回家寫作業')
print('系統關閉')
注意:如果條件成立執行了某些程式碼,那麼其他的情況的程式碼將不會執行。
(4)多重判斷
思考:中國合法工作年齡為18-60歲,即如果年齡小於18的情況為童工,不合法;如果年齡在18-60歲之間為合法工齡;大於60歲為法定退休年齡。
1)語法
if 條件1:
條件1成立執行的程式碼1
條件1成立執行的程式碼2
......
elif 條件2:
條件2成立執行的程式碼1
條件2成立執行的程式碼2
......
...... # 表示可以寫多個elif 條件:
else:
以上條件都不成立執行執行的程式碼
執行流程:
if-elif-else
語句在執行時,會自上向下依次對條件表示式進行求值判斷,
如果表示式的結果為True,則執行當前程式碼塊,然後語句結束。
如果表示式的結果為False,則繼續向下判斷,直到找到True為止。
如果所有的表示式都是False,則執行else
後的程式碼塊。if-elif-else
語句中只會有一個程式碼塊會執行。
提示:多重判斷也可以和
else
配合使用。一般else
放到整個if
語句的最後,表示以上條件都不成立的時候執行的程式碼。
(2)示例
# 工齡判斷
age = int(input('請輸入您的年齡:'))
if age < 18:
print(f'您的年齡是{age},童工一枚')
elif (age >= 18) and (age <= 60):
print(f'您的年齡是{age},合法工齡')
else age > 60:
print(f'您的年齡是{age},可以退休')
擴充:
age >= 18 and age <= 60
可以化簡為18 <= age <= 60
(邏輯運算子擴充2有講)。
(5)if
語句巢狀
思考:坐公交:如果有錢可以上車,沒錢不能上車;上車後如果有空座,則可以坐下;如果沒空座,就要站著。怎麼書寫程式?
1)語法
if 條件1:
條件1成立執行的程式碼
條件1成立執行的程式碼
if 條件2:
條件2成立執行的程式碼
條件2成立執行的程式碼
注意:條件2的
if
也是處於條件1成立執行的程式碼的縮排關係內部。
2)示例:坐公交,判斷是否能上車
"""
1. 如果有錢,則可以上車
2. 上車後,如果有空座,可以坐下
上車後,如果沒有空座,則站著等空座位
如果沒錢,不能上車
"""
# 假設用 money = 1 表示有錢, money = 0表示沒有錢
money = 1
if money == 1:
print('土豪,不差錢,順利上車')
else:
print('沒錢,不能上車,追著公交車跑')
判斷是否能坐下:
"""
1. 如果有錢,則可以上車
2. 上車後,如果有空座,可以坐下
上車後,如果沒有空座,則站著等空座位
如果沒錢,不能上車
"""
# 假設用 money = 1 表示有錢, money = 0表示沒有錢;
# seat = 1 表示有空座,seat = 0 表示沒有空座
money = 1
seat = 0
if money == 1:
print('土豪,不差錢,順利上車')
# 判斷是否能坐下
if seat == 1:
print('有空座,可以坐下')
else:
print('沒有空座,站等')
else:
print('沒錢,不能上車,追著公交車跑')
3)if
巢狀語句執行流程圖
如下圖所示:
3、應用:猜拳遊戲
(1)需求分析:
1)參與遊戲的角色
- 玩家:手動出拳
- 電腦:隨機出拳
2)判斷輸贏
- 玩家獲勝
玩家 電腦 石頭 剪刀 剪刀 布 布 石頭 - 平局:例如:玩家出拳 和 電腦出拳相同。
- 電腦獲勝:除以上情況,則電腦獲勝。
(2)隨機數做法:
- 匯出
random
模組import 模組名
- 使用
andom
模組中的隨機整數功能random.randint(開始,結束) # 包含頭尾
(3)示例:
"""
提示:0-石頭,1-剪刀,2-布
1. 出拳
玩家輸入出拳
電腦隨機出拳
2. 判斷輸贏
玩家獲勝
平局
電腦獲勝
"""
# 匯入random模組
import random
# 電腦出拳
computer = random.randint(0, 2)
# 玩家出拳
player = int(input('請出拳:0-石頭,1-剪刀,2-布:'))
# 玩家勝利 p0:c1 或 p1:c2 或 p2:c0
# (就是玩家獲勝的三種情況)
if (player == 0 and computer == 1) or (player == 1 and computer == 2) or (player == 2 and computer == 0):
print('玩家獲勝')
# 平局:玩家 == 電腦
elif player == computer:
print('平局')
else:
print('電腦獲勝')
4、三元運算子
(1)描述
三元運算子也叫三目運算子或三元表示式。
三元運算子的作用就是簡化程式碼,可以簡化非常簡單的if-else
的格式語句。
(2)語法如下:
描述1:值1(語句1) if 條件 else 值2(語句2)
描述2:條件成立執行的表示式 if 條件 else 條件不成立執行的表示式
說明:我們讀三元表示式的時候,先從條件開始讀取,
如果成立,執行前面表示式內容,
如果不成立,執行後面表示式內容。
(Java中三元運算子語法:條件表示式?語句1:語句2)
(3)快速體驗:
# 三元運算子執行流程:
# 三元運算子在執行時,會先對條件表示式進行求值判斷,
# 如果判斷結果為True,則執行語句1,並返回執行結果,
# 如果判斷結果為False,則執行語句2,並返回執行結果。
# 示例
print('你好') if True else print('Hello')
# 練習1
a = 30
b = 50
print('a比較大!') if a > b else print('b比較大!')
# 練習2:工作中也常用與獲取a和b的較大值
max = a if a > b else b
print(max)