判斷語句
生活中的判斷幾乎是無所不在的,我們每天都在做各種各樣的選擇,如果這樣?如果那樣?……
考試成績對人生的影響,不同的考試成績對應着的結果,也就是不用的分支
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yM1IDN5gzMwATO0kjM1YTMvwVOxUDMyIDMy8CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
判斷的定義
- 如果 條件滿足,才能做某件事情,
- 如果 條件不滿足,就做另外一件事情,或者什麼也不做
正是因為有了判斷,才使得程式世界豐富多彩,充滿變化!
判斷語句 又被稱為 “分支語句”,正是因為有了判斷,才讓程式有了很多的分支
if 語句文法結構
- 标準if條件語句的文法
- 如果表達式的值 非0 或者為布爾值 True,則代碼組 if_suite 被執行;否則就去執行 else_suite
- 代碼組是一個 python術語,它由一條或多條語句組成,表示一個子代碼塊
圖例
隻要表達式數字為 非零值 即為 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:判斷合法使用者
需求
- 建立 login2.py 檔案
- 提示使用者輸入使用者名和密碼
- 獲得到相關資訊後,将其儲存在變量中
- 如果使用者輸的使用者名為 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 擴充語句
文法結構:
練習 2:編寫判斷成績的程式
需求
- 如果成績大于60分,輸出“及格”
- 如果成績大于70分,輸出“良”
- 如果成績大于80分,輸出“好”
- 如果成績大于90分,輸出“優秀”
- 否則輸出“你要努力了”
編寫判斷成績的程式
score = int(input('分數:'))
#程式的執行,是從上往下執行的;
#先判斷大的數值,不滿足再繼續往下判斷,可以簡化程式代碼
if score >= 90:
print('優秀')
elif score >= 80:
print('好')
elif score >= 70:
print('良')
elif score >= 60:
print('及格')
else:
print('你要努力了!!!')
練習 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 循環詳解
循環概述
- 一組被重複執行的語句稱之為 循環體,能否繼續重複,決定循環的終止條件
- Python 中的循環中 while 循環和 for 循環
- 循環 次數未知 的情況下,建議采用 while 循環
- 循環 次數可以預知 的情況下,建議采用 for 循環
何時使用
- 減少重複性代碼,提高代碼效率
while 循環文法結構
- 循環的作用就是讓 指定的代碼 重複的執行
-
循環最常用的應用場景就是 讓執行的代碼 按照 指定的次數 重複 執行while
注意:
-
語句以及縮進部分是一個 完整的代碼塊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:完善石頭剪刀布的遊戲
需求:
- 實作循環結構,要求遊戲三局兩勝
【優化】實作循環結構,要求遊戲三局兩勝
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
隻針對目前所在循環有效
圖例
continue
- 當遇到 continue 語句時,程式會 跳過目前循環,并忽略剩餘的語句,然後 回到循環的頂端
- 如果仍然滿足循環條件,循環體内語句繼續執行,否則退出循環
sum100 = 0
counter = 1
while counter <= 100:
if counter == 2:
counter += 1
continue
print("continue下的語句不會執行")
sum100 += counter
counter += 1
print("循環")
print(sum100)
圖例
else
- python 中的 while 語句也支援 else 子句
- else 子句隻在循環完成後執行
- break 語句也會跳過 else 塊
練習 5:猜數字程式
需求
- 系統随機生成 100 以内的數字
- 要求使用者猜生成的數字是多少
- 最多猜 5 次,猜對結束程式
- 如果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 循環
購物車
我們都有在超市購物的經曆,将一件一件的商品放進購物車:
我們如果把購物車比做一個容器,例如學習過的清單,元組,字典等資料結構,那麼裡面的商品就可以看成是一個個元素,而且購物車中的元素是有固定數量的。
掃碼結賬
當我們去逾時收銀台掃碼結賬的時候,店員會将購物車中的商品一件一件的取出,然後掃描二維碼。注意這裡的過程是拿一件,掃一件。
又因為購物車中商品數量是有限的,是以掃描商品的次數也是有限次。比如,購物車中有5件商品,那麼最後就會掃描 5 次。
<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循環外部:列印完畢")
圖例說明:
案例:計算清單中所有大于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))
圖例說明:
range 函數
range 函數是一個内建函數,它的傳回值是一個半閉半開範圍内的數字。for 循環常與range函數一起使用,range 函數為循環提供條件。
文法結構
案例
正常使用:
>>> 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])
清單解析
它是一個非常有用、簡單、而且靈活的工具,可以用來動态地建立清單
文法結構
說明
這個語句的核心是 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)
綜合練習
練習:斐波那契數列
- 斐波那契數列就是某一個數,總是前兩個數之和,比如 0,1,1,2,3,5,8
- 使用for循環和range函數編寫一個程式,計算有10個數字的斐波那契數列
- 改程序式,要求使用者輸入一個數字,可以生成使用者需要長度的斐波那契數列
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)