1. 程式人生 > >入門學習-Python-小甲魚學習資料-Day014-字串:各種奇葩的內建方法

入門學習-Python-小甲魚學習資料-Day014-字串:各種奇葩的內建方法

根據視訊自己練習 :

capitalize() 把字串的第一個字元改為大寫
casefold() 把整個字串的所有字元改為小寫
center(width) 將字串居中,並使用空格填充至長度 width 的新字串
count(sub[, start[, end]]) 返回 sub 在字串裡邊出現的次數,start 和 end 引數表示範圍,可選。
encode(encoding=‘utf-8’, errors=‘strict’) 以 encoding 指定的編碼格式對字串進行編碼。
endswith(sub[, start[, end]]) 檢查字串是否以 sub 子字串結束,如果是返回 True,否則返回 False。start 和 end 引數表示範圍,可選。
expandtabs([tabsize=8]) 把字串中的 tab 符號(\t)轉換為空格,如不指定引數,預設的空格數是 tabsize=8。
find(sub[, start[, end]]) 檢測 sub 是否包含在字串中,如果有則返回索引值,否則返回 -1,start 和 end 引數表示範圍,可選。
index(sub[, start[, end]]) 跟 find 方法一樣,不過如果 sub 不在 string 中會產生一個異常。
isalnum() 如果字串至少有一個字元並且所有字元都是字母或數字則返回 True,否則返回 False。
isalpha() 如果字串至少有一個字元並且所有字元都是字母則返回 True,否則返回 False。
isdecimal() 如果字串只包含十進位制數字則返回 True,否則返回 False。
isdigit() 如果字串只包含數字則返回 True,否則返回 False。
islower() 如果字串中至少包含一個區分大小寫的字元,並且這些字元都是小寫,則返回 True,否則返回 False。
isnumeric() 如果字串中只包含數字字元,則返回 True,否則返回 False。
isspace() 如果字串中只包含空格,則返回 True,否則返回 False。
istitle() 如果字串是標題化(所有的單詞都是以大寫開始,其餘字母均小寫),則返回 True,否則返回 False。
isupper() 如果字串中至少包含一個區分大小寫的字元,並且這些字元都是大寫,則返回 True,否則返回 False。
join(sub) 以字串作為分隔符,插入到 sub 中所有的字元之間。
ljust(width) 返回一個左對齊的字串,並使用空格填充至長度為 width 的新字串。
lower() 轉換字串中所有大寫字元為小寫。
lstrip() 去掉字串左邊的所有空格
partition(sub) 找到子字串 sub,把字串分成一個 3 元組 (pre_sub, sub, fol_sub),如果字串中不包含 sub 則返回 (‘原字串’, ‘’, ‘’)
replace(old, new[, count]) 把字串中的 old 子字串替換成 new 子字串,如果 count 指定,則替換不超過 count 次。
rfind(sub[, start[, end]]) 類似於 find() 方法,不過是從右邊開始查詢。
rindex(sub[, start[, end]]) 類似於 index() 方法,不過是從右邊開始。
rjust(width) 返回一個右對齊的字串,並使用空格填充至長度為 width 的新字串。
rpartition(sub) 類似於 partition() 方法,不過是從右邊開始查詢。
rstrip() 刪除字串末尾的空格。
split(sep=None, maxsplit=-1) 不帶引數預設是以空格為分隔符切片字串,如果 maxsplit 引數有設定,則僅分隔 maxsplit 個子字串,返回切片後的子字串拼接的列表。
splitlines(([keepends])) 在輸出結果裡是否去掉換行符,預設為 False,不包含換行符;如果為 True,則保留換行符。。
startswith(prefix[, start[, end]]) 檢查字串是否以 prefix 開頭,是則返回 True,否則返回 False。start 和 end 引數可以指定範圍檢查,可選。
strip([chars]) 刪除字串前邊和後邊所有的空格,chars 引數可以定製刪除的字元,可選。
swapcase() 翻轉字串中的大小寫。
title() 返回標題化(所有的單詞都是以大寫開始,其餘字母均小寫)的字串。
translate(table) 根據 table 的規則(可以由 str.maketrans(‘a’, ‘b’) 定製)轉換字串中的字元。
upper() 轉換字串中的所有小寫字元為大寫。
zfill(width) 返回長度為 width 的字串,原字串右對齊,前邊用 0 填充。
在這裡插入圖片描述


