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)