5、Python基礎(chǔ)之if條件判斷和while循環(huán)

一寇窑、條件判斷

1.1 條件判斷語(yǔ)句(if 語(yǔ)句)

  • 定義: 條件判斷語(yǔ)句就是if語(yǔ)句
    • 重點(diǎn) 需要注意條件判斷語(yǔ)句和條件運(yùn)算符的區(qū)別:
      • 條件運(yùn)算符是有返回結(jié)果的,而條件判斷語(yǔ)句(if語(yǔ)句)是沒(méi)有返回結(jié)果的箩张。
  • 條件運(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)三要素:
  1. 設(shè)定一個(gè)初始值丰刊;
  2. 對(duì)初始值進(jìn)行條件判斷,增加一個(gè)條件語(yǔ)句增拥,對(duì)初始值進(jìn)行一個(gè)條件表達(dá)式的限制啄巧。
  3. 初始值的自增長(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. 求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
  1. 打印 *, 每行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
------輸出------
* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * *
  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
-----輸出----
* 
* * 
* * * 
* * * * 
* * * * * 
  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è)

  1. 求 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  
  1. 獲取用戶(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ù)
  1. 猜拳游戲:
  • 出拳 玩家: 手動(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('平局')
圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末美侦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子魂奥,更是在濱河造成了極大的恐慌菠剩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捧弃,死亡現(xiàn)場(chǎng)離奇詭異赠叼,居然都是意外死亡擦囊,警方通過(guò)查閱死者的電腦和手機(jī)违霞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)嘴办,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人买鸽,你說(shuō)我怎么就攤上這事涧郊。” “怎么了眼五?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵妆艘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我看幼,道長(zhǎng)批旺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任诵姜,我火速辦了婚禮汽煮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棚唆。我一直安慰自己暇赤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布宵凌。 她就那樣靜靜地躺著鞋囊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞎惫。 梳的紋絲不亂的頭發(fā)上溜腐,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音瓜喇,去河邊找鬼逗扒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛欠橘,可吹牛的內(nèi)容都是我干的矩肩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肃续,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼黍檩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起始锚,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刽酱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瞧捌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棵里,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡润文,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殿怜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片典蝌。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖头谜,靈堂內(nèi)的尸體忽然破棺而出骏掀,到底是詐尸還是另有隱情,我是刑警寧澤柱告,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布截驮,位于F島的核電站,受9級(jí)特大地震影響际度,放射性物質(zhì)發(fā)生泄漏葵袭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一乖菱、第九天 我趴在偏房一處隱蔽的房頂上張望坡锡。 院中可真熱鬧,春花似錦块请、人聲如沸娜氏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贸弥。三九已至,卻和暖如春海渊,著一層夾襖步出監(jiān)牢的瞬間绵疲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工臣疑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盔憨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓讯沈,卻偏偏與公主長(zhǎng)得像郁岩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缺狠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容