2022.3.9筆記總結
2022.3.9筆記總結
- 字串的其他內建方法
- 列表內建方法
- 可變與不可變型別
- 佇列與堆疊
字串的其他內建方法
1.strip
移除字串首尾的指定字元,可以選擇方向
s1 = '$$$jason$$$'
print(s1.strip('$')) # jason
print(s1.lstrip('$')) # jason$$$
print(s1.rstrip('$')) # $$$jason
2.大小寫
s2 = 'JaSoN666SB' print(s2.lower()) # 將所有的英文字母變為小寫 jason666sb print(s2.upper()) # 將所有英文字母變為大寫 JASON666SB print(s2.islower()) # 判斷字串中所有的英文字母是否為純小寫,結果是bool值 print(s2.isupper()) # 判斷字串中的所有英文字母是否為純大寫,結果是bool值
舉例:圖片驗證碼大小寫字母都可以,如何實現?
code = 'jAsOn123'
user_code = input('使用者輸入的驗證碼>>>:').strip()
if code.lower() == user_code.lower():
print('驗證碼正確!')
else:
print('驗證碼錯誤')
3.startswith和endswith
判斷字串的開頭或者結尾是否是指定的字元
s3 = 'jason kevin jason tony 666' print(s3.startswith('j')) # True print(s3.startswith('tony')) # False print(s3.endswith('666')) # True print(s3.endswith('kevin')) # False
4.格式化輸出
(1)基礎方式:
佔位符%s和%d
(2)format方式1:
print('my name is {},my age is {}'.format('jason', 18))
(3)format方式2,利用索引:
print('my name is {0},my age is {1}'.format('jason', 18))
(4)format方式3,指名道姓
print('my name is {name}, my age is {age}'.format(name = 'age', age = 18)
(5)format方式4,通過已有變數,使用f
name = 'jason' age = 18 print(f'my name is {name}, my age is {age}')
5.join拼接字串
s1 = 'jason'
print('|'.join(s1)) # j|a|s|o|n 插入到字串中
print('|'.join(['jason', 'tony', 'kevin'])) # jason|tony|kevin
因此可以看出,join方法相當於是將括號裡面的元素進行for迴圈,並且括號裡面的所有元素必須是字串才可以!
6.replace
替換字串中指定的字元
s1 = 'jason jason jason is nb'
print(s1.replace('jason ','老劉')) # '老劉 老劉 老劉 is nb' 一次性替換所有
print(s1.replace('jason','老劉',2)) # '老劉 老劉 jason is nb' 後面新增一個數字代表替換個數
7.isdigit
判斷是否為純數字
s1 = 'jason123'
print(s1.isdigit()) # False
print(123.isdigit()) # True 必須是純數字
print(11.11.isdigit()) # False 浮點型不可以
字串瞭解操作
1.查詢指定字元對應的索引值
s1 = 'jason jason tony tony'
print(s1.find('s')) # 從左往右找到一個就結束
print(s1.find('k',1,9)) # 結果為-1,意思是沒找到,1,9代表索引區間
print(s1.index('s'))
print(s1.index('k',1,9)) # 找不到直接報錯,不推薦使用
2.文字位置改變
name = 'tony'
print(name.center(30,'-')) # -------------tony------------- 30代表總長度,-是填充
print(name.ljust(30,'-')) # tony--------------------------
print(name.rjust(30,'-')) # --------------------------tony
print(name.zfill(30)) # 00000000000000000000000000tony
3.特殊符號
print('ja\tson\n123\anb')
\n為換行,\t為四個空格
如果想取消它們的特殊含義,可以在前面加個r
print(r''ja\tson\n123\anb')
4.capitalize,swapcase,title
4.1首字母大寫
message = 'hello everyone nice to meet you!'
message.captalize() # 表示句首首字母大寫
4.2大小寫反轉
message.swapcase # 表示所有字母大小寫反轉
4.3所有單詞首字母大寫
message.title # 表示所有單詞首字母大寫
列表內建方法
1.型別轉換
結構:list()
list可以轉換所有支援for迴圈的資料型別:字典、集合、字串、集合、列表
2.常見操作
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
(1)索引取值
name_list([0])
name_list([-1])
(2)切片操作
name_list([1:4]) # 切1-3的數
name_list([1:4:2]) # 切1-3的數,間隔數為2
name_list([-4:-1]) # 負數也可以
name_list([-1:-4:-1]) # -1可以反向切片
(3)len():統計個數
len(name_list) # 5
(4)成員運算
print('j' in name_list) # False必須是元素才可以
print('jason' in name_list) # True
3.列表新增元素
name_list = ['jason', 'tony', 'kevin']
(1)append尾部追加
name_list.append('小李') # 尾部追加單個元素
name_list.append(['小李', '小王', '小馬']) # 尾部追加列表,但是列表只能作為整體插入
(2)insert指定位置插入元素
name_list.insert(0,'小李') # 0代表索引,'小李'是資料
name_list.insert(1,['小李', '小王', '小馬']) # 尾部追加列表,但也是列表只能作為整體插入
(3)extend合併列表
與上面兩個新增元素不同,expend可以將兩個列表合併
name_list.extend([11,22,33]) # ['jason', 'tony', 'kevin',11,22,33]
其實extend也可以當作for迴圈和append的聯合使用的結果
4.刪除元素
(1)通用刪除方式
del+空格
del name_list([0])
(2)就地刪除,可以指定
name_list.remove('jason') # None,指定去除jason
(3)延遲刪除
name_list.pop() # 空括號預設是從尾部彈出
name_list.pop(2) # 指定索引值彈出kevin
5.修改列表元素
print(id(name_list[0])) # 2614038082368
name_list[0] = 'dsb' # 重新定義索引0中的資料
print(id(name_list[0])) # 2614038926320
print(name_list) # 索引0的值改變了,記憶體地址也變了,所以他是不可變型別,但是name_list裡面的值變了但是記憶體地址卻沒變,所以它是可變型別
6.排序
s1 = [9, 6, 5, 7, 3,1]
s1.sort() # 空括號預設是升序 [1,3,5,6,7,9]
s1.sort(reverse = True) # 修改為降序 [9,7,6,5,3,1]
7.翻轉
s1 = [9, 6, 5, 7, 3,1]
s1.reverse() # 表示前後順序顛倒 [1,3,7,5,6,9]
8.比較運算
s1 = ['A', 'B', 'C']
s2 = ['a']
print(s1 > s2) # False 因為A>>>65,a>>>97
ss = [44, 77, 99, 11, 22]
print(ss,index(99)) # 查詢99所在索引位置,這個方法類似字串
9.統計列表中某個元素出現的次數
ss = [11, 22, 33, 22, 33, 44]
print(ss.count(22)) # 2,表示出現兩次
10.清空列表
ss.clear()
print(ss) # 顯示無內容
可變與不可變型別
以字串舉例:
s1 = '$$$jason$$$'
print(s1.strip('$$$')) # 結果為jason,
print(s1) # 結果為$$$jason$$$
說明字串本身是不可變的,因此值改變,記憶體地址變了,相當於產生了新值
再看列表
s2 = [1, 2, 3]
print(s2.extend([11, 22, 33]) # 結果為None(空)
print(s2) # 結果為[1, 2, 3, 11, 22, 33]
列表中新增元素後結果為空,且原值s2的值改變了,但是它的記憶體地址是不變的,所以列表是可變型別,修改的是原值
所以得出結論:
'''
可變型別:列表等
值改變 記憶體地址不變 修改的是本身
不可變型別:字串,整型、浮點型等
值改變 記憶體地址肯定遍 修改過程產生了新的值
'''
如何檢視變數記憶體地址?
eg:
s1 = [1, 2, 3]
print(id(s1)) # 2171184953160
s1.append(123)
print(id(s1)) # 2171184953160
記憶體地址不變,值變了,說明他是可變型別
佇列與堆疊
佇列:
FIFO,先進先出
堆疊:
FILO,後進後出
舉例先進後出:
name_list = ['jason', 'tony', 'marry', 'mark']
for i in name_list:
print(i)
count = 0
while count < 4:
count += 1
print(name_list.pop())
作業聯絡
整理今日內容及筆記
1.將登入功能編寫成多使用者模式
2.利用列表編寫一個使用者註冊、登入程式
提示:迴圈
要求:成功一次即可 無需考慮使用者衝突等情況
3.不使用count統計列表中指定元素出現的次數
我的解答一(拼接字串到列表然後比對):
a = 1
j = []
while a == 1:
username1 = input('輸入註冊賬號(exit退出)>>>:').strip()
if username1 == 'exit':
a = 0
password1 = input('輸入註冊密碼>>>:').strip()
j.append(username1 + '|' + password1)
print('註冊成功!')
print(username1, password1)
while a == 1:
username = input('輸入登入名(輸入exit退出,輸入q返回上層)>>>:').strip()
if username == 'exit':
a = 0
if username == 'q':
break
password = input('輸入登入密碼>>>:').strip()
if (username + '|' + password) in j:
print('登入成功')
a = 0
else:
print('使用者名稱或密碼錯誤!')
我的解答二(使用字典鍵值對儲存賬號密碼然後比對):
s1 = {}
a = 1
while a == 1:
username1 = input('輸入註冊賬號(exit退出)>>>:').strip()
if username1 == 'exit':
break
password1 = input('輸入註冊密碼>>>:').strip()
s1[username1] = password1
while a == 1:
username = input('輸入登入名(輸入exit退出,輸入q返回上層)>>>:').strip()
if username == 'exit':
a = 0
break
if username == 'q':
break
password = input('輸入登入密碼>>>:').strip()
if username in s1 and password == s1[username]:
print('登入成功!')
else:
print('登陸失敗,請重試')