天天看點

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

判斷語句

生活中的判斷幾乎是無所不在的,我們每天都在做各種各樣的選擇,如果這樣?如果那樣?……

考試成績對人生的影響,不同的考試成績對應着的結果,也就是不用的分支

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

判斷的定義

  • 如果 條件滿足,才能做某件事情,
  • 如果 條件不滿足,就做另外一件事情,或者什麼也不做

正是因為有了判斷,才使得程式世界豐富多彩,充滿變化!

判斷語句 又被稱為 “分支語句”,正是因為有了判斷,才讓程式有了很多的分支

if 語句文法結構

  • 标準if條件語句的文法
python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解
  • 如果表達式的值 非0 或者為布爾值 True,則代碼組 if_suite 被執行;否則就去執行 else_suite
  • 代碼組是一個 python術語,它由一條或多條語句組成,表示一個子代碼塊

圖例

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

隻要表達式數字為 非零值 即為 True

空字元串、空清單的值均為 False

# 代碼1:
if 3 > 0:
    print('yes')
print('ok')

# 代碼2:為0的數字都為False,True才執行;
if -0.0:
    print('為0的數字都為False')
else:
    print('值為0')

# 代碼3:空格是空字元串,為True,會列印; 
if ' ':
    print('空格也是一個字元,為True')    

# 代碼4:[False]為清單,清單中元素是False,因為清單存在,為真會列印;
if [False]: 
    print('非空清單,為真True')

# 代碼5:None為假,取反為真; 
if not None:
    print('None為假,取反為真')
           

練習 1:判斷合法使用者

需求

  1. 建立 login2.py 檔案
  2. 提示使用者輸入使用者名和密碼
  3. 獲得到相關資訊後,将其儲存在變量中
  4. 如果使用者輸的使用者名為 bob,密碼為 123456,則輸出 Login successful,否則輸出 Login incorrect
# 定義兩個變量 username 和 password,分别從鍵盤擷取使用者名和密碼
username = input('請輸入使用者名:')
password = input('請輸入密碼:')

# 在python中等于号用 == 表示;input()函數擷取的值都是字元類型,密碼要用引号引起來
if username == 'bob' and password == '123456':
    print('Login successful')
else:
    print('Login inorrect')
print(" Login end ")
           

if 擴充語句

文法結構:

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

練習 2:編寫判斷成績的程式

需求

  1. 如果成績大于60分,輸出“及格”
  2. 如果成績大于70分,輸出“良”
  3. 如果成績大于80分,輸出“好”
  4. 如果成績大于90分,輸出“優秀”
  5. 否則輸出“你要努力了”

編寫判斷成績的程式

score = int(input('分數:'))
#程式的執行,是從上往下執行的;
#先判斷大的數值,不滿足再繼續往下判斷,可以簡化程式代碼
if score >= 90:
    print('優秀')
elif score >= 80:
    print('好')
elif score >= 70:
    print('良')
elif score >= 60:
    print('及格')
else:
    print('你要努力了!!!')
           

練習 3:編寫石頭剪刀布小遊戲

需求:

  1. 計算機随機出拳
  2. 玩家自己決定如何出拳
  3. 代碼盡量簡化

方法一:編寫剪刀石頭布小遊戲

# 導入随機數的子產品 random
import random
# 定義清單all_choices,存儲出拳的每個選擇
all_choices = ['石頭','剪刀','布']
# random子產品的choice方法,可以從變量中随機選出一個元素,随機出來的元素為電腦的出拳
computer = random.choice(all_choices)
# 使用input()函數,擷取使用者的出拳選擇
player = input('請出拳(石頭/剪刀/布):')
# 使用函數print()列印出電腦和玩家的出拳選擇
print("Your choice:" + player + ", Computer's choice: " + computer)
# 當玩家出拳為【石頭】時,電腦的每一種出拳選擇都要和【石頭】進行比較,列印結果
if player == '石頭':
    if computer == '石頭':
        print('平局')
    elif computer == '剪刀':
        print('You WIN!!!')
    else:
        print('You LOSE!!!')
# 當玩家出拳為【剪刀】時,電腦的每一種出拳選擇都要和【剪刀】進行比較,列印結果
elif player == '剪刀':
    if computer == '石頭':
        print('You LOSE!!!')
    elif computer == '剪刀':
        print('平局')
    else:
        print('You WIN!!!')
# 當玩家出拳為【布】時,電腦的每一種出拳選擇都要和【布】進行比較,列印結果
else:
    if computer == '石頭':
        print('You WIN!!!')
    elif computer == '剪刀':
        print('You LOSE!!!')
    else:
        print('平局')
           

