python 字符串变量 组合列表_Python智慧编程——第3讲 字符串与列表
第 3 課 Python 的字符串與列表
前面的課程中,我們通過Mu軟件編程工具讓Python做了一些基本的運算,并且學(xué)習了變量的概念以及使用。在這一課程里,我們會繼續(xù)學(xué)習Python編程中的另一些內(nèi)容:字符串(string)、列表( list )。你會學(xué)到字符串是用于在程序中顯示消息的(比如在游戲里“準備”和“游戲結(jié)束”這樣的消息),其實上一次的課程我們已經(jīng)見過了Python字符串,當時我們可能還不知道這一名稱,這節(jié)課我們將對字符串做更加廣闊的學(xué)習。本次課你還會學(xué)到列表,列表( list )可謂是我們Python用來存儲成批東西,使用頻率非常的高,讓我們一起學(xué)習新的知識內(nèi)容吧!
3.1字符串——strings
在編寫程序的術(shù)語中,我們通常把文字稱為“字符串”(string )。如果你把字符串想象成一堆字的組合的話,這個名字還是挺形象的。本書中的所有的字、數(shù)字以及符號都可以是一個字符串。并且你的名字也可以是個字符串,你家的地址也是。事實上,我們創(chuàng)建的第一個 Python程序也用到了一個字符串“Hello World!”。
3.1.1創(chuàng)建字符串
在Python中,我們通過給文本添加引號的方式來創(chuàng)建一個字符串。把文字用引號括起來就創(chuàng)建了字符串。像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
myName = "my name is ruiQu crazyRobot"
注意,引號一定是英文半角”” 的引號形式,而非中文全角“”的引號形式。然后,在Python中要看看myName里放的是什么,只要在Python輸入 print(myName),就像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
myName = "my name is ruiQu crazyRobot"
print(myName)
運行結(jié)果
運行結(jié)果
注:以后的運行結(jié)果圖片,我們只使用程序編輯與運行輸出兩個窗口。
你也可以用單引號來創(chuàng)建一個字符串,像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
myName = 'my name is superMan'
print(myName)
運行結(jié)果
運行結(jié)果
要注意的是:如果你只用一個單引號(’)或者雙引號(”)來輸入超過一行的文字,或者用一種引號開頭并嘗試用另一種引號結(jié)尾的話,我們的Mu軟件代碼就會用醒目的顏色提醒你的代碼輸入有誤,例如:
輸入代碼# 在這里寫上你的代碼 :-)
address = '安徽省 合肥市
print(address)
運行結(jié)果
運行結(jié)果
該圖是上面輸入代碼運行的結(jié)果,在輸入代碼的過程中我們其實已經(jīng)發(fā)現(xiàn)了問題,我們在使用字符串對地址address賦值的時候,故意只用了一個單引號(’),立刻就會看到紅色背景的提示,這種提示在Mu軟件里表示的是一種錯誤警告,如果我們沒有檢查,直接點擊程序運行,程序無法正常運行。
看了錯誤的提示信息后,我們應(yīng)該能粗略的懂得,在程序的第二行(line 2),在字符串創(chuàng)建的時候出現(xiàn)了問題,這樣我們就能迅速的定位到錯誤代碼發(fā)生的位置,改正它!以下是修改正確后的結(jié)果。
輸入代碼# 在這里寫上你的代碼 :-)
address = '安徽省 合肥市'
print(address)
運行結(jié)果
運行結(jié)果
3.1.2字符串問題處理
現(xiàn)在來看看一個亂七八糟的字符串例子,它會讓Python顯示一條錯誤信息:
輸入代碼# 在這里寫上你的代碼 :-)
words = 'he said, "Hi I'm ten years old,what's your name?"'
print(words)
運行結(jié)果
運行結(jié)果
在程序第二行,我們想要創(chuàng)建一個由單引號括起來的字符串(變量的名叫words,但是其中混著一些帶有單引號的詞I'm和what's,還有一對he said后面的雙引號。太亂了!要記住Python可沒有人那么聰明。當Python看到一個引號時(無論是單引號還是雙引號),它期望在同一行的后面是一個從第一個引號開始到下一個對應(yīng)的引號(無論是單引號還是雙引號)結(jié)束的字符串。在這個例子中,字符串是從Hi之前的一個單引號標記開始,對于Python來講,這個字符串的結(jié)尾是在I’m的I之后的那個單引號。
Mu中的最后一行告訴我們出現(xiàn)了什么類型的錯誤。在本例中,這是個語法錯誤。
使用雙引號來代替單引號的話,仍然會產(chǎn)生錯誤:
輸入代碼# 在這里寫上你的代碼 :-)
words = "he said, "Hi I'm ten years old,what's your name?""
print(words)
運行結(jié)果
運行結(jié)果
這一次,Python看到了一個由雙引號括起來的字符串內(nèi)容為:He said,(結(jié)尾還有一個空格),做了更改后還是發(fā)生了錯誤。這是因為從 Python 的角度來講,所有這些額外的東西根本就不應(yīng)該在那里。Python只知道要找到下個對應(yīng)的引號,但卻不知道你寫在同一行上的后面的那些東西是想做什么。
解決這個問題的方法就是用多行字符串,就是使用三個單引號(’’’),它可以讓我們在字符串中加入單引號和雙引號而不會引起錯誤。事實上,如果我們用三個單引號的話,我們可以在字符串中放入任意單引號和雙引號的組合(只要不把三個單引號放進去就行)。 我們那個字符串無錯的版本是這樣的:
輸入代碼# 在這里寫上你的代碼 :-)
words = '''he said, "Hi I'm ten years old,what's your name?"'''
print(words)
運行結(jié)果
運行結(jié)果
哇塞!經(jīng)歷了一波三折終于解決了!其實我們還有另外一種辦法解決這個問題。在 Python里,如果你真的很想用單引號或者雙引號而不是三個單引號來括起的字符串的話, 你可以在字符串中間的每個引號前加上一個反斜杠(\)。這叫做“轉(zhuǎn)義”(escaping)。我們用這種方式告訴 Python:“是的,我知道在我的字符串中間有引號,希望你忽略它們直到看見結(jié)束的那個引號為止。我在字符串里面放進了引號,請忽略它,接著向下找結(jié)束的那個引號去吧!”
一般來說轉(zhuǎn)義的字符串很難閱讀,所以更好的方法可能還是用多行字符串。可是你還是有可能會碰到使用轉(zhuǎn)義的代碼片段,所以最好也要了解一下為什么用到了反斜杠。
下面是兩種不同的轉(zhuǎn)義使用方法,但是都能達到同樣的效果。
輸入代碼# 在這里寫上你的代碼 :-)
words1 = 'he said, "Hi I\'m ten years old,what\'s your name?"'
words2 = "he said, \"Hi I'm ten years old,what's your name?\""
print(words1)
print(words2)
運行結(jié)果
運行結(jié)果
首先,在word1中,我們用單引號創(chuàng)建了一個字符串,在字符串里面的每個單引號前面加上了反斜杠。在word2中,我們用雙引號創(chuàng)建了一個字符串,在字符串里的那些雙引號前面加上了反斜杠。在接下來的那幾行上,我們把剛剛創(chuàng)建的變量打印出來。請注意反斜杠字符不會出現(xiàn)在我們打印出的字符串里。
3.1.3字符串中的數(shù)值
如果你想顯示一條使用變量中內(nèi)容的信息,你可以用%s來把值嵌入到字符串里面,它就像為你以后所要加入的值占著位置。我們程序員也喜歡稱它為占位符號,簡稱占位符,例如,要想先讓Python計算或者存儲你在某游戲中的得分,然后把它加入到像“我得到了__分”這樣的一句話中,可以在這句話中用%s來代替即將要計入的值,然后告訴Python這個值是什么。就像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
myScore = 98
message = "今天編程,我的成績得到了 %s 分"
print(message % myScore)
運行結(jié)果
運行結(jié)果
在這里,我們創(chuàng)建了一個變量myScore(我的得分),它的值是98,還創(chuàng)建了一個變量 message(信息),這個字符串的內(nèi)容是“我得到了%s分”,其中的%s得分的占位符。在下一行里,我們在對print(message %
myScore) 的調(diào)用中使用%符號來告訴Python把%s替換成保存在變量 myScore中的值。打印這個信息的結(jié)果是“今天編程,我的成績得到了%s分”。這里的值不是必須用變量來替換。我們同樣也可以寫成print(message % 98)。
對于同一個%s占位符,我們可以用不同的變量來傳給它不同的值,就像下面這個例子:
輸入代碼# 在這里寫上你的代碼 :-)
subjectMath = '數(shù)學(xué)'
subjectCoding = '編程'
message = "今天%s ,我的成績得到了98分"
print(message % subjectMath)
print(message % subjectCoding)
運行結(jié)果
運行結(jié)果
在這里,我們創(chuàng)建了三個變量。第一個,subjectMath(數(shù)學(xué)科目),第二個,subjectCoding(編程科目)和內(nèi)容為帶有%s標記的message字符。在打印變量message時,我們可以再次用%運算符,使用subjectMath或subjectCoding的內(nèi)容來進行替換%s的內(nèi)容,從而產(chǎn)生不同的信息。在一個字符串中你也可以使用多個占位符,就像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
name = 'crazyRobot'
year = 12
words = 'Hi my name is %s,I\'m %s years old!'
print(words % (name, year))
運行結(jié)果
運行結(jié)果
3.1.4字符串的乘法
10乘以5等于什么?答案當然是50。可是5乘以crazyRobot呢?下面是Python給出的答案:
輸入代碼# 在這里寫上你的代碼 :-)
name = 5 * 'crazyRobot'
print(name)
運行結(jié)果
運行結(jié)果
3.1.5字符串的加法
12加上33等于多少?答案當然是50。可是“hello”加上“Robot”呢?下面是Python給出的答案。
輸入代碼# 在這里寫上你的代碼 :-)
shows = 'hello' + 'Robot'
print(shows)
運行結(jié)果
運行結(jié)果
可以看到,一個字符串加上另一個字符串,其實是將“+”號左右兩側(cè)的字符串拼接組合了在一起的,就像我們把“=”號讀作賦值一樣,在以后我們會把“+”號應(yīng)用在字符串中,我們讀作拼接。
經(jīng)過字符串的學(xué)習后,我們可以利用這個功能來用Python對字符串完成一定數(shù)量的空格對齊。下面,讓我們在Mu程序中打印一封信。
案例:一封信件
一封信件
輸入代碼# 在這里寫上你的代碼 :-)
spaces = ' '
star = '*'
end = '。'
head = '尊敬的XXX'
regards1 = '%s您好!'
regards2 = '%s此致'
regards3 = '敬禮!'
yourName = '%s您的:___'
dateTime = '%s__年__月__日'
print(head)
print(regards1 % (spaces * 3))
print()
print((spaces * 3) + (star * 40))
print(star * 43)
print(star * 20 + end)
print(regards2 % (spaces * 3))
print(regards3)
print()
print(yourName % (spaces * 35))
print()
print(dateTime % (spaces * 32))
運行結(jié)果
程序編寫
運行結(jié)果
案例:信件印刷機
輸入代碼# 在這里寫上你的代碼 :-)
spaces = ' '
cut = '——'
name = input('請輸入收件人名稱:')
head = '尊敬的%s'
regards1 = '%s您好!'
regards2 = '%s此致'
regards3 = '敬禮!'
friend = input('請輸入你們的關(guān)系:')
yourName = '%s您的:%s'
date = input('請輸入寫信的時間:')
print(cut * 22)
dateTime = '%s%s'
print(head % name)
print(regards1 % (spaces * 3))
print((spaces * 3) + '自從去年在機器人教室分別,好久不見,你還好嗎?')
print('我在上周周末,已經(jīng)完成了所有樂高機器人的學(xué)習,現(xiàn)在')
print('打算學(xué)習Python代碼編程了,要一起來嗎?')
print(regards2 % (spaces * 3))
print(regards3)
print(yourName % (spaces * 32, friend))
print(dateTime % (spaces * 32, date))
運行結(jié)果
程序編寫
運行結(jié)果
除了用乘法來對齊,我們也可以用它來讓屏幕上充滿無聊的信息。你可以自己試試這個。
輸入代碼# 在這里寫上你的代碼 :-)
print(10000 * '01010011')
3.2強大的列表——Lists
“擎天柱、大黃蜂、爵士、救護車、鐵皮、霸天虎、威震天、紅蜘蛛。。。。。。”相信看過《變形金剛》的同學(xué),對這些文字并不陌生,對,沒錯,這是《變形金剛》里面人物的名字,那這些跟我們要學(xué)習的列表有什么關(guān)系呢?現(xiàn)在我們要用它來作為例子來看看字符串和列表有什么不同。
我們可以把清單上的這一系列元素用字符串的形式放到變量?Transformers?中:
變形金剛劇照
輸入代碼# 在這里寫上你的代碼 :-)
transformers = '擎天柱,大黃蜂,爵士,救護車,鐵皮,霸天虎,威震天,紅蜘蛛'
print(transformers)
運行結(jié)果
運行結(jié)果
但我們也可以創(chuàng)建一個列表(list),這是一種強大而又有點魔力的Python對象,我們可以操縱它。下面是這些元素寫成列表的樣子:
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂', '爵士',
'救護車', '鐵皮', '霸天虎',
'威震天', '紅蜘蛛'
]
print(transformersList)
運行結(jié)果
運行結(jié)果
可能你暫時還沒有發(fā)現(xiàn),創(chuàng)建一個列表而是一個字符串的優(yōu)勢在哪里,甚至會覺得創(chuàng)建一個列表比創(chuàng)建一個字符串要多敲幾下鍵盤。但是我要明確告訴你,列表比字符串更有用,因為我們可以對它進行操作。例如,在方括號([])中輸入列表中的位置(這叫“索引位置”,像座位號一樣),我們就可以打印transformersList中的第幾個元素(大黃蜂)。就像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂', '爵士',
'救護車', '鐵皮', '霸天虎',
'威震天', '紅蜘蛛'
]
print(transformersList[1])
運行結(jié)果
運行結(jié)果
唉?這不是列表中的第二個元素嗎?是的,但是列表是從位置0開始索引,所以列表中的第一個元素是0,第二個是1, 然后第三個是2,以此方式延續(xù)往后推。這對于我們?nèi)祟悂碇v可能說不通,但對計算機來講就是這樣的。改變列表中的-個元素,比起在字符串中要容易多了。可能我們不想要威震天了,而想要鋼索。下面是Python如何讓我們的列表做到這個的:
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂', '爵士',
'救護車', '鐵皮', '霸天虎',
'威震天', '紅蜘蛛'
]
transformersList[6] = '鋼索'
print(transformersList)
運行結(jié)果
運行結(jié)果
這樣就把索引位置6中原來是威震天的元素設(shè)置為鋼索了。
另一個操作是顯示列表的一部分。我們通過在方括號中使用冒號(:)來做到這一點。例如,輸入下面的代碼就能看到從第二個到第五個元素組成的一個新列表汽車人autobots。
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂', '爵士',
'救護車', '鐵皮', '霸天虎',
'威震天', '紅蜘蛛'
]
autobots = transformersList[2:5]
print(autobots)
運行結(jié)果
運行結(jié)果
寫上[2:5]就如同在說:“顯示從索引位置2直到(但不包含)索引位置5的元素”, 換句話 說, 就是元素2、3和4。列表可以用來存放各種元素,比如數(shù)字:
輸入代碼# 在這里寫上你的代碼 :-)
numbers = [15, 2, 3, 8]
還可以把數(shù)字和字符串混合在一起:
輸入代碼# 在這里寫上你的代碼 :-)
something = [15, 'crazyRobot', 2, 3, 8, '擎天柱']
列表中甚至可以保存其他列表:
輸入代碼# 在這里寫上你的代碼 :-)
strings = ['nice', 'to', 'meet', 'you', '!']
numbers = ['45', '2', '2', '17', '22', '36']
newList = [strings, numbers]
print(newList)
運行結(jié)果
運行結(jié)果
這個列表中又有列表的例子中(讀起來有點拗口)創(chuàng)建了三個變量:strings中有五個字符串,其中也包含了感嘆號的字符串,numbers中有六個數(shù)字,其中還有重復(fù)的數(shù)字,newList列表中是strings和numbers。第三個列表(newList)只有兩個元素,因為它是變量名的列表,而不是這些變量的內(nèi)容組成的列表。
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂'
]
transformersList.append('紅蜘蛛')
print(transformersList)
運行結(jié)果
運行結(jié)果
你可以把append()當作一個很好用的工具,可以一直往變形金剛列表transformersList中增加人物名稱信息,像這樣:
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂'
]
transformersList.append('龍風暴')
transformersList.append('路障')
transformersList.append('熱破')
print(transformersList)
運行結(jié)果
運行結(jié)果
剛剛我們使用了append()不斷往列表增加新的元素數(shù)據(jù),那么反過來如何進行刪除減少的呢?這事我們需要使用del命令,使用del命令(delete,刪除的縮寫)加上要刪除的列表中元素的索引信息,將該元素從列表中刪除。
輸入代碼# 在這里寫上你的代碼 :-)
transformersList = [
'擎天柱', '大黃蜂', '爵士',
'救護車', '鐵皮', '霸天虎',
'威震天', '紅蜘蛛'
]
del transformersList[2]
print(transformersList)
運行結(jié)果
運行結(jié)果
列表還可以做運算,想不到吧!下面讓我們看一下列表的相加。
輸入代碼# 在這里寫上你的代碼 :-)
strings = ['nice', 'to', 'meet', 'you', '!']
numbers = ['45', '2', '2', '17', '22', '36']
newList = strings + numbers
print(newList)
運行結(jié)果
運行結(jié)果
從上面Python程序運行的結(jié)果我們可以看得出,兩個列表的相加其實可以像我們之前做字符串相加一樣,“+”號在字符串和列表中可以理解為“+”號前后數(shù)據(jù)的拼接、連接。
我們也可以把列表乘以一個數(shù)字。例如:
輸入代碼# 在這里寫上你的代碼 :-)
strings = [12, 10]
print(strings * 6)
運行結(jié)果
運行結(jié)果
這實際上就是告訴Python把列表strings重復(fù)六次。
然而除法(/)和減法(-)只會產(chǎn)生錯誤,就像下面一樣:
輸入代碼# 在這里寫上你的代碼 :-)
strings = [12, 10]
print(strings / 6)
運行結(jié)果
運行結(jié)果
輸入代碼# 在這里寫上你的代碼 :-)
strings = [12, 10]
print(strings - 6)
運行結(jié)果
運行結(jié)果
可這是為什么呢?這個么,用“+”號來連接列表和用“*”號來重復(fù)列表都是很直接明了的操作。這些概念在現(xiàn)實世界中也說得通。例如,如果我交給你兩張購物清單的紙,然后和你說:“把這兩個單子加在一起”,你可能就會在另一張紙上把所有的元素都從頭到尾按順序?qū)懸槐椤M瑯尤绻艺f:“把這個列表翻3倍”,你也會想到再用一張紙把所有的列表元素寫三遍。
但是怎么給列表做除法呢?例如,你將一個列表通過“/”號來表達除法,你是想讓這個列表拆分為6個呢?還是想讓列表中的元素除以6呢?那如果列表中的元素不是數(shù)值而是字符串又該如何做與整數(shù)的除法呢?如果你有了這個思維,相信應(yīng)該很好理解這一樣的行為是行不通的。
在計算機編程中,每次你輸入同一個命令它都應(yīng)該完全以同樣的方式工作。計算機這個笨蛋看東西非黑即白。如果讓它來做個混亂不清的決定,那它就只能舉手投降,報出錯誤來。
案例——治愈選擇困難癥的機器人
滿漢全席照片
輸入代碼# 在這里寫上你的代碼 :-)
import random
menuList = [
'臭豆腐', '海帶排骨湯', '土豆燒雞',
'紅燒肉', '油燜茄子', '天麻烏雞湯',
'三河小炒', '獅子頭', '雞丁米線',
'夫妻肺片', '蛋炒飯', '蘭州拉面',
'番茄炒雞蛋', '淮南牛肉湯', '炸雞',
'去隔壁蹭飯', '黃燜雞米飯', '西北風'
]
food = random.choice(menuList)
print('別再說你不知道吃什么,這頓飯你可以選擇:', end='')
print(food)
運行結(jié)果
運行結(jié)果
還好我不是去隔壁蹭飯吃,也不是去喝西北風,程序隨機選擇結(jié)果是讓我去吃油燜茄子,你也來試一下吧!這個程序?qū)V尾恢涝摮允裁达埖拿 ?/p>
3.4你學(xué)會了什么
在這一課里,你學(xué)到了Python是如何用字符串來保存文字的,學(xué)會了使用占位符來嵌入你想在字符串中嵌入的數(shù)據(jù)信息,以及它是如何用列表來處理多個元素的。你明白了列表中的元素可以改變,可以增加、刪減、修改,通過索引的方式對列表進行查詢,list列表具有非常齊全的功能,并且你可以把一個列表和另一個列表連在一起。
國防服役——未完待續(xù)
總結(jié)
以上是生活随笔為你收集整理的python 字符串变量 组合列表_Python智慧编程——第3讲 字符串与列表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三角形css_使用css绘制三角形
- 下一篇: 合法的python变量名import_p