1. 程式人生 > 其它 >2022.3.9筆記總結

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('登陸失敗,請重試')