方法二:

# 導入随機數的子產品 random
import random
# 定義清單all_choices,存儲出拳的每個選擇
all_choices = ['石頭','剪刀','布']
# 定義清單win_list, 将玩家赢電腦的選擇,提前儲存起來
# 每個子清單中,玩家為第一個元素,電腦為第二個元素
win_list = [['石頭','剪刀'],['剪刀','布'],['布','石頭']]
# random子產品的choice方法,可以從變量中随機選出一個元素
# 随機出來的元素為電腦的出拳
computer = random.choice(all_choices)
# 使用input()函數,擷取使用者的出拳選擇
player = input('請出拳(石頭/剪刀/布):')
# 使用函數print()列印出電腦和玩家的出拳選擇
print("Your choice:" + player + ", Computer's choice: " + computer)

# 如果玩家和電腦的出拳相同,則平局
if player == computer:
    print('平局')
# 如果[玩家,電腦]的清單,在win_list中,則可判斷玩家赢,因為在win_list中定義了玩家赢得各種可能性   
elif [player,computer] in win_list:
    print('You WIN!!!')
# 玩家不是赢,那麼就是輸了,玩家所有赢得可能性已經在win_list定義了    
else:
    print('You LOSE!!!')
           

while 循環詳解

在程式開發中,一共有三種流程方式:

  • 順序 —— 從上向下,順序執行代碼
  • 分支 —— 根據條件判斷,決定執行代碼的 分支
  • 循環 —— 讓 特定代碼 重複 執行
    python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

循環概述

  1. 一組被重複執行的語句稱之為 循環體,能否繼續重複,決定循環的終止條件
  2. Python 中的循環中 while 循環和 for 循環
  3. 循環 次數未知 的情況下,建議采用 while 循環
  4. 循環 次數可以預知 的情況下,建議采用 for 循環

何時使用

  • 減少重複性代碼,提高代碼效率
python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

while 循環文法結構

  • 循環的作用就是讓 指定的代碼 重複的執行
  • while

    循環最常用的應用場景就是 讓執行的代碼 按照 指定的次數 重複 執行
python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

注意:

  • while

    語句以及縮進部分是一個 完整的代碼塊

案例:列印 5 遍 Hello World

需求

  • 列印 5 遍 Hello World
# 1. 定義重複次數計數器
i = 1
# 2. 使用 while 判斷條件
while i <= 5:
    # 要重複執行的代碼
    print("Hello Python")
    # 處理計數器 i
    i = i + 1
print("循環結束後的 i =", i)
           
注意:循環結束後,之前定義的計數器條件的數值是依舊存在的

案例:使用 while 循環計算1~100的和

# 0. 定義最終結果的變量
sum100 = 0
# 1. 定義一個整數的變量記錄循環的次數
counter = 1
# 2. 開始循環,當 counter 小于等于100時,循環執行while中的程式
while counter <= 100:
    # 每一次循環,都讓 sum100 這個變量和 counter 這個計數器相加
    sum100 += i
    # 處理計數器,控制循環次數
    counter += 1
print("0~100之間的數字求和結果 =", sum100)
           

練習 1:完善石頭剪刀布的遊戲

需求:

  1. 實作循環結構,要求遊戲三局兩勝

【優化】實作循環結構,要求遊戲三局兩勝

import random
all_choices = ['石頭','剪刀','布']
win_list = [['石頭','剪刀'],['剪刀','布'],['布','石頭']]

pwin = 0     #記錄人勝利的次數 
cwin = 0     #記錄計算機勝利的次數

while pwin < 2 and cwin < 2:
    computer = random.choice(all_choices)
    # 使用input()函數,擷取使用者的出拳選擇
    player = input('請出拳(石頭/剪刀/布):')
    # 使用函數print()列印出電腦和玩家的出拳選擇
    print("Your choice:" + player + ", Computer's choice: " + computer)

    # 如果玩家和電腦的出拳相同,則平局
    if player == computer:
        print('平局')
    # 如果[玩家,電腦]的清單,在win_list中,則可判斷玩家赢,因為在win_list中定義了玩家赢得各種可能性 
    elif [player,computer] in win_list:
        pwin += 1
        print('You WIN!!!')
    # 玩家不是赢,那麼就是輸了,玩家所有赢得可能性已經在win_list定義了    
    else:
        cwin += 1
        print('You LOSE!!!')
           

break、continue 和 else

break

continue

