『無為則無心』Python基礎 — 13、Python流程控制語句(條件語句)


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后跟着一個代碼塊。

什么是代碼塊?

代碼塊中保存着一組代碼,同一個代碼塊中的代碼,要么都執行要么都不執行。

代碼塊就是一種為代碼分組的機制,如果要編寫代碼塊,語句就不能緊隨在:后邊,而是要寫在下一行

代碼塊以縮進開始,直到代碼恢復到之前的縮進級別時結束。

代碼塊縮進有兩種方式

  1. 縮進規則4個空格。(官方文檔推薦)
  2. 或者一個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嵌套語句執行流程圖

如下圖所示:

image

3、應用:猜拳游戲

(1)需求分析

1)參與游戲的角色

  • 玩家:手動出拳
  • 電腦:隨機出拳

2)判斷輸贏

  • 玩家獲勝
    玩家 電腦
    石頭 剪刀
    剪刀
    石頭
  • 平局:例如:玩家出拳 和 電腦出拳相同。
  • 電腦獲勝:除以上情況,則電腦獲勝。

(2)隨機數做法

  1. 導出random模塊
    import 模塊名
    
  2. 使用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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM