2022.3.8筆記總結
2022.3.8學習筆記
- 昨日作業講解
- while+else
- 死迴圈與while的巢狀
- for迴圈基本使用
- range關鍵字
- for迴圈補充(break、continue、else)
- for迴圈的巢狀
- 基本資料型別及內建方法
一、昨日作業講解
注意:前期作為小白的我,要先用中文寫出步驟,之後翻譯成python程式碼,另外編寫程式碼不要考慮優化,實現功能即可。
!!!所以這裡作業重新加註釋寫一遍
要點:先搭建主題功能,再配套優化
作業:
要求:編寫一個猜年齡的遊戲
基本要求:
如果不對的情況下可以猜三次 如果對了直接結束
拔高練習:
三次機會用完之後提示使用者是否繼續猜測 如果使用者輸入了y則再給使用者三次機會 如果使用者輸入n則直接結束
# 1.定義真實的年齡 real_age = 18 # 2.由於需要計數,因此先設定一個計數器初始值 count = 1 # 2.需要用到迴圈,判斷條件是否正確,輸入正確則直接結束迴圈 while count < 4: # 設定計數為3次,條件滿足進入迴圈 # 3.進入迴圈後需要判斷使用者輸入是否正確,因此需要先獲取使用者輸入資訊 guess_age = input('請猜年齡>>>:') if guess_age == str(real_age): # 判斷年齡是否正確 print('答對了!') # 根據要求答對了需要直接結束因此加break break else: count += 1 # 猜錯後顯示答錯了,需要計數1次,因為進入else就說明已經答錯了,所以需要放在print前面,否則會多執行1次print('答錯了') print('答錯了!') while count == 4: # count = 3 時代表使用者輸入了3次,這裡加入迴圈 # 4.答錯了之後要求詢問使用者是否需要再來3次,因此需要加入判斷,並且需要與使用者互動,需要加入一個input變數 ask= input('是否再來3次y/n>>>:') if ask == 'y': # 加入判斷 count = 1 # 選擇y則重新計數 elif ask == 'n': # 選擇n結束本層 count = 5 else: print('錯誤指令')
二、while迴圈補充
1.while與else
while與else的關係跟if...else不同,它是並列關係,就是說while正常迴圈結束之後,會緊接著執行else下的子程式碼,因此:
(1)while與else連用沒有從屬以及互斥關係,兩者按照順序結構執行
(2)當while是被人為中斷(break),則不執行else的子程式碼
2.死迴圈
死迴圈的意思是while下的子程式碼無限重複執行,而且會給計算機效能造成負擔甚至破壞,如下
count = 1
while True:
count += 2
print(count)
這樣的結果就是count = 1+2+2+2...無限迴圈,因此沒有結果,而且無法自動退出迴圈,所以再寫程式碼的時候需要注意,使用迴圈程式碼不是為了無限迴圈,而是為了達成某種條件結束執行。
3.while巢狀
舉例,需要編寫使用者登入程式,登入成功以後再獲取使用者指令並列印,程式碼如下:
tag = True
while tag
username = input('username>>>:')
password = input('password>>>:')
if username == 'jason' and password == '123':
print('登入成功!')
while tag
question = input('請輸入指令(exit退出)>>>:')
print(question)
if question == 'exit'
tag = False
else:
print('登入失敗!')
這裡需要注意,當while多層巢狀時,需要退出所有迴圈,有幾種形式:
(1)while條件設定為資料為布林值的變數:while tag
(2)while前一行設定初始條件,可以是帶數字的變數如count = 1,這樣只要想退出所有while迴圈,只要讓此變數count=任意其他值就可以退出while迴圈
三、for迴圈
for迴圈能完成的程式碼,while迴圈都能做到,但是for在某些方面更加簡單,比如說迴圈取值的時候。
for迴圈結構:
for+變數名+in+迴圈物件
迴圈物件可以是:字串、列表、字典、元組、集合等
作用:for迴圈每1次迴圈都是在迴圈物件中將其中一個元素賦值給變數名,一次迴圈賦值一次,知道元素被取完
eg(這裡以列表為例):
name_list = ['jason', 'mark', 'tony', 'tank']
for i in name_list:
print(i)
jason
mark
tony
tank # 執行結果為name_list的所有元素都被i取完
for迴圈補充:
# for + break
break為結束本層迴圈
# for + continue
continue為結束本次迴圈,直接開始下一次
# for + else
for迴圈正常結束後執行else的子程式碼
因此可以看出,for迴圈的結束指令與while相差無幾!
range關鍵字
(1)range(10)
表示[0,1,2,3,4,5,6,7,8,9],range左邊預設取0,右邊10不取
(2)range(1,10)
表示[1,2,3,4,5,6,7,8,9,],1到9的資料集
(3)range(1,10,2)
表示[1,3,5,7,9],後面的2表示步長,代表1到10之間每隔1個數取值,表示每相鄰2個數差值為2
利用for迴圈和range可以迴圈取值,如下:
for i in range(10):
print(i) # 執行結果為1-9的數字
四、資料型別內建方法
1.int
(1)型別轉換
res = int('123') # 括號裡面必須是數字型別的字串等
(2)進位制數轉換
整型十進位制轉其他進位制:
bin(100) # 十進位制轉二進位制
oct(100) # 十進位制轉八進位制
hex(100) # 十進位制轉十六進位制
其他進位制數轉十進位制:
int('0b1100100',2) # 二進位制轉十進位制,2代表二進位制
2.float
型別轉換
res = float('11.11') # 字串型別數字轉浮點型
print(float('11')) # 執行結果為11.0(浮點型數字)
3.str
型別轉換:
可以轉換所有的資料型別
字串:
s1 = 'hello world'
(1)索引取值
s1[0],所選值為h
(2)切片操作
s1[1:5],所選值為ello(顧頭不顧尾,5所在索引的值不取)
(3)步長
s1[1:5:2],所選值為索引1-4之間間隔為1的數,即el,這個跟range步長取值比較相似,可以類比
(4)索引取切片拓展(倒著來)
s1[-1], 表示獲取最後一個字元,即d
s1[-5:-1],表示-5到-2之間的值,即worl
s1[-1:-5:-1],本來括號內數字應當是由小到大,即從左到右,但是通過步長改為-1,可以將索引倒過來取值,即dlro
(5)統計字串中字元的個數,空格也是字元
len(s1),表示s1字元的長度,結果為11,包含空格
(6)成員運算
print('11' in s1)
True # 結果為True
(7)strip移除字串首尾指定的字元(使用頻率高)
name = '$$jason$$'
name.strip(),表示移除前後字串
name.strip('$'),表示移除前後$,結果為'jason'
name.lstrip('$'),表示移除左邊$,結果為'jason$$'
name.rstrip('$'),表示移除右邊$,結果為'$$jason'
(8)split按照指定的字元切割字串
data = 'jason|123|dbj'
data.split('|'),表示以'|'分割字串data,並且分割後是一個列表
這裡可以結合解壓賦值進行賦值
data = 'jason|123|dbj'
name, pwd, hobby = data.split('|') # 解壓賦值
print(data.split('|', maxsplit=1)) # 結果為['jason','123|dbj'],預設從左往右切割,maxsplit按照字面意思理解就是最大切割數,為1則是切割1次
print(data.rsplit('|', maxsplit=1)) # 結果為['jason|123', 'DBJ'],rsplit表示從右往左切割,同理只切割1次
五、今日作業解答
'''
作業練習:
編寫一個使用者登入程式
要求最多嘗試失誤三次 過期自動提示並可重置嘗試次數
使用者登入成功之後進入內部迴圈 使用者輸入什麼就列印什麼 並給使用者提供一個結束程式的特殊指令
獲取使用者輸入的使用者名稱和密碼可以處理首尾空格
使用者的使用者名稱和密碼使用變數儲存 通過程式獲取使用者名稱和密碼比對
data = 'jason|123'
'''
data = 'jason|123'
real_info = data.split('|')
count = 1
tag = True
while tag:
username = input('輸入使用者名稱>>>:').strip()
password = input('輸入密碼>>>:').strip()
info = [username,password]
if info == real_info:
print('登陸成功!')
while tag:
instruction = input('請輸入您的指令>>>:')
if instruction == '退出':
tag = False
else:
print(instruction)
else:
count += 1
if count == 4:
while tag:
ask = input('已錯誤3次,是否再來3次(是/否)>>>:')
if ask == '是':
count = 1
break
elif ask == '否':
tag = False
else:
print('對不起,錯誤指令!')
else:
print('對不起使用者名稱或密碼錯誤!')