是專門在循環中使用的關鍵字
  • break

    某一條件滿足時,退出循環,不再執行後續重複的代碼
  • continue

    某一條件滿足時,跳過目前循環,不執行 continue 後續重複的代碼

break

continue

隻針對 目前所在循環 有效

break

  • 在循環過程中,如果 某一個條件滿足後,不 再希望 循環繼續執行,可以使用

    break

    退出循環
sum100 = 0
counter = 1
while counter <= 100:
    if counter  == 2:
        break
    sum100 += counter
    counter += 1
print("退出循環")
print(sum100)
           

break

隻針對目前所在循環有效

圖例

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

continue

  • 當遇到 continue 語句時,程式會 跳過目前循環,并忽略剩餘的語句,然後 回到循環的頂端
  • 如果仍然滿足循環條件,循環體内語句繼續執行,否則退出循環
sum100 = 0
counter = 1
while counter <= 100:
    if counter  == 2:
        counter += 1
        continue
        print("continue下的語句不會執行")
    sum100 += counter
    counter += 1
print("循環")
print(sum100)
           

圖例

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

else

  • python 中的 while 語句也支援 else 子句
  • else 子句隻在循環完成後執行
  • break 語句也會跳過 else 塊

練習 5:猜數字程式

需求

  1. 系統随機生成 100 以内的數字
  2. 要求使用者猜生成的數字是多少
  3. 最多猜 5 次,猜對結束程式
  4. 如果5次全部猜錯,則輸出正确結果
import random  # 調用随機數子產品random
number = random.randint(1,100)  # 從1~100範圍内,取出一個随機數
counter = 0  # 計數變量
while counter < 5:  # 指定猜的次數,0 - 4,共5次 
    answer = int(input("guess(1-100) "))  # 使用者輸入的猜測答案
    if answer == number:  # 判斷猜測是否正确,正确就列印,并退出while循環
        print('猜對了')     
        break              
    elif answer > number:  # 如果猜大了,列印,并繼續執行while循環
        print('猜大了')
    else:  # 如果猜大了,列印,并繼續執行while循環
        print('猜小了')
    counter += 1  # 每次猜數,counter自加1
else:
    print('answer=', number)
           

for 循環詳解

for 循環文法結構

for 變量 in 可疊代對象:
    for 循環邏輯
           

從購物過程了解 for 循環

購物車

我們都有在超市購物的經曆,将一件一件的商品放進購物車:

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

我們如果把購物車比做一個容器,例如學習過的清單,元組,字典等資料結構,那麼裡面的商品就可以看成是一個個元素,而且購物車中的元素是有固定數量的。

掃碼結賬

當我們去逾時收銀台掃碼結賬的時候,店員會将購物車中的商品一件一件的取出,然後掃描二維碼。注意這裡的過程是拿一件,掃一件。

又因為購物車中商品數量是有限的,是以掃描商品的次數也是有限次。比如,購物車中有5件商品,那麼最後就會掃描 5 次。

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

<img

案例:掃描商品

# cart 表示購物車
cart = ["巧克力派", "鱿魚絲", "碎冰冰", "Python從入門到入墳"]

# for 的邏輯:店員每次從 cart 中拿出一個 item 進行掃碼
for item in cart:
    print("掃碼: " + item)
           

從上述代碼可以看出,購物車cart中有5件商品,是以for中的print邏輯執行了5次。for一般用于指定次數的循環邏輯中,一般情況下,循環次數未知采用while循環,循環次數已知,采用for循環。在for關鍵字後面跟的這個item變量,變量名是可以根據變量命名規則更改的。

案例:計算購物車商品總價

# cart_price 存放每個商品的價格
cart_price = [10, 15, 20, 99.99]

total_price = 0
# for 循環做價格的累加
for price in cart_price:
    total_price += price
print("總價為: " + str(total_price))
           

周遊以及疊代器

周遊

我們如果把店員将購物車商品一件一件取出進行掃碼的過程,比喻成将某個容器中的元素一個個取出然後進行後續操作,這個過程就叫做周遊。、

周遊不僅限于清單,還适用于元組,字典和字元串類型。

可疊代對象

**概念:**一個實作了__iter__方法的對象是可疊代對象,一個實作next方法的對象則是疊代器。

**人話:**現階段我們學過的可疊代對象有 字元串,清單,元組,集合,字典,range(),并且能被 for 循環的都是可疊代對象。

案例:周遊字元串

# 周遊字元串
str01 = "hello world"
for str_item in str01:
    print(str_item)
           

