一寇窑、條件判斷
1.1 條件判斷語(yǔ)句(if 語(yǔ)句)
- 定義: 條件判斷語(yǔ)句就是if語(yǔ)句
-
重點(diǎn) 需要注意條件判斷語(yǔ)句和條件運(yùn)算符的區(qū)別:
- 條件運(yùn)算符是有返回結(jié)果的,而條件判斷語(yǔ)句(if語(yǔ)句)是沒(méi)有返回結(jié)果的箩张。
-
重點(diǎn) 需要注意條件判斷語(yǔ)句和條件運(yùn)算符的區(qū)別:
- 條件運(yùn)算符:
## 條件運(yùn)算符
# 語(yǔ)法: 語(yǔ)句1 條件表達(dá)式 else 語(yǔ)句2
# 條件運(yùn)算符執(zhí)行時(shí)甩骏,會(huì)先對(duì)條件語(yǔ)句中的表達(dá)式進(jìn)行求職判斷
# 如果判斷為 True ,則執(zhí)行語(yǔ)句1先慷,并返回執(zhí)行結(jié)果
# 如果判斷為 False饮笛,則執(zhí)行語(yǔ)句2,并返回執(zhí)行結(jié)果
max = a if a > b and a > c else c
print(max) # a
- 條件判斷語(yǔ)句:
# 語(yǔ)法:
if 條件表達(dá)式:
代碼塊1
舉個(gè)栗子:
x = int(input("請(qǐng)輸入012三個(gè)數(shù)字"))
if x == 0:
print(111)
if x == 2:
print(222)
if x == 1:
print(333)
- 代碼塊中保存著一組代碼论熙,同一個(gè)代碼塊中的代碼福青,要么都執(zhí)行,要么都不執(zhí)行;
- 代碼塊以縮進(jìn)開(kāi)始无午,直到代碼恢復(fù)到之前的縮進(jìn)級(jí)別時(shí)結(jié)束二蓝;
- 代碼塊就是一種為代碼分組的的機(jī)制
1.2 input() 函數(shù)
- 作用: input() 函數(shù)主要用來(lái)獲取用戶(hù)的輸入
- input()調(diào)用后,程序會(huì)立即暫停,等待用戶(hù)輸入
- 用戶(hù)輸入完成后,點(diǎn)擊回車(chē)程序才會(huì)繼續(xù)向下執(zhí)行
- 用戶(hù)輸入完成以后吃粒,其所輸入的內(nèi)容會(huì)以返回值的形式返回崇堰。
- 特性1: input 接收到的數(shù)據(jù)一定是一個(gè)字符串,響應(yīng)和 int 類(lèi)型的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,一定要進(jìn)行類(lèi)型轉(zhuǎn)換。
a = input("請(qǐng)輸入數(shù)字:")
print(type(a))
----------輸出---------
請(qǐng)輸入數(shù)字: 111
<class 'str'>
- 類(lèi)型轉(zhuǎn)換
- int() 將字符串強(qiáng)制轉(zhuǎn)換為整數(shù)類(lèi)型
b = int(input("請(qǐng)輸入數(shù)字:"))
print(type(b))
---------輸出---------
請(qǐng)輸入數(shù)字: 222
<class 'int'>
- 特性2: input() 函數(shù)是阻塞的,阻塞程序的作用牡借。如果不輸入,后面的程序永遠(yuǎn)不執(zhí)行袭异。
print("開(kāi)始錄入信息")
name = input("請(qǐng)輸入你的姓名:")
print(name)
-------輸出-------
開(kāi)始錄入信息
請(qǐng)輸入你的姓名:
1.3 if-else 語(yǔ)句 <非此即彼>
- 語(yǔ)法:
if 條件表達(dá)式 :
代碼塊1
else:
代碼塊2
- 執(zhí)行過(guò)程:
- if-else 語(yǔ)句在執(zhí)行時(shí)钠龙,先對(duì)if 后的條件表達(dá)式進(jìn)行請(qǐng)求判斷
- 如果為 True , 則執(zhí)行 if 后的代碼塊1
- 如果為 False,則執(zhí)行 else 后的代碼塊2
x = int(input("請(qǐng)輸入012三個(gè)數(shù)字:"))
if x == 0:
print("1111")
else:
print("2222")
1.4 if-elif-else 語(yǔ)句
- 語(yǔ)法:
if 條件表達(dá)式1:
代碼塊1
elif 條件表達(dá)式2:
代碼塊2
else:
代碼塊3
-
執(zhí)行流程:
- if-elif-else語(yǔ)句在執(zhí)行時(shí)御铃,會(huì)自上而下依次對(duì)條件表達(dá)式進(jìn)行求值判斷碴里,
- 如果表達(dá)式的結(jié)果為T(mén)rue ,則執(zhí)行當(dāng)前代碼塊,然后語(yǔ)句結(jié)束上真;
- 如果表達(dá)式的結(jié)果為False 咬腋,則繼續(xù)向下判斷,直到找到 True 為止睡互;
- 如果所有的表達(dá)式都為 False, 則執(zhí)行 else 后的代碼塊根竿。
總結(jié): if-elif-else 中只會(huì)有一個(gè)代碼塊會(huì)執(zhí)行。
案例分析:
salary = 40000
if salary > 30000:
print('有錢(qián)任性')
elif salary >= 20000:
print('解決溫飽')
elif salary >= 10000:
print('月薪過(guò)萬(wàn)')
elif salary >= 5000:
print('新手小白')
else:
print('吃土吧')
-------輸出------
有錢(qián)任性
特性: if-elif-else 條件流程是從上到下就珠,按順序執(zhí)行的寇壳;如果前面的條件滿(mǎn)足,后面的停止妻怎,不再進(jìn)行判斷壳炎。永遠(yuǎn)有一個(gè)滿(mǎn)足條件。
補(bǔ)救方式:在條件表達(dá)式添加邏輯運(yùn)算符蹂季,來(lái)提高代碼嚴(yán)謹(jǐn)性冕广。
value = 18000
if value >= 30000:
print("有錢(qián)任性")
elif value >= 5000 and value < 10000:
print("新手小白")
elif value >= 20000 and value < 30000:
print("解決溫飽")
elif value >= 10000 and value < 20000:
print("月薪過(guò)萬(wàn)")
else:
print("吃土吧")
- 有了上面邏輯判斷疏日,這樣不管elif條件判斷位置如何變化偿洁,最終輸出結(jié)果都一樣。
二沟优、while循環(huán)
2.1 while 語(yǔ)句
- 循環(huán)語(yǔ)句可以使指定的代碼塊重復(fù)指定的次數(shù)涕滋,循環(huán)語(yǔ)句分為2種: while 循環(huán) 和 for循環(huán)。
- 語(yǔ)法:
while 條件表達(dá)式:
代碼塊
else:
代碼塊
- 執(zhí)行過(guò)程:
- 只要條件表達(dá)式結(jié)果為 True 挠阁,就執(zhí)行代碼塊宾肺。
- 一直會(huì)無(wú)線(xiàn)循環(huán)溯饵,即死循環(huán)。直到條件表達(dá)式結(jié)果為 False ,循環(huán)才結(jié)束锨用。
- while循環(huán)三要素:
- 設(shè)定一個(gè)初始值丰刊;
- 對(duì)初始值進(jìn)行條件判斷,增加一個(gè)條件語(yǔ)句增拥,對(duì)初始值進(jìn)行一個(gè)條件表達(dá)式的限制啄巧。
- 初始值的自增長(zhǎng)。
舉個(gè)栗子:
i = 0
while i < 5:
print(i)
i += 1 # i = i + 1
-----執(zhí)行-----
0
1
2
3
4
可以看到掌栅,上面添加了上面初始值秩仆,和條件表達(dá)式限制之后,wile 循環(huán)不再進(jìn)入死循環(huán)猾封。
例題練習(xí)
- 求1-100內(nèi)的所有的偶數(shù)相加
方法一:
(1) 首先獲取 1-100以?xún)?nèi)的數(shù)
(2) 然后取出偶數(shù)
(3) 偶數(shù)相加
i = 0
j = 0
while i < 100:
# print(i)
i += 2
if i % 2 == 0:
j += i # 所有偶數(shù)相加之和
# print(j)
print(j)
方法二:直接取偶數(shù)相加
# 每個(gè)變量的值在內(nèi)存中為:id , 內(nèi)存地址澄耍,value 三部分。
# 上面比較 value % 2 == 0 晌缘,換種思路齐莲,直接 讓i=0, i=i+2磷箕,這樣是不是直接就取的偶數(shù)
i = 0
j = 0
while i < 100:
i += 2 # 直接自增2 : 0铅搓,2,4搀捷,6星掰,8……
j += i # 偶數(shù)相加
print(j)
--------輸出--------
2550
- 打印 *, 每行5個(gè),沒(méi)排5個(gè)嫩舟。
# print() 函數(shù)模式使用 \n 作為換行符氢烘。那么我們是不是可以,每打印5個(gè)家厌,就換行一次播玖,這樣循環(huán)5次,就實(shí)現(xiàn)了:
i = 0
while i < 5:
print("*", end=' ')
print("*", end=' ')
print("*", end=' ')
print("*", end=' ')
print("*", end=' ')
print()
i += 1
# 這樣可以實(shí)現(xiàn)饭于,但是中間部分連續(xù)打印5次蜀踏,都重復(fù)執(zhí)行,也可以使用一個(gè)while循環(huán)來(lái)實(shí)現(xiàn)掰吕。
i = 0
while i < 5:
j = 0
while j < 5:
print("*", end=' ')
j += 1
print()
i += 1
------輸出------
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
- 打印 下面圖案
*
* *
* * *
* * * *
* * * * *
分析:每行打印多少個(gè)等于行號(hào)個(gè)數(shù)果覆,且和上題種情況相似。只要判斷每行打印的個(gè)數(shù)即可殖熟。
i=0局待,i行打印 i+1個(gè)。
i = 0
while i < 5:
j = 0
while j < i+1:
print("*", end=' ')
j += 1
print()
i += 1
-----輸出----
*
* *
* * *
* * * *
* * * * *
- 打印下面圖案
* * * * * i = 0 j < 5 # 從上題中得出的規(guī)律
* * * * i = 1 j < 4 # 那么打印4個(gè),就是 j < 4,j<5-i
* * * i = 2 j < 3
* * i =3 j < 2
* i = 4 j <1
分析: i =0 ,j <5, i 加上 j 小于的數(shù)都等于5 钳榨,即 j < 5-i,那么打印4行呢 舰罚,i=1 ,j <4 ;3 行,i=2,j<3
i = 0
while i < 5:
j = 0 # j 重新賦值
while j >5-i:
print("*", end=' ')
print()
i += 1
--------輸出--------
* * * * *
* * * *
* * *
* *
*
作業(yè)
- 求 1000 以?xún)?nèi)的水仙花數(shù)
科普:什么是水仙花數(shù)薛耻?
水仙花數(shù)营罢,指一個(gè)3位數(shù),它的每個(gè)位上的數(shù)字的3次冥之和等于它本身饼齿。例如:1^3 + 5^3 + 3^3=153
方法一:
思路:
1.有取值范圍愤钾,因此可以采用while循環(huán),水仙花數(shù)位三位數(shù)候醒,定義初始值count=100
2.再根據(jù)規(guī)律能颁,根據(jù)賦值運(yùn)算符取出水仙花數(shù)的每個(gè)位數(shù),百位整除倒淫,十位對(duì)100取余再對(duì)10整除伙菊,個(gè)位:先對(duì)100取余再對(duì)10取余即可得出個(gè)位。
count = 100
while count < 1000:
count += 1
x = int(count / 100)
y = int(count % 100 / 10)
z = int(count % 100 % 10)
if x < 10 and count == x**3 + y**3+ z**3:
print(x,y,z,"水仙花數(shù):",count)
方法二:切片
思路:直接把水仙花數(shù) i 看作一個(gè)字符串敌土,根據(jù)索引取值再int()類(lèi)型轉(zhuǎn)換镜硕,根據(jù)公式計(jì)算,這樣是不是更簡(jiǎn)單呢 返干?
i = 100
while i < 1000:
a = str(i)
if int(a[0])**3 + int(a[1])**3 + int(a[2]) == i:
print(a)
i += 1
--------輸出--------
1 5 3 水仙花數(shù): 153
3 7 0 水仙花數(shù): 370
3 7 1 水仙花數(shù): 371
4 0 7 水仙花數(shù): 407
2. 打印99乘法表
思路:嵌套循環(huán)
i = 1
while i < 10:
j = 1
while j < 1+i:
print('%d * %d = %d' % (j,i,j*i),end='\t')
j += 1
i += 1
print('\n')
---輸出---
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
- 獲取用戶(hù)輸入的任意數(shù)兴枯,判斷是否是質(zhì)數(shù) ?
- 質(zhì)數(shù):又稱(chēng)素?cái)?shù)矩欠,一個(gè)大于1 的自然數(shù)财剖,除了1和它自身外,不能被其他自然數(shù)整數(shù)的數(shù)叫質(zhì)數(shù)癌淮。
num = int(input("請(qǐng)輸入一個(gè)數(shù)字:"))
if 1 < num <= 2:
print(num,'是質(zhì)數(shù)')
elif num > 2:
i = 2 # 定義因子
while i < num:
if num % i == 0:
print(num,"不是質(zhì)數(shù)")
break
i += 1
else:
print(num, '是質(zhì)數(shù)')
else:
print(num,"不是質(zhì)數(shù)")
---------輸出--------
請(qǐng)輸入一個(gè)數(shù)字:7
7 是質(zhì)數(shù)
請(qǐng)輸入一個(gè)數(shù)字:1
1 不是質(zhì)數(shù)
請(qǐng)輸入一個(gè)數(shù)字:2
2 是質(zhì)數(shù)
請(qǐng)輸入一個(gè)數(shù)字:4
4 不是質(zhì)數(shù)
- 猜拳游戲:
- 出拳 玩家: 手動(dòng)輸入 電腦:隨機(jī)輸入
- 判斷輸贏:玩家獲勝 電腦勝 平局
- 分析: 石頭=0 剪刀=1 布=2
- 電腦隨機(jī)出數(shù)躺坟,從【0,1乳蓄,2】中出一個(gè)隨機(jī)數(shù)咪橙。
print("==========出拳游戲============")
import random
while True:
p = input("請(qǐng)輸入石頭,剪刀,布:")
if p != "石頭" and p != "剪刀" and p != "布":
print("輸入無(wú)效,請(qǐng)重新輸入虚倒!")
else:
s = random.randint(0,2)
if s == 0:
print("玩家出拳:",p,"電腦出拳:%s" % '石頭')
elif s == 1:
print("玩家出拳:",p,"電腦出拳:%s" % '剪刀')
else:
print('玩家出拳:',p,"電腦出拳:%s" % '布')
剪刀 = 1
布 = 2
if (p =="石頭" and s== 1) or (p == "剪刀" and s == 2) or (p == "布" and s == 0):
print("%s獲勝" % "玩家")
elif (p == "石頭" and s == 2) or (p == "剪刀" and s == 0) or (p == "布" and s == 1):
print('%s獲勝'% "電腦")
else:
print('平局')