在這裡插入圖片描述
在這裡插入圖片描述

課後練習題

0.還記得如何定義一個跨越多行的字串嗎(請至少寫出兩種實現的方法)?
方法一:
str1 = ‘’‘待我長髮及腰,將軍歸來可好?
此身君子意逍遙,怎料山河蕭蕭。
天光乍破遇,暮雪白頭老。
寒劍默聽奔雷,長槍獨守空壕。
醉臥沙場君莫笑,一夜吹徹畫角。
江南晚來客,紅繩結髮梢。’’’

方法二:
str2 = ‘待卿長髮及腰,我必凱旋迴朝。
昔日縱馬任逍遙,俱是少年英豪。
東都霞色好,西湖煙波渺。
執槍血戰八方,誓守山河多嬌。
應有得勝歸來日,與卿共度良宵。
盼攜手終老,願與子同袍。’

方法三:
str3 = (‘待卿長髮及腰,我必凱旋迴朝。’
‘昔日縱馬任逍遙,俱是少年英豪。’
‘東都霞色好,西湖煙波渺。’
‘執槍血戰八方,誓守山河多嬌。’
‘應有得勝歸來日,與卿共度良宵。’
‘盼攜手終老,願與子同袍。’)

  1. 三引號字串通常我們用於做什麼使用?
    三引號字串不賦值的情況下,通常當作跨行註釋使用 。

  2. file1 = open(’ C: \windows\temp\readme. txt’ , ’ r’ ) 表示以只讀方式開啟“C: \windows\temp\readme. txt”這個文字檔案,但事實上是錯,知道為什麼嗎?你會如何修改?
    會報錯是因為在字串中,我們約定“\t”和“\r”分別表示“橫向製表符(TAB)”和“回車符”,因此並不會按照我們計劃的路徑去開啟檔案。
    Python 為我們鋪好了解決的道路,只需要使用原始字串操作符(R或r)即可:
    file1=open(r’C:\windows\temp\readme.txt’,‘r’)

  3. 有字串:str1 = ’ 魚C資源打包’,請問如何提取出子字串
    str1[16:38]

  4. 如果使用負數作為索引值進行分片操作,按照第三題的要求你能夠正確目測出結果嗎?
    str1[-45:-32]

  5. 還是第三題那個字串,請問下邊語句會顯示什麼內容?str1[20:-36]
    ‘fishc’

  6. 據說只有智商高於150的魚油才能解開這個字串(還原為有意義的字串):str1 =‘i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99’
    str1[::3] @@@@@@

動動手
0. 請寫一個密碼安全性檢查的指令碼程式碼:check.py
在這裡插入圖片描述
在這裡插入圖片描述

程式演示:

自己寫的錯誤程式碼: 混成一片進行判斷
while True:
temp = input(‘輸入密碼’)
# a = int(temp)
b=len(temp)
c =’’‘提升密碼等級的方式:
1.密碼必須由數字、字母及特殊字元三種組合
2.密碼只能由字母開頭
3.密碼長度不能低於16位’’’
d = ‘[email protected]#KaTeX parse error: Expected 'EOF', got '#' at position 403: … d的初始定義子串 '[email protected]%^&*()_=-/,.?<>;:[]{}|’ 的時候 才能跳轉到 高階密碼的分支 。

方法一:
str1 = “[email protected]#$%^&*()_=-/,.?<>;:[]{}|”
has_str1 = 0
has_num = 0
has_alpha = 0
t = ‘y’
while t == ‘y’:
password = input(“請輸入需要檢查的密碼組合:”)
length = len(password)
while(password.isspace() or length == 0):
password = input(‘您輸入的密碼為空(或空格),請重新輸入:’)
for i in password:
if i in str1:
has_str1 = 1
if i.isdigit():
has_num = 1
if i.isalpha():
has_alpha = 1
has = has_str1 + has_num + has_alpha
if length <= 8 or password.isalnum():
level = “低”
if length > 8 and has ==2:
level = “中”
if length >= 16 and has == 3 and password[0].isalpha():
level = “高”
print(“您的密碼安全等級評定為:%s”%level)
if level == “高”:
print(“請繼續保持”)
else:
print(""“請按以下方式提升您的密碼安全級別:
1.密碼必須由數字、字母及特殊字元三種組合
2.密碼只能由字母開頭
3.密碼長度不能低於16位”"")
t = input(“還要再測試麼?(”y“繼續,其他退出)”)
注意:特殊的數字開頭的高階密碼沒有判斷

