python字符串的進階

在上一篇文章的?密碼破解器?中,我們回顧了循環專題的知識點。

while 循環和 for 循環是 Python 中的兩大循環語句,它們都可以實現循環的功能,但在具體使用時略有差別。當循環次數不確定時,我們選用 while 循環;當循環次數確定,需要遍歷整個序列的元素時,for 循環則更為合適。

此外,for 循環和 zip() 函數、enumerate() 函數搭配使用能更加靈活的操作序列中的元素。

如果有所遺忘,推薦你回到上節課再加強理解哦。

從本關開始,我們將攻克一個新目標——字符串。各位 Python 練習生們,你們準備好了嗎?🎙?

字符串

在 Python 的世界里,字符串是表示文本的數據類型,我們再來回顧一下如何將字符串賦值給變量:

name1 = '小貝'
name2 = "小貝"

Python 中的字符串是使用一對英文單引號(')或英文雙引號(")包裹的任意文本。無論是用單引號還是用雙引號,它倆的效果都是一樣的,但需要保持前后引號的統一。

在之前的課程練習中,我們打印的文字好像都只能在一行,如果我們要打印多行文字時,比如打印一首詩,要怎么辦呢?你可能會像下面這樣編寫代碼,然后發現報錯了。

poetry = '日暮蒼山遠,天寒白屋貧。
柴門聞犬吠,風雪夜歸人。'
print(poetry)
# 報錯:SyntaxError: bad token on line 1

系統在讀取第一行代碼時,只識別到一個單引號,而無法讀取后續的字符串,導致了語法錯誤。為了避免這個問題,你也可能像下面這樣機智地使用多個?print()?函數。

poetry1 = '日暮蒼山遠,天寒白屋貧。'
poetry2 = '柴門聞犬吠,風雪夜歸人。'
print(poetry1)
print(poetry2)
# 輸出:
# 日暮蒼山遠,天寒白屋貧。
# 柴門聞犬吠,風雪夜歸人。

問題是解決了,但如果要輸出一首莎士比亞的十四行詩《我怎么能夠把你來比作夏天》,豈不是要編寫 28 行代碼,想想就覺得很麻煩。那有沒有什么好的辦法呢?這個時候,就要用到強大的三引號了。

我們可以像下面這樣使用一對三引號('''?或?""")來包裹多行字符串。三引號包裹的字符串和普通的字符串使用上沒有區別,只是三引號支持多行字符串而已。

poetry = '''我怎么能夠把你來比作夏天?
你不獨比它可愛也比它溫婉:
狂風把五月寵愛的嫩蕊作踐,
夏天出賃的期限又未免太短:
天上的眼睛有時照得太酷烈,
它那炳耀的金顏又常遭掩蔽:
被機緣或無常的天道所摧折,
沒有芳艷不終于凋殘或消毀。
但是你的長夏永遠不會凋落,
也不會損失你這皎潔的紅芳,
或死神夸口你在他影里漂泊,
當你在不朽的詩里與時同長。
只要一天有人類,或人有眼睛,
這詩將長存,并且賜給你生命。'''
print(poetry)
# 輸出:
# 我怎么能夠把你來比作夏天?
# 你不獨比它可愛也比它溫婉:
# 狂風把五月寵愛的嫩蕊作踐,
# 夏天出賃的期限又未免太短:
# 天上的眼睛有時照得太酷烈,
# 它那炳耀的金顏又常遭掩蔽:
# 被機緣或無常的天道所摧折,
# 沒有芳艷不終于凋殘或消毀。
# 但是你的長夏永遠不會凋落,
# 也不會損失你這皎潔的紅芳,
# 或死神夸口你在他影里漂泊,
# 當你在不朽的詩里與時同長。
# 只要一天有人類,或人有眼睛,
# 這詩將長存,并且賜給你生命。

除了使用多行字符串來實現多行文本外,使用?\n?也能達到一樣的效果。\n?被稱為?換行符,用于文本間的換行。

插入了換行符,其后方的內容將另起一行顯示,所以,輸出《風雪夜歸人》的詩行可以這樣實現:

poetry = '日暮蒼山遠,天寒白屋貧。\n柴門聞犬吠,風雪夜歸人。'
print(poetry)
# 輸出:
# 日暮蒼山遠,天寒白屋貧。
# 柴門聞犬吠,風雪夜歸人。

拼接字符串

我們都知道通過?+?可以將兩個字符串拼接,得到一個新的字符串。

first_name = '史蒂夫'
last_name = '喬布斯'
# 使用 + 拼接字符串
full_name = first_name + '·' + last_name
print(full_name)
# 輸出:史蒂夫·喬布斯

當我們把同一個字符串重復很多次的時候,我們可以使用多個?+?拼接,像下面這樣:

str1 = '海草'
str2 = str1 + str1 + str1
print(str2)
# 輸出:海草海草海草

上面那樣的寫法太麻煩了,你有沒有想到更快捷的方法?

對了,用?*!數學中的乘法是相同的數加起來的快捷方式,Python 中字符串的拼接操作也是如此。

str1 = '海草'
str2 = str1 * 3  # 相當于 str1 + str1 + str1
print(str2)
# 輸出:海草海草海草

編程練習

你小時候肯定聽過這么一個童謠:“從前有座山,山里有個廟。廟里有老和尚和小和尚,有一天老和尚對小和尚說:從前有座山,山里有個廟。廟里有老和尚和小和尚,有一天老和尚對小和尚說:從前有座山,山里有個廟。廟里有老和尚和小和尚,有一天老和尚對小和尚說:……”。

我們接下來用字符串拼接的方法,將這個一直循環的童謠講 20 遍!

最優解:

story = '從前有座山,山里有個廟,廟里有老和尚和小和尚,有一天老和尚對小和尚說:'
print(story * 20)
# 將 story 重復 20 遍拼接在一起使用 print() 輸出

運用字符串拼接的方式完成一組重復文本的輸出,既省時又省心。

其實 Python 還提供了一種更高級的方法來組合字符串,那就是字符串格式化輸出。

字符串格式化輸出

字符串格式化輸出?是按照一種既定格式給字符串填空的方式,以便我們更加方便地寫入字符串。比如一段自我介紹的文本:我叫 xx,今年 xx 歲,來自 xx。,根據我們學過的知識,我們會這樣寫:

def print_intro(name, age, city):intro = '我叫' + name + ',今年 ' + str(age) + ' 歲,來自' + city + '。'print(intro)print_intro('小貝', 18, '南京')
# 輸出:我叫小貝,今年 18 歲,來自南京。

提示:字符串類型和數字類型不能直接相加,需要用?str()?函數進行類型轉換。

上面的例子里,我們用了一堆?+?來拼接字符串,既麻煩又難以一眼看出來是什么。接下來老師用字符串的格式化輸出實現同樣的功能:

def print_intro(name, age, city):intro = '我叫%s,今年 %d 歲,來自%s。' % (name, age, city)print(intro)print_intro('小貝', 18, '南京')
# 輸出:我叫小貝,今年 18 歲,來自南京。

小貝提問,這段代碼看起來有點復雜,“%”在這里是什么意思,老師能不能再詳細地說一說?

好的,我們來看一下字符串格式化輸出的語法規則:

%?運算符左邊是要格式化的字符串,右邊是一個元組。如果只有一個占位符,可以將元組里的元素拿出來,如:'我叫%s' % '小貝'

我們通過?%s%d?這樣的占位符在字符串中“占位”,Python 會將 % 右邊的內容會按順序替換掉對應的占位符,一一填空。每個占位符都有特定的含義,我們來看一下常見的占位符:

提示:如果你不太確定應該用什么占位符,%s?是萬能的,它會把任何數據類型轉換為字符串。

編程練習

小貝寫了段播報天氣的代碼,但還是用?+?進行字符串拼接實現的,你能用字符串格式化輸出的知識幫她改進一下代碼嗎?

weathers = [('南京', 36),('成都', 30),('昆明', 26)
]for w in weathers:print('今天' + w[0] + '的最高氣溫是' + str(w[1]) + '度')

解答后為:

weathers = [('南京', 36),('成都', 30),('昆明', 26)
]for w in weathers:
# 如果你不太確定應該用什么占位符,%s 是萬能的,它會把任何數據類型轉換為字符串。print('今天%s的最高氣溫是%s度'%(w[0],w[1]))# 今天南京的最高氣溫是36度
# 今天成都的最高氣溫是30度
# 今天昆明的最高氣溫是26度

編程練習—練習生

身為 Python 練習生的你,練習時長有多久了呢?今天我們來用字符串格式化的知識來做段自我介紹!

格式是:同學們大家好,我是 Python 練習時長 xxx 的個人練習生 xxx,喜歡 xxx!。比如:同學們大家好,我是 Python 練習時長兩年半的個人練習生小貝,喜歡唱、跳、Python、籃球!

將下面的代碼,用剛剛學的占位符的方式去展示

def print_intro(duration, name, hobby):# 用占位符修改下面字符串print('大家好,我是 Python 練習時長兩年半的個人練習生小貝,喜歡唱、跳、Python、籃球!')# 將參數改為你的自我介紹
print_intro('兩年半', '小貝', '唱、跳、Python、籃球')

優化后的代碼為:

def print_intro(duration, name, hobby):# 用占位符修改下面字符串print('大家好,我是 Python 練習時長%s的個人練習生%s,喜歡%s!'%(duration, name, hobby))# 將參數改為你的自我介紹
print_intro('兩年半', '小貝', '唱、跳、Python、籃球')

編程練習—人類的本質是復讀機

在各大 APP 的評論區里,一旦某個人的發言有意思,其他人就會“保持隊型”,紛紛模仿他說的話。

比如隨處可見的“+1”和“+10086”,視頻 UP 主求贊之后彈幕上總會飄過一大片“下次一定”,人類的本質果然是復讀機呢。

列表?words?中儲存了一些常見的網絡用語,我們可以用字符串方法將列表里的元素都“復讀”三次,比如將?['+1', '就這']?復讀為?['+1+1+1', '就這就這就這']

要求復讀后不改變列表元素的順序,請你在原列表中,將每個元素都復讀三次,并將復讀后的列表打印出來。

words = ['+1', '不會吧', '下次一定', '+10086', '就這']

解題后:

words = ['+1', '不會吧', '下次一定', '+10086', '就這']
# 方法一
items = []
for word in words:items.append('%s'%(word * 3))
print(items)# 方法二
# for i in range(len(words)):
#   words[i] *= 3
# print(words)

編程練習——句子扭蛋

學完一關啦,想不想輕松一下?這就給你介紹一個好玩的游戲:句子扭蛋。

首先邀請你的小伙伴一起,大開腦洞隨便寫下三組詞,分別包括人物、地點和事件三類詞,比如:

人物:哆啦A夢,迪迦奧特曼,路飛,蘇大強,容嬤嬤,甄嬛,謝耳朵

地點:埃菲爾鐵塔上,地鐵上,大街上,飛機上,三里屯,家里,浴室里,王者峽谷

事件:背課文,高唱《死了都要愛》,蹦極,補暑假作業,跳遠,開黑,800米跑,看《生活大爆炸》

然后,在三組詞里隨機抽簽,用上面這些詞來“造句”,比如“容嬤嬤在王者峽谷看《生活大爆炸》。”

是不是覺得還蠻有趣的?Python 可以很方便地做一個這樣的游戲,我們把人物、地點和事件分別存到列表?rolesspots?和?events?里,再用?random()?函數隨機生成列表的索引值,在列表中隨機選取元素并拼成句子。

生成?roles?列表隨機索引值?i_role?的代碼已經寫好,請你仿照這個例子,生成其他列表的索引值,并用字符串格式化的方法,把隨機取到的列表元素拼成句子。

提示:老師給的例子不夠有趣?你可以修改列表里已經寫好的詞,DIY 你自己的句子扭蛋哦!

# 有下面這行代碼,random() 方法才會奇效,注意不要刪掉它~
import randomroles = ['哆啦A夢', '迪迦奧特曼', '路飛', '蘇大強', '容嬤嬤', '甄嬛', '謝耳朵']
spots = ['埃菲爾鐵塔上', '地鐵上', '大街上', '飛機上', '三里屯', '家里', '浴室里', '王者峽谷']
events = ['背課文', '高唱《死了都要愛》', '蹦極', '補暑假作業', '跳遠', '開黑', '800米跑', '看《生活大爆炸》']# 請仿照下面這行代碼,生成列表 spots 和 events 的隨機索引值
i_role = random.randint(0, len(roles) - 1)# 下面是老師寫好的句子模板,請你用字符串格式化的方法向其中填入內容。
# 當然,你也可以 DIY 輸出句子的格式哦!
print('我看到了一件怪事:【人物】在【地點】【做某件事】。')

解答后:

# 有下面這行代碼,random() 方法才會奇效,注意不要刪掉它~
import randomroles = ['哆啦A夢', '迪迦奧特曼', '路飛', '蘇大強', '容嬤嬤', '甄嬛', '謝耳朵']
spots = ['埃菲爾鐵塔上', '地鐵上', '大街上', '飛機上', '三里屯', '家里', '浴室里', '王者峽谷']
events = ['背課文', '高唱《死了都要愛》', '蹦極', '補暑假作業', '跳遠', '開黑', '800米跑', '看《生活大爆炸》']# 請仿照下面這行代碼,生成列表 spots 和 events 的隨機索引值
i_role = random.randint(0, len(roles) - 1)
i_spot = random.randint(0, len(roles) - 1)
i_event = random.randint(0, len(roles) - 1)# 下面是老師寫好的句子模板,請你用字符串格式化的方法向其中填入內容。
# 當然,你也可以 DIY 輸出句子的格式哦!
print('我看到了一件怪事:%s在%s%s。' %(roles[i_role],spots[i_spot],events[i_event]))# 我看到了一件怪事:甄嬛在三里屯蹦極。
# 我看到了一件怪事:甄嬛在埃菲爾鐵塔上800米跑。
# 我看到了一件怪事:迪迦奧特曼在大街上高唱《死了都要愛》。
# 我看到了一件怪事:容嬤嬤在家里跳遠。
......

是不是很有意思呢~~

預告:下一篇:字符串的索引

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/22751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/22751.shtml
英文地址,請注明出處:http://en.pswp.cn/web/22751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【限免】雜波環境下線性調頻脈沖、巴克碼、頻率步進脈沖雷達MTI、脈沖壓縮【附MATLAB代碼】

文章來源:?微信公眾號:EW Frontier/ 智能電磁頻譜算法 本代碼主要模擬雜波環境(飛機、地雜波、鳥類信號)下,Chirp脈沖、巴克碼脈沖、頻率步進脈沖雷達信號的脈沖壓縮及MTI、匹配濾波。 MATLAB主代碼 % 生成雷達信號…

做任務賺錢的app有哪些?(真實可靠能做任務賺錢軟件app推薦)

在數字化時代,通過手機APP做任務賺錢已成為一種流行的兼職方式。這些APP為用戶提供了完成小任務以賺取現金或獎勵的機會。以下是一些真實可靠的做任務賺錢的APP推薦,幫助您在空閑時間增加收入。 賞幫賺是一個正規的兼職接單賺錢平臺,在這個平…

MariaDB數據導入與導出操作演示

文章目錄 整個數據庫導出導入先刪除庫然后再導入 參考這里: MariaDB數據庫導出導入. 整個數據庫 該部分演示:導出數據庫,然后重建數據庫,并導入數據的整個過程。 導出 Win R ,打開運行輸入cmd并回車,然…

迅雷極簡易下載

一、簡介 1、迅雷是一家全球領先的去中心化服務商,以技術構建商業,以服務創造共識,從而建立一個高效可信的存儲與傳輸網絡。 迅雷成立于2003年,總部位于中國深圳,2014年于納斯達克上市(納斯達克股票代碼&a…

Linux系統管理磁盤管理003

操作系統: CentOS Stream9 測試過程: 模擬磁盤被沾滿, 創建文件 測試腳本 for i in seq 10do# echo $idd if/dev/zero of./$i-$RANDOM.txt bs1M count1024 Done[rootlocalhost ~]# vim 2.txt [rootlocalhost ~]# sh 2.txt 記錄了10240 的…

OPPO 文件傳輸 - 將文件從 OPPO 手機傳輸到 PC 的 5 種方法

OPPO手機以其出色的拍照功能而聞名,尤其是新推出的OPPO Find X2系列,它配備了高清前置鏡頭和超夜景模式,讓您輕松拍出精彩瞬間。當您需要將這些照片或其他文件從OPPO手機傳輸到PC時,以下是五種簡便的方法。 第 1 部分&#xff…

UI設計公司-藍藍設計-交通行業ui設計解決方案

來百度APP暢享高清圖片 這是北京蘭亭妙微科技有限公司(簡稱藍藍設計)在交通行業的一些ui設計經驗,我們建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習&#xff0…

電路方案分析(十九)快速響應過流事件檢測電路

快速響應過流事件檢測電路 1.設計需求2.設計方案3.設計說明4.仿真驗證 tips&#xff1a;方案參考來自TI參考設計&#xff0c;僅供學習交流使用。 1.設計需求 2.設計方案 這是一種快速響應單向電流檢測解決方案&#xff0c;通常稱為過流保護 (OCP)&#xff0c;可提供 < 2μ…

【AI大模型】基于Langchain和Openai借口實現英文翻譯中文應用

&#x1f680; 作者 &#xff1a;“大數據小禪” &#x1f680; 文章簡介 &#xff1a;本專欄后續將持續更新大模型相關文章&#xff0c;從開發到微調到應用&#xff0c;需要下載好的模型包可私。 &#x1f680; 歡迎小伙伴們 點贊&#x1f44d;、收藏?、留言&#x1f4ac; 目…

【python009】Python處理某區域邊界經緯度數據至geohash

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題、知識點等&#xff0c;如Python處理某區域邊界經緯度數據至geohash&#xff0c;便于時空交集。 2.歡迎點贊、關注、批評、指正&#xff0c;互三走起來&#xff0c;小手動起來&#xff01; 3.歡迎點贊、關注、批評…

net/http與gin框架的關系分析

要想學好 gin 框架&#xff0c;首先要學習 net/http 服務&#xff0c;而二者的關系又是重中之重。 本文所要做的任務就是將二者“連接” 起來&#xff0c;讓讀者掌握其中之精髓。 一、Golang HTTP 標準庫示例 使用 golang 啟動 http 服務非常簡單&#xff0c;就是一個標準的 C…

【數據庫初階】SQL--DCL

文章目錄 DCL1. 基本介紹2. 用戶管理2.1 查詢用戶2.2 創建用戶2.3 修改用戶密碼2.4 刪除用戶 3. 權限控制3.1 查詢權限3.2 授予權限3.3 撤銷權限 4. DCL總結 DCL 更多數據庫MySQL系統內容就在以下專欄&#xff1a; 專欄鏈接&#xff1a;數據庫MySQL 1. 基本介紹 DCL英文全稱是…

45-3 護網溯源 - 為什么要做溯源工作

官網:CVERC-國家計算機病毒應急處理中心 西工大遭網絡攻擊再曝細節!13名攻擊者身份查明→ (baidu.com) 護網溯源是指通過技術手段追蹤網絡攻擊的來源和行為,其重要性體現在以下幾個方面: 安全防御:了解攻擊源頭可以幫助組織加強網絡安全防御,及時采取措施防止攻擊的再次…

NXP i.MX8系列平臺開發講解 - 3.14 Linux 之Power Supply子系統(二)

專欄文章目錄傳送門&#xff1a;返回專欄目錄 Hi, 我是你們的老朋友&#xff0c;主要專注于嵌入式軟件開發&#xff0c;有興趣不要忘記點擊關注【碼思途遠】 目錄 1. 前言 2. 芯片簡介 2. 系統原理設計 2. 設備樹相關 本文實操是基于Android11 系統下i.MX8MQ環境下&#x…

基礎復習---二進制補碼

1.二進制補碼表示法基于以下原理&#xff1a; 正數的補碼&#xff1a;正數的補碼與其原碼&#xff08;即直接表示的二進制形式&#xff09;相同。 負數的補碼&#xff1a;負數的補碼是其絕對值的二進制表示&#xff08;即正數的補碼&#xff09;&#xff0c;然后取反&#xff…

代碼隨想錄算法訓練營第十三天| 102. 二叉樹的層序遍歷、226.翻轉二叉樹、101. 對稱二叉樹

102. 二叉樹的層序遍歷 題目鏈接&#xff1a;102. 二叉樹的層序遍歷 文檔講解&#xff1a;代碼隨想錄 狀態&#xff1a;dfs沒寫出來&#xff0c;bfs不知道如何分層 import java.util.*;public class BinaryTreeLevelOrderTraversal {// 用于存儲每一層的節點值List<List<…

rocketmq No route info of this topic 問題排查

Broker配置項 autoCreateTopicEnable true 如果是單節點(master),注釋掉這里的配置 #有三個值&#xff1a;SYNC_MASTER&#xff0c;ASYNC_MASTER&#xff0c;SLAVE&#xff1b;同步和異步表示Master和Slave之間同步數據的機制&#xff1b; #brokerRole SYNC_MASTER Pytho…

【2024最新華為OD-C/D卷試題匯總】[支持在線評測] 土地分配 (100分) - 三語言AC題解(Python/Java/Cpp)

?? 大家好這里是清隆學長 ,一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C/D卷的三語言AC題解 ?? ACM銀牌??| 多次AK大廠筆試 | 編程一對一輔導 ?? 感謝大家的訂閱? 和 喜歡?? ??在線評測鏈接 土地分配(100分) ?? 評測功能需要訂閱專欄后私信聯系清隆解…

阿里云盤手機批量修改文件名

背景 目前刷劇都會使用阿里云盤配合infuse,但是從網上找到的資源經常命名不符合Infuse的刮削規范,導致無法正確建立元數據,雖然PC端可以使用油猴腳本批量修改電視劇名稱, 但是經常出現身邊并沒有電腦(或者電腦上沒有油猴腳本)的情況,這時候用手機就很難批量修改文件名,雖然iph…