垃圾回收機制
"""
有一些語言 記憶體空間的申請和釋放都需要程式設計師自己寫程式碼才可以完成
但是python卻不需要 通過垃圾回收機制自動管理
"""
1.引用計數
name = 'jimmy' 數據值jimmy身上的引用計數為1
name1 = name 數據值jimmy身上的引用計數加一 為2
del name1 數據值jimmy身上的引用計數減一 為1
當數據值身上的引用計數為0的時候 就會被垃圾回收機制當做垃圾回收掉
當數據值身上的引用計數不為0的時候 永遠不會被垃圾回收機制回收
2.標記清除
主要針對循環引用問題
l1 = [11, 22] # 引用計數為1
l2 = [33, 44] # 引用計數為1
l1.append(l2) # l1 = [11, 22, l2列表] 引用計數為2
l2.append(l1) # l2 = [33, 44, l1列表] 引用計數為2
del l1 # 斷開變數名l1與列表的綁定關係 引用計數為1
del l2 # 斷開變數名l2與列表的綁定關係 引用計數為1
當記憶體占用達到臨界值的時候 程序會自動停止 然後掃描程序中所有的數據
並給只產生循環引用的數據打上標記 之後一次性清除
3.分代回收
垃圾回收機制的頻繁運行也會損耗各項資源
新生代、青春代、老年代(越往下檢測頻率越低)
流程控制理論
流程控制>>>:控制事物的執行流程
事物執行流程總共可以分為三種
1.順序結構
從上往下依次執行 之前所編寫的代碼都屬於該結構
2.分支結構
事物的執行會根據條件的不同做出不同的執行策略
3.循環結構
事物的執行會根據某個條件出現重複
ps:在代碼的世界裡 很多時候可能會出現三者混合
提示:作為小白 在學習流程控制的時候 建議做到代碼和圖形的結合
流程控制必備知識
1.python中使用代碼的縮進來表示代碼的從屬關係
從屬關係:縮進的代碼(子代碼)是否執行取決於上面沒有縮進的
2.並不是所有的代碼都可以擁有縮進的代碼(子代碼)
if關鍵字
3.如果有多行子代碼屬於同一個父代碼 那麼這些子代碼需要保證相同的縮進量
4.python中針對縮進量沒有具體的要求 但是推薦使用四個空格(windows中tab鍵)
5.當某一行程式碼需要編寫子代碼的時候 那麼這一行程式碼的結尾肯定需要冒號
6.相同縮進量的代碼彼此之間平起平坐 按照順序結構依次執行
分支結構
1.單if分支結構
if 條件:
條件成立之後才會執行的代碼塊
ps:單if可以借助於流程圖理解
username = input('username>>>:')
if username == 'jimmy':
print('老師好')
2.if...else...分支結構
if 條件:
條件成立之後執行的子代碼
else:
條件不成立執行的子代碼
username = input('username>>>:')
if username == 'jimmy':
print('老師好')
else:
print('你不是jimmy')
3.if...elif...else分支結構
if 條件1:
條件1成立之後執行的子代碼
elif 條件2:
條件1不成立 條件2成立執行的子代碼
elif 條件3:
條件1和2都不成立 條件3成立執行的子代碼
else:
上述條件都不成立 執行的子代碼
ps:中間的elif可以寫多個、上述子代碼永遠只會走一個
score = input('請輸入學生成績>>>:')
score = int(score) # 將字串的整數轉換成整型的整數
if score >= 90:
print('優秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('一般')
elif score >= 60:
print('及格')
else:
print('重修')
4.if的嵌套使用(有點難)
age = 28
height = 170
weight = 110
is_beautiful = True
is_success = False
username = 'tony'
if username == 'tony':
print('tony看到喜歡的女生')
if age < 30 and height > 160 and weight < 150 and is_beautiful:
print('可以加您ig嗎')
if is_success:
print('逛街去')
else:
print('不好意思,我有男朋友')
else:
print('不喜歡')
else:
print('不是tony')
循環結構
就是想讓一些程式碼反覆的執行
while 條件:
條件成立之後執行的子代碼(循環體代碼)
1.先判斷條件是否成立
2.如果成立則執行循環體代碼
3.循環體代碼執行完畢後再次回到條件判斷處 判斷條件是否成立
4.如果成立 則繼續執行循環體代碼
5.按照上述規律依次執行 直到條件不成立才會結束循環體代碼的執行
# count = 1
# while count < 5:
# print('hello world')
# count += 1 # count = count + 1
# print('想不想吃飯?')
break # 強行結束循環體
while循環體代碼一旦執行到break會直接結束循環
continue # 直接跳到條件判斷處
while循環體代碼一旦執行到continue會結束本次循環 開始下一次循環
while 條件:
循環體代碼
else:
循環體代碼沒有被強制結束的情況下 執行完畢就會執行else子代碼
作業講解
1.根據用戶輸入內容列印其權限
'''
jimmy --> 超級管理員
tom --> 普通管理員
jack,rain --> 業務主管
其他 --> 普通用戶
'''
# 1.獲取用戶輸入的使用者名稱
username = input('請輸入您的使用者名稱>>>:')
# 2.判斷使用者名稱 列印不同的提示>>>:不同的條件執行不同的代碼 那麼需要使用分支結構
if username == 'jimmy':
print('超級管理員')
elif username == 'tom':
print('普通管理員')
# elif username == 'jack' or 'rain': # 錯誤寫法
# elif username == 'jack' or username == 'rain': # 正確寫法
elif username in ['jack', 'rain']: # 正確寫法
print('業務主管')
else:
print('普通用戶')
2.編寫用戶登錄程序
要求:有用戶黑名單 如果使用者名稱在黑名單內 則拒絕登錄
eg:black_user_list = ['jimmy','kevin','tony']
如果使用者名稱是黑名單以外的用戶則允許登錄(判斷使用者名稱和密碼>>>:自訂)
eg: oscar 123
# 提前定義好黑名單用戶
black_user_list = ['jerry','kevin','tony']
# 1.先獲取用戶輸入的用戶名和密碼
username = input('請輸入您的用戶名>>>:')
# 3.先判斷用戶名是否是黑名單用戶
if username in black_user_list:
print('您已經被封鎖了 無法登入')
else:
password = input('請輸入您的密碼>>>:')
# 2.判斷用戶名和密碼是否正確
if username == 'jimmy' and password == '123':
print('登入成功')
else:
print('用戶名或密碼錯誤')
3.編寫用戶登錄程序
用戶如果登錄失敗 則只能嘗試三次
用戶如果登錄成功 則直接結束程式
# 4.定義一個計數器
count_num = 1
while True:
# 6.先判斷當前嘗試了幾次
if count_num == 4:
print('很抱歉 您已經嘗試了三次')
break
# 1.獲取用戶數據
username = input('username>>>:')
password = input('password>>>:')
# 2.校驗數據是否正確
if username == 'jimmy' and password == '123':
print('登錄成功')
break # 3.結束循環體代碼
else:
print('使用者名稱或密碼錯誤')
# 5.每錯誤一次就讓計數器自增1
count_num += 1
4.猜年齡的遊戲
假設用戶的真實年齡是18 編寫一個猜年齡的遊戲 獲取用戶猜測的年齡
基本要求:可以無限制猜測 每次猜錯給出提示(猜大了 猜小了) 猜對則結束程式
拔高練習:每次猜測只有三次機會 一旦用完則提示用戶是否繼續嘗試 用戶透過輸入n或者y來表示是否繼續嘗試 如果是y則繼續給用戶三次猜測機會 否則結束程式
# 1.先定義用戶的真實年齡
real_age = 18
# 8.定義計數器
count_num = 1
# 6.添加循環結構
while True:
# 10.判斷當前嘗試的次數
if count_num == 4:
choice = input('您已經嘗試了三次 是否繼續嘗試(n/y)>>>:')
# 11.判斷用戶輸入的選擇
if choice == 'y':
# 12.重設計數器
count_num = 1
else:
print('下次再來玩')
break
# 2.獲取用戶猜測的年齡
guess_age = input('猜一猜我的年齡>>>:')
# 3.由於一會需要比較大小 所以要將用戶輸入的字串年齡轉成整型的年齡
guess_age = int(guess_age) # 有小bug 暫時不考慮
# 4.判斷年齡是否猜測正確
if guess_age > real_age:
print('有那麼大嗎')
# 猜測錯了 計時器加一
count_num += 1
elif guess_age < real_age:
print('有那麼小嗎')
# 猜測錯了 計時器加一
count_num += 1
else:
print('你真棒 猜對了')
# 7.猜對了 直接結束循環
break
"""
1.先寫注釋(思維邏輯和想法)
2.先考慮主題功能 再考慮附加功能
"""
Google Colab代碼練習