方法二:
symbols = “[email protected]#$%^&*()_=-/,.?<>;:[]{}|”
chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
nums = ‘0123456789’
t = ‘y’
while t == ‘y’:
passwd = input(‘請輸入密碼:’)
length = len(passwd)
#判斷長度
while(passwd.isspace() or length == 0):
passwd = input(‘您輸入的密碼為空(或空格),請重新輸入:’)
length = len(passwd)
if length <= 8:
flag_len = 1
elif 8 < length <16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
#判斷是否包含特殊字元
for each in passwd:
if each in symbols:
flag_con +=1
break
#判斷是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
#判斷是否包含數字
for each in passwd:
if each in nums:
flag_con += 1
break
#列印結果
while 1:
print(“您的密碼安全級別評定為:”,end=’’)
if flag_len == 1 or flag_con == 1:
print(“低”)
elif flag_len == 2 or flag_con == 2:
print(“中”)
else:
print(“高”)
print(“請繼續保持”)
break
print(""“請按以下方式提升您的密碼安全級別:
1.密碼必須由數字、字母及特殊字元三種組合
2.密碼只能由字母開頭
3.密碼長度不能低於16位”"")
break
t = input(“還要再測試麼?(”y“繼續,其他退出)”)
注意:判斷高階密碼沒有條件 其他型別都是高階

方法三:
str0 = “”“請按以下方式提升您的密碼安全級別:
1.必須由數字、字母及特殊字元三種組合(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}|)
2.密碼只能由字母開頭
3.密碼長度不能低於16位”""

str1 = ‘您的密碼安全級別評定為:低\n’ + str0 + “”"
4.替王尼瑪給隔壁老王送上一把水果刀
5.告訴你的孩子,他是充話費下送的
6.召集另外三隻小甲魚,喂他們突變劑,救紐約人民於水火
“”"
str2 = ‘您的密碼安全級別評定為:中\n’ + str0 + “”"
4.扶老奶奶過馬路,幫室友補襪子
“”"
str3 = ‘您的密碼安全評定為:高\n請繼續保持!’

special = “[email protected]#$%^&*()_=-/,.?<>;:[]{}|”
letter = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
number = ‘0123456789’
t = ‘y’

while t == ‘y’:
password = input(“請輸入需要檢查的密碼組合:”)

# 用num來統計字元型別出現次數  
num = 0
a = b = c = 0
# 輸入的不能為空  
while password == '':
    password = input("不能為空,請重新輸入:")
    # 計算num的值,如果輸入的全部是字元,那麼num=0,所以才會有<=1  
if password.isnumeric() or password.isalpha():
    num = 1
else:
    for i in password:
        if a == 0 and i in special:
            num += 1
            a = 1
        elif b == 0 and i in number:
            num += 1
            b = 1
        elif c == 0 and i in letter:
            num += 1
            c = 1
if password[0] in letter and num == 3 and len(password) >= 16:
    print(str3)
elif num >= 2 and len(password) >= 8:
    print(str2)
elif num <= 1 and len(password) < 8:
    print(str1)
t = input("還要再測試麼?(”y“繼續,其他退出)")  

密碼輸入約束程式 小甲魚的程式執行效果和自己理解不同 只好自己重新寫了

基礎環境定義
mynumbers = ‘0123456789’
mychars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
myysymbols = ‘[email protected]#$%^&*()_=-/,.?<>;:[]{}|’
passwordstatus = 0
myinput =’’
myout = ‘y’
passwordrule =’’‘1、 不合格密碼:
密碼小於8位
全為數字
全為字母
2、 低階密碼
密碼 8到15位
不全為數字
不全為字母
3、 高階密碼
密碼大於等於16位
不全為數字
不全為字母
包含特殊字元 ‘’’

print(passwordrule)
print()

while myout == ‘y’:
print(“請輸入密碼”)
myinput = input()
passlen = len(myinput)
if passlen<8 :
print(“不合格密碼,請重新輸入”)

elif ( myinput.isalpha() or myinput.isdigit() or myinput.isspace()):
    print("低階密碼")
elif 8<=passlen<16 :
    print("中級密碼")
elif passlen >=16 :
    print("高階密碼")
print("要繼續嗎? , 小寫 'y'繼續 ,其他退出")
print()
myout = input()