條件控制語句
1. 條件判斷語句(if語句)
if 條件判斷語句在上一篇博文 4. Python3 運算符細解裏的第9點 Python 條件運算符(三元運算符)
裏簡單的介紹過。Python語言 的條件語句是通過一條或多條語句的執行結果(True 或 False)來 決定執行的代碼塊。
if 條件判斷語句的執行流程:
if 語句在執行時,會先對條件表達式進行求值判斷,
如果爲True,則執行 if 後的語句;
如果爲False,則不執行。
代碼執行過程:
語法:
if 條件表達式 :
代碼塊
參考實例:
if condition_1:
statement_block_1 # 如果 "condition_1" 爲 True 將執行 "statement_block_1" 塊語句
elif condition_2: # 如果 "condition_1" 爲False,將判斷 "condition_2"
statement_block_2 # 如果"condition_2" 爲 True 將執行 "statement_block_2" 塊語句
else:
statement_block_3 # 如果 "condition_2" 爲False,將執行"statement_block_3"塊語句
每個代碼塊中都保存着一組代碼,同一個代碼塊中的代碼,要麼都執行要麼都不執行;
代碼塊以 縮進 開始,直到代碼恢復到之前的縮進級別時結束;
代碼塊就是一種爲代碼分組的機制。
注意:
1、每個判斷條件開始的後面要使用冒號 :,表示接下來是 滿足條件後要執行的語句塊。
2、使用縮進來劃分語句塊, 相同縮進數 的語句在一起組成一個語句塊。
3、在Python中沒有 switch – case語句 。
1.1 if-else語句
語法:
if 條件表達式 :
代碼塊
else :
代碼塊
參考實例:
a = int(input("請輸入你想驗證的數字: "))
if a > 0 :
print('這是一個正數')
else :
print('這是一個負數')
執行流程:
if-else語句 在執行時,先對 if 後的條件表達式進行求值判斷;
如果爲 True ,則執行 if 後的代碼塊;
如果爲 False ,則執行 else 後的代碼塊。
1.2 if-elif-else 語句
語法:
if 條件表達式 :
代碼塊
elif 條件表達式 :
代碼塊
elif 條件表達式 :
代碼塊
…
else :
代碼塊
參考實例:
age = int(input("請輸入你家狗狗的年齡: "))
print("")
if age <= 0:
print("你是在逗我吧!")
elif age == 1:
print("相當於 14 歲的人。")
elif age == 2:
print("相當於 22 歲的人。")
elif age > 2:
human = 22 + (age -2)*5
print("對應人類年齡: ", human)
# 退出提示
input("點擊 enter 鍵退出")
# 最後結果:
# 請輸入你家狗狗的年齡: 1
#
# 相當於 14 歲的人。
# 點擊 enter 鍵退出
執行流程:
if-elif-else語句在 執行時,會自上向下依次對條件表達式進行求值判斷,
如果表達式的結果爲 True ,則執行當前代碼塊,然後 語句結束 ;
如果表達式的結果爲 False ,則繼續向下判斷,直到找到 True 爲止;
如果所有的表達式都是 False ,則執行 else 後的代碼塊。
總結: if-elif-else 中 只會有 一個代碼塊會執行。
2. input() 函數
講了這麼久的 Pythion語言 語法,我們穿插的講一個很實用且經常會用到的函數來換換思路。
input() 函數: 該函數用來獲取用戶的輸入信息,返回的數據類型爲 string 類型。
小提示:在 Python3.x 中 raw_input() 和 input() 進行了整合,去除了 raw_input( ),僅保留了input( )函數,其接收任意任性輸入,將所有輸入默認爲字符串處理,並返回字符串類型。
input()函數 調用開始後,程序會立即暫停,等待用戶輸入信息;
用戶輸入完內容以後,點擊回車程序纔會繼續向下執行;
用戶輸入完成以後,其所輸入的的內容會以返回值的形式返回。
>>>a = input("input:")
input:123 # 輸入整數
>>> type(a)
<class 'str'> # 字符串
>>> a = input("input:")
input:runoob # 正確,字符串表達式
>>> type(a)
<class 'str'> # 字符串
3. 循環語句
循環語句 顧名思義 可以使 指定的代碼塊重複指定的次數。循環語句分成兩種,while循環 和 for循環。
Python語言 循環語句的控制結構圖:
3.1 while 循環語句
3.1.1 Python語言 中 while 語句 的一般形式:
while 條件表達式 :
代碼塊
while 循環 執行流程圖:
參考實例(這是一個必須理解且需要背下來的實例):
i = 0
while i < 5:
print(i)
i += 1
# 0
# 1
# 2
# 3
# 4
i = 0
while i < 5:
i += 1
print(i)
# 1
# 2
# 3
# 4
# 5
# 用 while 來計算 1 到 100 的總和:
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和爲: %d" % (n,sum)) # 1 到 100 之和爲: 5050
在最後還是再和大家強調一下:需要注意冒號和縮進。另外,在 Python語言 中 沒有 do…while 循環。
3.1.2 while 循環語句玩法小技巧(一):無限循環
我們可以通過設置條件表達式永遠不爲 false 來實現無限循環,參考實例:
var = 1
while var == 1 : # 表達式永遠爲 true
num = int(input("輸入一個數字 :"))
print ("你輸入的數字是: ", num)
print ("Good bye!")
# 輸出結果如下:
# 輸入一個數字 :5
# 你輸入的數字是: 5
# 輸入一個數字 :
可以使用 CTRL+C 來退出當前的無限循環。
無限循環在 服務器上 客戶端的實時請求 非常有用。
3.1.3 while 循環使用 else 語句
在 while … else 條件語句執行爲 False 時,執行 else 的代碼塊。
語法格式如下:
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
循環輸出數字,並判斷大小:
count = 0
while count < 5:
print (count, " 小於 5")
count = count + 1
else:
print (count, " 大於或等於 5")
# 0 小於 5
# 1 小於 5
# 2 小於 5
# 3 小於 5
# 4 小於 5
# 5 大於或等於 5
3.1.4 while 循環語句玩法小技巧(二):簡單語句組
類似 if 語句 的語法,如果你的 while 循環體中 只有一條語句,你可以將該語句與while寫在同一行中, 如下所示:
flag = 1
while (flag): print ('歡迎訪問雲山·若水在CSDN的博客。')
print ("Good bye!")
# 運行結果過:
# 歡迎訪問雲山·若水在CSDN的博客。
# 歡迎訪問雲山·若水在CSDN的博客。
# 歡迎訪問雲山·若水在CSDN的博客。
# …… (無限循環)
注意:對 while 循環語句製造的無限循環,我們可以使用 CTRL+C 來中斷循環。
3.2 for 循環語句
Python語言 的 for循環 可以 遍歷任何序列 的項目,如一個列表或者一個字符串。在後面的 6. Python語言的列表基礎操作彙總 和 7. Python語言的元組&字典&集合 裏我們還會再着重的講解 Python 的 for 循環 的使用。
for 循環 的一般格式如下:
for 變量 in 序列(遍歷的規則):
代碼塊
for 循環 執行流程圖:
Python for 循環 參考實例:
>>>languages = ["C", "C++", "Perl", "Python"]
>>> for x in languages:
... print (x)
...
C
C++
Perl
Python
>>>
以下 for 實例中使用了 break 語句,break 語句用於跳出當前循環體:
sites = ["Baidu", "Google","CSDN","Taobao"]
for site in sites:
if site == "CSDN":
print("雲山·若水的CSDN博客。")
break
print("循環數據 " + site)
else:
print("沒有循環數據!")
print("完成循環!")
# 執行腳本後,在循環到 "CSDN"時會跳出循環體:
# 循環數據 Baidu
# 循環數據 Google
# 雲山·若水的CSDN博客。
# 完成循環!
4. 循環嵌套
Python語言 允許在一個循環體裏面 嵌入 另一個循環。
循環嵌套語法:
if 表達式1:
語句
if 表達式2:
語句
elif 表達式3:
語句
else:
語句
elif 表達式4:
語句
else:
語句
#-----------------------------------------
while 表達式:
while 表達式:
代碼塊
代碼塊
#-----------------------------------------
for 變量 in 循環規則:
for 變量 in 循環規則:
代碼塊
代碼塊
參考實例:
num=int(input("輸入一個數字:"))
if num%2==0:
if num%3==0:
print ("你輸入的數字可以整除 2 和 3")
else:
print ("你輸入的數字可以整除 2,但不能整除 3")
else:
if num%3==0:
print ("你輸入的數字可以整除 3,但不能整除 2")
else:
print ("你輸入的數字不能整除 2 和 3")
# 執行後輸出結果爲:
# 輸入一個數字:6
# 你輸入的數字可以整除 2 和 3
#-----------------------------------------
# 9*9 乘法表
i = 0
while i < 9 :
i += 1
# print(i)
j = 0
while j < i:
j += 1
print(j,'*',i,'=',i*j,' ',end='')
print()
#-----------------------------------------
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, '等於', x, '*', n//x)
break
else:
# 循環中沒有找到元素
print(n, ' 是質數')
# 輸出結果:
# 2 是質數
# 3 是質數
# 4 等於 2 * 2
# 5 是質數
# 6 等於 2 * 3
# 7 是質數
# 8 等於 2 * 4
# 9 等於 3 * 3
5. range()函數
如果你需要遍歷數字序列,可以使用內置range()函數,它會生成數列。
# 案例
>>>for i in range(5):
... print(i)
...
0
1
2
3
4
使用range()函數獲取指定區間的值:
>>>for i in range(5,9) :
print(i)
5
6
7
8
>>>
使用range()函數以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做’步長’):
>>>for i in range(0, 10, 3) :
print(i)
0
3
6
9
>>>
負數:
>>>for i in range(-10, -100, -30) :
print(i)
-10
-40
-70
>>>
可以結合range()和len()函數以遍歷一個序列的索引:
>>>a = ['Google', 'Baidu', 'CSDN', 'Taobao', 'QQ']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Google
1 Baidu
2 CSDN
3 Taobao
4 QQ
>>>
最後,使用range()函數來創建一個列表:
>>>list(range(5))
[0, 1, 2, 3, 4]
>>>
6. break 和 continue
break 可以用來 立即退出循環語句,包括 else 語句;
continue 用來 跳過當前循環。
break 執行流程圖:
continue 執行流程圖:
代碼執行過程:
break語句 可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中 終止,任何對應的循環 else 塊將不執行。
continue語句 被用來告訴 Python執行程序 跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環。
while 循環中使用 break 語句:
n = 5
while n > 0:
n -= 1
if n == 2:
break
print(n)
print('循環結束。')
# 輸出結果爲:
# 4
# 3
# 循環結束。
while 循環中使用 continue 語句:
n = 5
while n > 0:
n -= 1
if n == 2:
continue
print(n)
print('循環結束。')
# 輸出結果爲:
# 4
# 3
# 1
# 0
# 循環結束。
參考實例:
for letter in 'CSDN': # 第一個實例
if letter == 'D':
break
print ('當前字母爲 :', letter)
var = 10 # 第二個實例
while var > 0:
print ('當期變量值爲 :', var)
var = var -1
if var == 5:
break
print ("Good bye!")
# 輸出結果:
# 當前字母爲 : C
# 當前字母爲 : S
# 當期變量值爲 : 10
# 當期變量值爲 : 9
# 當期變量值爲 : 8
# 當期變量值爲 : 7
# 當期變量值爲 : 6
# Good bye!
#-----------------------------------------
# 循環字符串 CSDN,碰到字母 D 跳過輸出:
for letter in 'CSDN': # 第一個實例
if letter == 'D': # 字母爲 D 時跳過輸出
continue
print ('當前字母 :', letter)
var = 10 # 第二個實例
while var > 0:
var = var -1
if var == 5: # 變量爲 5 時跳過輸出
continue
print ('當前變量值 :', var)
print ("Good bye!")
# 輸出結果:
# 當前字母 : C
# 當前字母 : S
# 當前字母 : N
# 當前變量值 : 9
# 當前變量值 : 8
# 當前變量值 : 7
# 當前變量值 : 6
# 當前變量值 : 4
# 當前變量值 : 3
# 當前變量值 : 2
# 當前變量值 : 1
# 當前變量值 : 0
# Good bye!
循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變爲 False (以while循環)導致循環終止時被執行,但循環被 break 終止時不執行。
參考實例:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, '等於', x, '*', n//x)
break
else:
# 循環中沒有找到元素
print(n, ' 是質數')
# 輸出結果:
# 2 是質數
# 3 是質數
# 4 等於 2 * 2
# 5 是質數
# 6 等於 2 * 3
# 7 是質數
# 8 等於 2 * 4
# 9 等於 3 * 3
8. pass 語句
Python pass 是 空語句,是爲了保持程序結構的完整性。
pass 不做任何事情,一般用做佔位語句,如下參考實例:
>>>while True:
... pass # 等待鍵盤中斷 (Ctrl+C)
最小的類:
>>>class MyEmptyClass:
... pass
以下實例在字母爲 D 時 執行 pass 語句塊:
for letter in 'CSDN':
if letter == 'D':
pass
print ('執行 pass 塊')
print ('當前字母 :', letter)
print ("Good bye!")
# 輸出結果:
# 當前字母 : C
# 當前字母 : S
# 執行 pass 塊
# 當前字母 : D
# 當前字母 : N
# Good bye!
總結小便條
本篇文章主要講了以下幾點內容:
-
Python語言 的 條件控制語句就 三個(其實,所有的計算機語言都這樣):if while for
-
if:條件判斷語句。一句話:滿足哪條走哪條。計算機程序核心內容分兩塊,一塊是計算,另一塊就是 if (判斷)。
if 條件判斷語句的兩個分支分別是: if…else… 和 if…elif…elif…else… ,這倆兩兄弟自然大同小異。 -
上面是一大塊的計算機程序核心半壁江山“條件判斷語句”,另一大塊是簡化一些重複問題的循環語句; while 和 for 。即然都是循環,一個不夠嗎?雖然都叫“王大柱”但是長得塊頭都還不一樣呢。
while:循環各種計算和語句。 1,2,3,4,5…
for:循環遍歷 列表、元組、字典、集合。 a = [0]
雖然 while 和 for 都能實現彼此功能和作用,但相對的使用便利性和計算量就不是同日而語了,這也就是他們的區別。
-
至於其他的一些函數: input() 傳遞輸入str
range() 便利數字序列
break 退出循環
continue 跳過當前循環
pass 空語句
先拿個小本本記下,在以後的實操中逐漸體會其真諦。 -
至於 print() 、input() 、type() 就不需要在幫忙回顧了吧。
如果還有點暈,那就去完成作業吧。拜拜~
課後作業:
1. 求1000以內所有的水仙花數
2. 獲取用戶輸入的任意數,判斷其是否是質數?
3. 控制檯輸出 9*9乘法表
4. 給 用戶9次機會 猜1 - 10 個數字內 隨機來猜數字。如果隨機的數字和用戶輸入的數字一致則表示正確,如果不一致則表示錯誤。最終結果要求用戶怎麼也猜不對。
參考答案:
# 作業 1
i = 100
while i < 1000:
print(i)
# 1.判斷哪些是水仙花數
# 2. 假設 i 的百位數爲 a 十位數爲 b 個位數爲 c
# 求 i 的百位數 a
a = i // 100
# 求 i 的十位數 b
b = (i - a*100) // 10
c = i % 10
# print(a,b,c)
if a ** 3 + b ** 3 + c ** 3 == i:
print(i)
i += 1
# 作業 2
# 參考答案 1.0
i = 2
while i <= 100:
# print(i)
# 創建一個變量 記錄 i 是否爲質數 默認 flag 是質數
flag = True
j = 2
while j < i :
# 判斷 i 是否能被 j 整除
if i % j == 0:
flag = False
j += 1
if flag:
print(i)
i += 1
# 參考答案 2.0
from time import *
# 獲取程序開始的時間
start = time()
i = 2
while i <= 10000:
# print(i)
# 創建一個變量 記錄 i 是否爲質數 默認 flag 是質數
flag = True
j = 2
while j < i :
# 判斷 i 是否能被 j 整除
if i % j == 0:
flag = False
# 一旦進入循環 則證明 i 一定不是質數 此時內層循環沒必要再進行下去了
# 使用 break 跳出內層循環
break
j += 1
if flag:
# print(i)
pass
i += 1
# 獲取程序結束的時間
end = time()
# 計算程序所執行的時間
print('程序執行了',end - start,'秒')
# 參考答案 3.0
from time import *
# 獲取程序開始的時間
start = time()
i = 2
while i <= 10000:
# print(i)
# 創建一個變量 記錄 i 是否爲質數 默認 flag 是質數
flag = True
j = 2
while j <= i ** 0.5:
# 判斷 i 是否能被 j 整除
if i % j == 0:
flag = False
# 一旦進入循環 則證明 i 一定不是質數 此時內層循環沒必要再進行下去了
# 使用 break 跳出內層循環
break
j += 1
if flag:
# print(i)
pass
i += 1
# 獲取程序結束的時間
end = time()
# 計算程序所執行的時間
print('程序執行了',end - start,'秒')
# 作業 3
i = 0
while i < 9 :
i += 1
# print(i)
j = 0
while j < i :
j += 1
print(j,'*',i,'=',i*j,end=' ')
print()
# 作業 4
# 思路: 1. 先拿到用戶猜過的數字
# 2. 隨機一個數字去和用戶猜過的數字作比對 如果隨機的這個數字沒有出現在用戶猜過的數字當中。那麼這個數字就是最終的答案
import random
lst = [] # 用來添加用戶猜過的數字
i = 0
while i < 9:
number = int(input(f'第{i+1}次猜,請輸入一個數字:'))
lst.append(number)
print('不好意思,沒有猜對,請繼續猜')
i += 1
while True:
number_x = random.randint(1,10) # 1 <= number_x <= 10
if number_x in lst:
continue
else:
break
print('正確的號碼是',number_x)