1. 程式人生 > 其它 >Python的環境搭建與語法入門_3

Python的環境搭建與語法入門_3

流程控制語句簡介

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('你的輸入有誤,請重新輸入!')