零基礎入門學習python_014_筆記及作業_字串_內建函數
字串內建函數:
作業1:還記得如何定義一個跨越多行的字串嗎(請至少寫出兩種實現的方法)?
小提示:有三種情況
(1) 定義時分行,print也分行
(2) 定義時不分行,print分行
(3) 定義時分行,print沒分行
==============================以下為程式碼==============================
(1) 定義時分行,print也分行
str1 = ('''123
321''')
(2) 定義時不分行,print分行
str1 = '123\n321'
(3) 定義時分行,print沒分行
str1 = ('123\
321')
str2 = ('123'
'321')
========================================================================
作業2:據說只有智商高於150的魚油才能解開這個字串(還原為有意義的字串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
==============================以下為程式碼==============================
>>> str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
>>> str1[::3]
'ilovefishc.com'
[::3]就是從第一個字元開始,隔兩個字元取第三個字元的意思。
========================================================================
作業3:請寫一個密碼安全性檢查的腳本代碼:check.py
# 低級密碼要求:
# 1. 密碼由單純的數位或字母組成
# 2. 密碼長度小於等於8位元
#
# 中級密碼要求:
# 1. 密碼必須由數位、字母或特殊字元(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意兩種組合
# 2. 密碼長度不能低於8位元
#
# 高級密碼要求:
# 1. 密碼必須由數位、字母及特殊字元(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三種組合
# 2. 密碼只能由字母開頭
# 3. 密碼長度不能低於16位元
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]))
|
按照 '\n' 分隔,返回一個包含各行作為元素的清單,如果 keepends 參數指定,則返回前 keepends 行。
|
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 填充。
|
作業1:還記得如何定義一個跨越多行的字串嗎(請至少寫出兩種實現的方法)?
小提示:有三種情況
(1) 定義時分行,print也分行
(2) 定義時不分行,print分行
(3) 定義時分行,print沒分行
==============================以下為程式碼==============================
(1) 定義時分行,print也分行
str1 = ('''123
321''')
(2) 定義時不分行,print分行
str1 = '123\n321'
(3) 定義時分行,print沒分行
str1 = ('123\
321')
str2 = ('123'
'321')
========================================================================
作業2:據說只有智商高於150的魚油才能解開這個字串(還原為有意義的字串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
==============================以下為程式碼==============================
>>> str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
>>> str1[::3]
'ilovefishc.com'
[::3]就是從第一個字元開始,隔兩個字元取第三個字元的意思。
========================================================================
作業3:請寫一個密碼安全性檢查的腳本代碼:check.py
# 低級密碼要求:
# 1. 密碼由單純的數位或字母組成
# 2. 密碼長度小於等於8位元
#
# 中級密碼要求:
# 1. 密碼必須由數位、字母或特殊字元(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意兩種組合
# 2. 密碼長度不能低於8位元
#
# 高級密碼要求:
# 1. 密碼必須由數位、字母及特殊字元(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三種組合
# 2. 密碼只能由字母開頭
# 3. 密碼長度不能低於16位元
預期程式運行結果:
輸入密碼組合後,程式會判斷密碼強度為低中高何者,並提示
1. 密碼必須由數位、字母及特殊字元三種組合
2. 密碼只能由字母開頭
3. 密碼長度不能低於16位元
2. 密碼只能由字母開頭
3. 密碼長度不能低於16位元
這太難了,直接看甲魚哥的解答XD
========================================================================
#設定變數symbols等於題目所要求的特殊字元
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
#設定變數chars等於題目所要求的字母字元
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
#設定變數nums等於題目所要求的數字字元
nums = '0123456789'
#設定變數passwd為可讓使用者自行輸入的字串組合
passwd = input('請輸入需要檢查的密碼組合:')
# 判斷長度
# 設定變數length以檢查密碼長度是否符合強度要求
length = len(passwd)
#當passwd只有空格,或是長度為零的時候
while (passwd.isspace() or length == 0) :
#請使用者重新輸入字串組合
passwd = input("您輸入的密碼為空(或空格),請重新輸入:")
#當length小於等於8的時候
if length <= 8:
#設定變數flag_len等於1
flag_len = 1
#或是當length介於8與16中間的時候
elif 8 < length < 16:
#設定變數flag_len等於2
flag_len = 2
#或是其他情形時
else:
#設定變數flag_len等於3
flag_len = 3
#設定變數flag_con等於0
flag_con = 0
# 判斷是否包含特殊字元
#設定變數each在passwd裡面
for each in passwd:
#當each屬於symbols時
if each in symbols:
#變數flag_con數值+1
flag_con += 1
#中斷本輪判斷特殊字元之迴圈
break
# 判斷是否包含字母
#設定變數each在passwd裡面
for each in passwd:
#當each屬於chars時
if each in chars:
#變數flag_con數值+1
flag_con += 1
#中斷本輪判斷字母之迴圈
break
# 判斷是否包含數位
#設定變數each在passwd裡面
for each in passwd:
#當each屬於nums時
if each in nums:
#變數flag_con數值+1
flag_con += 1
#中斷本輪判斷數字之迴圈
break
# 列印結果
#同等於while True,無限迴圈之意
while 1 :
#輸出文字
# end=''是使print不換行的程式碼,可使下一個print的內容直接接續在此行print後面。
print("您的密碼安全級別評定為:", end='')
# 當變數flag_len或變數flag_con等於1時
if flag_len == 1 or flag_con == 1 :
# 輸出文字
print("低")
# 或是當變數flag_len或變數flag_con等於2時
elif flag_len == 2 or flag_con == 2 :
# 輸出文字
print("中")
# 其他情形
else :
# 輸出文字
print("高")
print("請繼續保持")
# 中斷迴圈
break
# 輸出文字。\n是換行,\t是tab
# 本段輸出文字若使用三引號'''也許會簡便一些
print("請按以下方式提升您的密碼安全級別:\n\
\t1. 密碼必須由數位、字母及特殊字元三種組合\n\
\t2. 密碼只能由字母開頭\n\
\t3. 密碼長度不能低於16位元'")
# 中斷迴圈
break
========================================================================
#設定變數symbols等於題目所要求的特殊字元
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
#設定變數chars等於題目所要求的字母字元
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
#設定變數nums等於題目所要求的數字字元
nums = '0123456789'
#設定變數passwd為可讓使用者自行輸入的字串組合
passwd = input('請輸入需要檢查的密碼組合:')
# 判斷長度
# 設定變數length以檢查密碼長度是否符合強度要求
length = len(passwd)
#當passwd只有空格,或是長度為零的時候
while (passwd.isspace() or length == 0) :
#請使用者重新輸入字串組合
passwd = input("您輸入的密碼為空(或空格),請重新輸入:")
#當length小於等於8的時候
if length <= 8:
#設定變數flag_len等於1
flag_len = 1
#或是當length介於8與16中間的時候
elif 8 < length < 16:
#設定變數flag_len等於2
flag_len = 2
#或是其他情形時
else:
#設定變數flag_len等於3
flag_len = 3
#設定變數flag_con等於0
flag_con = 0
# 判斷是否包含特殊字元
#設定變數each在passwd裡面
for each in passwd:
#當each屬於symbols時
if each in symbols:
#變數flag_con數值+1
flag_con += 1
#中斷本輪判斷特殊字元之迴圈
break
# 判斷是否包含字母
#設定變數each在passwd裡面
for each in passwd:
#當each屬於chars時
if each in chars:
#變數flag_con數值+1
flag_con += 1
#中斷本輪判斷字母之迴圈
break
# 判斷是否包含數位
#設定變數each在passwd裡面
for each in passwd:
#當each屬於nums時
if each in nums:
#變數flag_con數值+1
flag_con += 1
#中斷本輪判斷數字之迴圈
break
# 列印結果
#同等於while True,無限迴圈之意
while 1 :
#輸出文字
# end=''是使print不換行的程式碼,可使下一個print的內容直接接續在此行print後面。
print("您的密碼安全級別評定為:", end='')
# 當變數flag_len或變數flag_con等於1時
if flag_len == 1 or flag_con == 1 :
# 輸出文字
print("低")
# 或是當變數flag_len或變數flag_con等於2時
elif flag_len == 2 or flag_con == 2 :
# 輸出文字
print("中")
# 其他情形
else :
# 輸出文字
print("高")
print("請繼續保持")
# 中斷迴圈
break
# 輸出文字。\n是換行,\t是tab
# 本段輸出文字若使用三引號'''也許會簡便一些
print("請按以下方式提升您的密碼安全級別:\n\
\t1. 密碼必須由數位、字母及特殊字元三種組合\n\
\t2. 密碼只能由字母開頭\n\
\t3. 密碼長度不能低於16位元'")
# 中斷迴圈
break
留言
張貼留言