2020年9月14日星期一

[課後作業] 第014講:字符串:各種奇葩的內置方法|課後測試題及答案

[課後作業] 第014講:字符串:各種奇葩的內置方法|課後測試題及答案 




《零基礎入門學習Python》視頻下載地址:傳送門
  
測試題:
   
0.還記得如何定義一個跨越多行的字符串嗎(請至少寫出兩種實現的方法)?
   

1.三引號字符串通常我們用於做什麼使用?
  

2. file1 = open('C:\windows\temp\readme.txt', 'r')表示以只讀方式打開“C:\windows\temp\readme.txt”這個文本文件,但事實上這個語句會報錯,知道為什麼嗎?你會如何修改?
  

3.有字符串:str1 = '<a href="http://www.fishc.com/dvd" target="_blank">魚C資源打包</a>',請問如何提取出子字符串: 'www.fishc.com'
   

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

5.還是第三題那個字符串,請問下邊語句會顯示什麼內容?


  1. >>> str1[20:-36]
複製代碼


6.據說只有智商高於150的魚油才能解開這個字符串(還原為有意義的字符串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
   
  
動動手:
  
0.請寫一個密碼安全性檢查的代碼代碼:check.py
  
#密碼安全性檢查代碼
#
#低級密碼要求:
# 1.密碼由單純的數字或字母組成
# 2.密碼長度小於等於8位
#
#中級密碼要求:
# 1.密碼必須由數字、字母或特殊字符(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意兩種組合
# 2.密碼長度不能低於8位
#
#高級密碼要求:
# 1.密碼必須由數字、字母及特殊字符(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三種組合
# 2.密碼只能由字母開頭
# 3.密碼長度不能低於16位

程序演示:
  

   
  
1.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!
   
   
回复您的答案即可查看參考答案!
  
  
測試題答案:
  

本帖隱藏的內容

0.還記得如何定義一個跨越多行的字符串嗎(請至少寫出兩種實現的方法)?
  
方法一:
   
>>> str1 = '''待我長發及腰,將軍歸來可好?
此身君子意逍遙,怎料山河蕭蕭。
天光乍破遇,暮雪白頭老。
寒劍默聽奔雷,長槍獨守空壕。
醉臥沙場君莫笑,一夜吹徹畫角。
江南晚來客,紅繩結髮梢。'''
   
方法二:
   
>>> str2 = '待卿長發及腰,我必凱旋回朝。\
昔日縱馬任逍遙,俱是少年英豪。\
東都霞色好,西湖煙波渺。\
執槍血戰八方,誓守山河多嬌。\
應有得勝歸來日,與卿共度良宵。\
盼攜手終老,願與子同袍。'
   
方法三:
   
>>> str3 = ('待卿長發及腰,我必凱旋回朝。'
'昔日縱馬任逍遙,俱是少年英豪。'
'東都霞色好,西湖煙波渺。'
'執槍血戰八方,誓守山河多嬌。'
'應有得勝歸來日,與卿共度良宵。'
'盼攜手終老,願與子同袍。')
   
   
1.三引號字符串通常我們用於做什麼使用?
   
三引號字符串不賦值的情況下,通常當作跨行註釋使用,例如:
  1. '''這是一個三引號字符串用於註釋的例子,
  2. 例子雖然只是簡簡單單的一句話,
  3. 卻毫無遮掩地體現了作者用情至深,
  4. 所謂愛至深處情至簡!'''

  5. print("I love FishC.com!")
複製代碼


2. file1 = open('C:\windows\temp\readme.txt', 'r')表示以只讀方式打開“C:\windows\temp\readme.txt”這個文本文件,但事實上這個語句會報錯,知道為什麼嗎?你會如何修改?
  
會報錯是因為在字符串中,我們約定“\t”和“\r”分別表示“橫向製表符(TAB)”和“回車符”(詳見:http://bbs.fishc.com /thread-92997-1-1.html),因此並不會按照我們計劃的路徑去打開文件。
   
Python為我們鋪好了解決的道路,只需要使用原始字符串操作符(R或r)即可:
  1. >>> file1 = open(r'C:\windows\temp\readme.txt', 'r')
複製代碼


3. 有字符串:str1 = '<a href="http://www.fishc.com/dvd" target="_blank">魚C資源打包</a>',請問如何提取出子字符串: 'www.fishc.com'
  1. >>> str1[16:29]
複製代碼


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


5. 還是第三題那個字符串,請問下邊語句會顯示什麼內容?
  1. >>> str1[20:-36]
複製代碼

'fishc',加入了負數索引,問題變得有些複雜,不過自己多嘗試幾次就可以熟練掌握了。
      
   
6.據說只有智商高於150的魚油才能解開這個字符串(還原為有意義的字符串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
  1. >>> str1[::3]
複製代碼


動動手答案:
   

本帖隱藏的內容

0. 請寫一個密碼安全性檢查的代碼代碼:check.py


  1. # 密碼安全性檢查代碼
  2. #
  3. # 低級密碼要求:
  4. # 1. 密碼由單純的數字或字母組成
  5. # 2. 密碼長度小於等於8位
  6. #
  7. # 中級密碼要求:
  8. # 1. 密碼必須由數字、字母或特殊字符(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意兩種組合
  9. # 2. 密碼長度不能低於8位
  10. #
  11. # 高級密碼要求:
  12. # 1. 密碼必須由數字、字母及特殊字符(僅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三種組合
  13. # 2. 密碼只能由字母開頭
  14. # 3. 密碼長度不能低於16位

  15. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  16. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  17. nums = '0123456789'

  18. passwd = input('請輸入需要檢查的密碼組合:')

  19. # 判斷長度
  20. length = len(passwd)

  21. while (passwd.isspace() or length == 0) :
  22.     passwd = input("您輸入的密碼為空(或空格),請重新輸入:")
  23.     length = len(passwd)

  24. if length <= 8:
  25.     flag_len = 1
  26. elif 8 < length < 16:
  27.     flag_len = 2
  28. else:
  29.     flag_len = 3

  30. flag_con = 0

  31. # 判斷是否包含特殊字符
  32. for each in passwd:
  33.     if each in symbols:
  34.         flag_con += 1
  35.         break
  36.    
  37. # 判斷是否包含字母
  38. for each in passwd:
  39.     if each in chars:
  40.         flag_con += 1
  41.         break

  42. # 判斷是否包含數字
  43. for each in passwd:
  44.     if each in nums:
  45.         flag_con += 1
  46.         break   

  47. # 打印結果
  48. while 1 :
  49.     print("您的密碼安全級別評定為:", end='')
  50.     if flag_len == 1 or flag_con == 1 :
  51.         print("低")
  52.     elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
  53.         print("高")
  54.         print("請繼續保持")
  55.         break
  56.     else:
  57.         print("中")

  58.     print("請按以下方式提升您的密碼安全級別:\n\
  59.     \t1. 密碼必須由數字、字母及特殊字符三種組合\n\
  60.     \t2. 密碼只能由字母開頭\n\
  61.     \t3. 密碼長度不能低於16位")
  62.     break
複製代碼

哈哈,這最後一題招來不少“民憤”,自己挖了個坑……

這裡把相關的疑問給大家解釋下:

1.為啥要用while 1呢?主要是為了實現“如果結果是低或中則打印如何提升密碼安全級別的提示,而高則直接退出”

2.為啥把“高”放中間呢?因為其判斷最為麻煩(注意還要求必須是字母開頭),所以很有可能滿足了“中”卻因為額外的條件滿足不了“高”,因此我們把事兒比較多的高放中間判斷,滿足不了“高”,那就只能是最後的else“中”了。


1.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!
  
小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^
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 留言:

發佈留言