for 循環特性

break、continue、else

關鍵字 作用
break 結束目前循環
continue 跳出當次循環,記住執行下次循環
else 循環正常結束(非 break 退出),執行 else 邏輯

案例:列印清單中元素,遇到小于0的元素停止列印

break 應用

for item in [1, 2, 3, -4, 5, -6]:
    if item < 0:
        break
    print("item is: " + item)
print("for循環外部:列印完畢")
           

圖例說明:

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

案例:計算清單中所有大于0的數字的和

continue 應用

sum_for = 0
for item in [1, 2, 3, -4, 5, -6]:
	if item < 0:
        continue
	sum_for += item
    print("加了一次~")
print("for循環外部:計算完畢, sum: " + str(sum_for))

           

圖例說明:

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

range 函數

range 函數是一個内建函數,它的傳回值是一個半閉半開範圍内的數字。for 循環常與range函數一起使用,range 函數為循環提供條件。

文法結構

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

案例

正常使用:

>>> tmp = range(1, 10)
>>> tmp
range(1, 10)
>>> len(tmp)
9
>>> list(tmp)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> tmp01 = range(5)
>>> tmp01
range(0, 5)
>>> list(tmp01)
[0, 1, 2, 3, 4]

           

因為 range 函數的使用和切片比較類似,是以同樣具有切片的使用特性:

>>> tmp = range(1, 10, 2)
>>> list(tmp)
[1, 3, 5, 7, 9]
>>> tmp01 = range(10, 1, -2)
>>> tmp01
range(10, 1, -2)
>>> list(tmp01)
[10, 8, 6, 4, 2]

           

與 for 循環一起使用

可以把 range 函數當成購物車,購物車中的商品是一個個範圍内的數字,要想拿出裡面的數字,就得周遊,是以 range 可以和 for 連用,可以控制循環次數。

案例:列印 3 次"hello world"

for i in range(3):
    print("第" + str(i) + "次:hello world")

           

如果直接列印 "hello world":

for i in range(3):
    print("hello world")

           

這裡的變量 i 隻是為了文法,在案例中沒有實際意義,不寫變量在文法層面會報錯,這裡的 range 隻為控制循環次數。

案例:作為序列的下标索引,擷取元素

# 列印下标為偶數的元素
list01 = ["zhangsan", "lisi", "wangwu", "zhaoliu"]
for i in range(len(list01)):  # len(list01): range(4) -> 0 1 2 3
    if i % 2 == 0:
        print(list01[i])

           

清單解析

它是一個非常有用、簡單、而且靈活的工具,可以用來動态地建立清單

文法結構

python判斷語句、while循環 、 for循環判斷語句while 循環詳解for 循環詳解

說明

這個語句的核心是 for 循環,它周遊可疊代對象的所有條目

expr 表達式應用于序列的每個成員,最後的結果值是該表達式産生的清單。也就類似于我們從購物車中拿出1件商品,接下來要做的事情。

案例:生成一個元素為 1~10 的清單

for 循環方式:文法相對複雜,但是好了解

list01 = []
for i in range(1, 11):
    list01.append(i)
print(list01)

           

清單解析式

list01 = [i for i in range(1, 11)]

           

練習:将剛才的 list01 清單的基礎上對其中的每個元素加 1

list01 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list01 = [i+1 for i in list01]
print(list01)

           

綜合練習

練習:斐波那契數列

  1. 斐波那契數列就是某一個數,總是前兩個數之和,比如 0,1,1,2,3,5,8
  2. 使用for循環和range函數編寫一個程式,計算有10個數字的斐波那契數列
  3. 改程序式,要求使用者輸入一個數字,可以生成使用者需要長度的斐波那契數列
fib = [0,1]  # 定義清單,指定斐波那契數列的初始兩個值
for i in  range(8):  # for循環執行8次,清單fib中的元素個數變為10【初始2個 + 新增的8個】
    fib.append(fib[-1] + fib[-2])  # 清單追加,每次都是最後一個元素和倒數第二個元素相加,産生新的元素
print(fib)  # 列印清單fib
           
fib = [0,1]  # 定義清單,指定斐波那契數列的初始兩個值
n = int(input('長度: '))  # 定義變量n, 此變量為使用者要看到的清單fib中的元素個數
# for循環執行n-2次,for循環執行多少次,清單fib會新增多少個元素
# 因為清單fib本身有兩個初始值,是以要産生n-2個數字
for i in  range(n - 2):    
    fib.append(fib[-1] + fib[-2])  
print(fib)