Python的環境搭建與語法入門_3
阿新 • • 發佈:2021-09-05
流程控制語句簡介
Python程式碼在執行時是按照自上向下順序執行的。
通過流程控制語句,可以改變程式的執行順序,也可以讓指定的程式反覆執行多次
流程控制語句分成兩大類:條件判斷語句,迴圈語句
input函式
# input()函式 # 該函式用來獲取使用者的輸入 # input()呼叫後,程式會立即暫停,等待使用者輸入 # 使用者輸入完內容以後,點選回車程式才會繼續向下執行 # 使用者輸入完成以後,其所輸入的的內容會以返回值得形式返回 # 注意:input()的返回值是一個字串 # input()函式中可以設定一個字串作為引數,這個字串將會作為提示文字顯示 # a = input('請輸入任意內容:') # print('使用者輸入的內容是:',a) # input()也可以用於暫時阻止程式結束 # 獲取使用者輸入的使用者名稱 username = input('請輸入你的使用者名稱:') # 判斷使用者名稱是否是admin if username == 'admin' : print('歡迎管理員光臨!') else : print('歡迎使用者光臨')
條件判斷語句(if語句)
# 條件判斷語句(if語句) # 語法:if 條件表示式 : # 程式碼塊 # 執行的流程:if語句在執行時,會先對條件表示式進行求值判斷, # 如果為True,則執行if後的語句 # 如果為False,則不執行 # 預設情況下,if語句只會控制緊隨其後的那條語句,如果希望if可以控制多條語句, # 則可以在if後跟著一個程式碼塊 # 程式碼塊 # 程式碼塊中儲存著一組程式碼,同一個程式碼塊中的程式碼,要麼都執行要麼都不執行 # 程式碼塊就是一種為程式碼分組的機制 # 如果要編寫程式碼塊,語句就不能緊隨在:後邊,而是要寫在下一行 # 程式碼塊以縮排開始,直到程式碼恢復到之前的縮排級別時結束 # 魯迅說過: # 世上本來沒有路,走的人多了自然就有了! # xxxx # yyyy.... # 縮排有兩種方式,一種是使用tab鍵,一種是使用空格(四個) # Python的官方文件中推薦我們使用空格來縮排 # Python程式碼中使用的縮排方式必須統一 # "translate_tabs_to_spaces": true, # if False : print('你猜我出來麼?') num = 10 # if num > 10 : print('num比10大!') # print('誰也管不了我') if False : print(123) print(456) print(789) print(101112) # print('hello') num = 28 # 可以使用邏輯運算子來連線多個條件, # 如果希望所有條件同時滿足,則需要使用and # 如果希望只要有一個條件滿足即可,則需要使用or # if num > 10 and num < 20 : # print('num比10大,num比20小!') # if 10 < num < 20 : # print('num比10大,num比20小!') # 在命令列讓使用者輸入一個使用者名稱,獲取使用者輸入,並進行判斷 # 如果使用者輸入的使用者名稱是admin,則顯示歡迎管理員光臨 # 如果使用者輸入的是其他的使用者名稱,則什麼也不做 user_name = input('請輸入一個使用者名稱:') if user_name == 'admin' : print('歡迎管理員光臨') else : print('歡迎使用者光臨')
if-else
# 讓使用者在控制檯中輸入一個年齡 # age = int(input('請輸入你的年齡:')) # 如果使用者的年齡大於18歲,則顯示你已經成年了 # if age >= 18 : # print('你已經成年了~~~') # if-else語句 # 語法: # if 條件表示式 : # 程式碼塊 # else : # 程式碼塊 # 執行流程: # if-else語句在執行時,先對if後的條件表示式進行求值判斷 # 如果為True,則執行if後的程式碼塊 # 如果為False,則執行else後的程式碼塊 age = 7 if age > 17 : print('你已經成年了~~') else : print('你還未成年~~')
if-elif-else
# if-elif-else語句
# 語法:
# if 條件表示式 :
# 程式碼塊
# elif 條件表示式 :
# 程式碼塊
# elif 條件表示式 :
# 程式碼塊
# elif 條件表示式 :
# 程式碼塊
# else :
# 程式碼塊
#
# 執行流程:
# if-elif-else語句在執行時,會自上向下依次對條件表示式進行求值判斷,
# 如果表示式的結果為True,則執行當前程式碼塊,然後語句結束
# 如果表示式的結果為False,則繼續向下判斷,直到找到True為止
# 如果所有的表示式都是False,則執行else後的程式碼塊
# if-elif-else中只會有一個程式碼塊會執行
age = 210
# if age > 200 :
# print('活著可真沒勁呢!')
# elif age > 100 :
# print('你也是老大不小了!')
# elif age >= 60 :
# print('你已經退休了!')
# elif age >= 30 :
# print('你已經是中年了!')
# elif age >= 18 :
# print('你已經成年了!')
# else :
# print('你還是個小孩!')
age = 68
if age >= 18 and age < 30 :
print('你已經成年了!')
elif age >= 30 and age < 60 :
print('你已經中年了!')
elif age >= 60 :
print('你已經退休了!')
if練習
練習1:
編寫一個程式,獲取一個使用者輸入的整數。
然後通過程式顯示這個數是奇數還是偶數。
num = int(input('請輸入一個整數:'))
if num%2==0 :
print('這個數是奇數')
else :
print('這個數是偶數')
練習2:
編寫一個程式,檢查任意一個年份是否是閏年。
如果一個年份可以被4整除不能被100整除,或者可以被400整除,這個年份就是閏年
year = int(input('請輸入一個年份:'))
if (year%4==0 and year%100!=0) or (year%400==0) :
print('該年份是閏年')
else :
print('該年份不是閏年')
練習3:
我家的狗5歲了,5歲的狗相當於多大年齡的人呢?
其實非常簡單,狗的前兩年每一年相當於人類的10.5歲,
然後每增加一年就增加四歲。那麼5歲的狗相等於人類的
年齡就應該是10.5+10.5+4+4+4 = 33歲
編寫一個程式,獲取使用者輸入的狗的年齡,然後通過程式
顯示其相當於人類的年齡。如果使用者輸入負數,
請顯示一個提示資訊
age = float(input('請輸入狗的年齡:'))
if 0<age<=2 :
age = 10.5 * age
elif age >2 :
age = 10.5 * 2 + (age -2)*4
elif age < 0 :
print('輸入的年齡不合法!')
print('相當於人類',age,'歲')
練習4:
從鍵盤輸入小明的期末成績:
當成績為100時,'獎勵一輛BMW'
當成績為[80-99]時,'獎勵一臺iphone'
當成績為[60-79]時,'獎勵一本參考書'
其他時,什麼獎勵也沒有
record = int(input('請輸入成績:'))
if 0<=record<100 :
if record == 100 :
print('真棒,獎勵一輛BMW')
elif 80<=record<=99 :
print('很不錯,獎勵一臺iphone')
elif 60<=record<=79 :
print('還可以,獎勵一本參考書')
else :
print('還要加油哦')
練習5:
大家都知道,男大當婚,女大當嫁。那麼女方家長要嫁女兒,當然要提出一定的條件:
高:180cm以上; 富:1000萬以上; 帥:500以上;
如果這三個條件同時滿足,則:'我一定要嫁給他'
如果三個條件有為真的情況,則:'嫁吧,比上不足,比下有餘。'
如果三個條件都不滿足,則:'不嫁!'
gao = int(input('身高(cm):'))
fu = int(input('富(萬):'))
shuai = int(input('帥:'))
if gao >= 180 and fu >1000 and shuai >= 500 :
print('我一定要嫁給他')
elif gao >= 180 or fu >1000 or shuai >= 500 :
print('嫁吧,比上不足,比下有餘。')
else :
print('不嫁!')
迴圈語句
# 迴圈語句
# 迴圈語句可以使指定的程式碼塊重複指定的次數
# 迴圈語句分成兩種,while迴圈 和 for迴圈
# while迴圈
# 語法:
# while 條件表示式 :
# 程式碼塊
# else :
# 程式碼塊
# 執行流程:
# while語句在執行時,會先對while後的條件表示式進行求值判斷,
# 如果判斷結果為True,則執行迴圈體(程式碼塊),
# 迴圈體執行完畢,繼續對條件表示式進行求值判斷,以此類推,
# 直到判斷結果為False,則迴圈終止,如果迴圈有對應的else,則執行else後的程式碼塊
# 條件表示式恆為True的迴圈語句,稱為死迴圈,它會一直執行,慎用!
# while True :
# print('hello')
# 迴圈的三個要件(表示式)
# 初始化表示式,通過初始化表示式初始化一個變數
# i = 0
# # 條件表示式,條件表示式用來設定迴圈執行的條件
# while i < 10 :
# print(i)
# # 更新表示式,修改初始化變數的值
# i += 1
# 建立一個執行十次的迴圈
i = 0
while i < 10 :
i += 1
print(i,'hello')
else :
print('迴圈結束')
迴圈練習
練習1:
求100以內所有的奇數之和
i = 1
sum=0
while i<=100 :
if i%2!=0 :
sum +=i
i +=1
print('100以內所有的奇數之和是:',sum)
練習2:
求100以內所有7的倍數之和,以及個數
# 建立一個變數,用來迴圈
i = 7
# 建立一個變數,來儲存結果
result = 0
# 建立一個計數器,用來記錄迴圈執行的次數
# 計數器就是一個變數,專門用來記錄次數的變數
count = 0
while i < 100:
# 為計數器加1
count += 1
result += i
i += 7
print('總和為:',result,'總數量為:',count)
練習3:
水仙花數是指一個 n 位數(n≥3 ),
它的每個位上的數字的 n 次冪之和等於它本身
(例如:1**3 + 5**3 + 3**3 = 153)。
求1000以內所有的水仙花數
i = 100
while i<1000 :
a = i%10 #個位
b = i//10%10 #十位(//10 表示除10取整)
c = i//100%10 #百位
if i == a**3 +b**3 +c**3 :
print(i,'是水仙花數')
i +=1
練習4:
獲取使用者輸入的任意數,判斷其是否是質數。
質數是隻能被1和它自身整除的數,1不是質數也不是合數。
num = int(input('輸入一個任意的大於1的整數:'))
i = 2
# 建立一個變數,用來記錄num是否是質數,預設認為num是質數
flag = True
while i < num:
# 判斷num能否被i整除
# 如果num能被i整除,則說明num一定不是質數
if num % i == 0 :
# 一旦進入判斷,則證明num不是質數,則需要將flag修改為false
flag = False
i += 1
if flag :
print(num,'是質數')
else :
print(num,'不是質數')
迴圈巢狀
練習1:
列印99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
... 9*9=81
i = 1
while i<=9 :
j=1
while j<=i :
print(' ',j,'*',i,'=',i*j,end='')#end='' 表示換行
j +=1
print()
i += 1
練習2:
求100以內所有的質數
i = 2
while i <= 100:
# 建立一個變數,記錄i的狀態,預設認為i是質數
flag = True
# 判斷i是否是質數
# 獲取所有可能成為i的因數的數
j = 2
while j < i:
# 判斷i能否被j整除
if i % j == 0:
# i能被j整除,證明i不是質數,修改flag為False
flag = False
j += 1
# 驗證結果並輸出
if flag :
print(i)
i += 1
練習3:
# 在控制檯中列印如下圖形
# *****
# *****
# *****
# *****
# *****
#
# 建立一個迴圈來控制圖形的高度
# 迴圈巢狀時,外層迴圈沒執行一次,記憶體迴圈就要執行一圈
# i = 0
# while i < 5:
# # 建立一個內層迴圈來控制圖形的寬度
# j = 0
# while j < 5:
# print("* ",end='')
# j += 1
# print()
# i += 1
#
# * j<1 i=0
# ** j<2 i=1
# *** j<3 i=2
# **** j<4 i=3
# ***** j<5 i=4
#
# *****
# ****
# ***
# **
# *
i = 0
while i < 5:
j = 0
while j < i + 1:
print("* ",end='')
j += 1
print()
i += 1
迴圈巢狀-練習2的優化
# 模組,通過模組可以對Python進行擴充套件
# 引入一個time模組,來統計程式執行的時間
from time import *
# time()函式可以用來獲取當前的時間,返回的單位是秒
# 優化前:
# 10000個數 12.298秒
# 100000個數 沒有結果
# 第一次優化
# 10000個數 1.577秒
# 100000個數 170.645秒
# 第二次優化
# 10000個數 0.068秒
# 100000個數 1.646秒
#
# 36的因數
# 2 18
# 3 12
# 4 9
# 6 6
#
# 獲取程式開始的時間
begin = time()
i = 2
while i <= 100000:
flag = True
j = 2
while j <= i ** 0.5:
if i % j == 0:
flag = False
# 一旦進入判斷,則證明i一定不是質數,此時內層迴圈沒有繼續執行的必要
# 使用break來退出內層的迴圈
break
j += 1
if flag :
# print(i)
pass
i += 1
# 獲取程式結束的時間
end = time()
# 計算程式執行的時間
print("程式執行花費了:",end - begin , "秒")
break和continue的使用
# break
# break可以用來立即退出迴圈語句(包括else)
# continue
# continue可以用來跳過當次迴圈
# break和continue都是隻對離他最近的迴圈起作用
# pass
# pass是用來在判斷或迴圈語句中佔位的
# 建立一個5次的迴圈
# i = 0
# while i < 5:
# if i == 3:
# break
# print(i)
# i += 1
# else :
# print('迴圈結束')
# i = 0
# while i < 5:
# i += 1
# if i == 2:
# continue
# print(i)
# else :
# print('迴圈結束')
i = 0
if i < 5:
pass
小遊戲 《唐僧大戰白骨精》
遊戲介紹:
1、身份選擇
① 顯示提示資訊
歡迎光臨 xxx 遊戲!
請選擇你的身份:
1.xxx
2.xxx
請選擇:x
② 根據使用者選擇來分配身份(顯示不同的提示訊息)
1.---
2.---
3.---
2、遊戲進行
① 顯示玩家的基本資訊(攻擊力 生命值)
② 顯示玩家可以進行的操作:
1、練級
- 提升玩家的攻擊力和生命值
2、打BOSS
- 玩家對BOSS進行攻擊,玩家要攻擊BOSS,BOSS對玩家進行反擊
- 計算BOSS是否被玩家消滅,玩家是否被BOSS消滅
- 遊戲結束
3、逃跑
- 退出遊戲,顯示提示資訊,遊戲結束!
程式碼實現:
# 顯示歡迎資訊
print('-'*20,'歡迎光臨《唐僧大戰白骨精》','-'*20)
# 顯示身份選擇的資訊
print('請選擇你的身份:')
print('\t1.唐僧')
print('\t2.白骨精')
# 遊戲的身份選擇
player_choose = input('請選擇[1-2]:')
# 列印一條分割線
print('-'*66)
# 根據使用者的選擇來顯示不同的提示資訊
if player_choose == '1':
# 選擇1
print('你已經選擇了1,你將以->唐僧<-的身份來進行遊戲!')
elif player_choose == '2':
# 選擇2
print('你竟然選擇了白骨精,太不要臉了,你將以->唐僧<-的身份來進行遊戲!')
else :
# 選擇3
print('你的輸入有誤,系統將自動分配身份,你將以->唐僧<-的身份來進行遊戲!')
# 進入遊戲
# 建立變數,來儲存玩家的生命值和攻擊力
player_life = 2 # 生命值
player_attack = 2 # 攻擊力
# 建立一個變數,儲存boss的生命值和攻擊力
boss_life = 10
boss_attack = 10
# 列印一條分割線
print('-'*66)
# 顯示玩家的資訊(攻擊力、生命值)
print(f'唐僧,你的生命值是 {player_life} , 你的攻擊力是 {player_attack}')
# 由於遊戲選項是需要反覆顯示的,所以必須將其編寫到一個迴圈中
while True :
# 列印一條分割線
print('-'*66)
# 顯示遊戲選項,遊戲正式開始
print('請選擇你要進行的操作:')
print('\t1.練級')
print('\t2.打BOSS')
print('\t3.逃跑')
game_choose = input('請選擇要做的操作[1-3]:')
# 處理使用者的選擇
if game_choose == '1' :
# 增加玩家的生命值和攻擊力
player_life += 2
player_attack += 2
# 顯示最新的資訊
# 列印一條分割線
print('-'*66)
# 顯示玩家的資訊(攻擊力、生命值)
print(f'恭喜你升級了!,你現在的生命值是 {player_life} , 你的攻擊力是 {player_attack}')
elif game_choose == '2' :
# 玩家攻擊boss
# 減去boss的生命值,減去的生命值應該等於玩家的攻擊力
boss_life -= player_attack
# 列印一條分割線
print('-'*66)
print('->唐僧<- 攻擊了 ->白骨精<-')
# 檢查boss是否死亡
if boss_life <= 0 :
# boss死亡,player勝利,遊戲結束
print(f'->白骨精<-受到了 {player_attack} 點傷害,重傷不治死了,->唐僧<-贏得了勝利!')
# 遊戲結束
break
# boss要反擊玩家
# 減去玩家的生命值
player_life -= boss_attack
print(' ->白骨精<- 攻擊了 ->唐僧<-')
# 檢查玩家是否死亡
if player_life <= 0 :
# 玩家死亡
print(f'你受到了 {boss_attack} 點傷害,重傷不治死了!GAME OVER')
# 遊戲結束
break
elif game_choose == '3' :
# 列印一條分割線
print('-'*66)
# 逃跑,退出遊戲
print('->唐僧<-一扭頭,撒腿就跑!GAME OVER')
break
else :
# 列印一條分割線
print('-'*66)
print('你的輸入有誤,請重新輸入!')