python學習入門:字符串函數的使用說明

翻譯:淘特

本章涵蓋的主題:

 字符串

 字符串連接和複製

 使用IDLE編寫源代碼。

 在IDLE中保存和運行程序。

 print() 函數

 input() 函數

 Comments

在本章中,我們將學習如何在變量中存儲文本,將文本組合在一起,並在屏幕上顯示文本。我們還將製作我們的第一個程序,用"Hello World!"文本向用戶致意,並讓用戶輸入姓名。

字符串

在Python中,我們使用的文本稱為字符串值(或簡稱字符串)。我們所有的密碼和黑客程序都處理字符串值,將明文變為"一個是陸地,一個是空間"。變成像'Tqe kg im npqv,jst kg im oapxe'這樣的密文。。明文和密文在我們的程序中表示為字符串值,Python代碼可以操縱這些值的方式很多。

我們可以將字符串值存儲在變量中,就像整數和浮點值一樣。當我們鍵入字符串時,我們將它們放在兩個單引號(')之間以顯示字符串開始和結束的位置。在交互式shell中輸入:

>>> spam = 'hello'

>>>

單引號不是字符串值的一部分。Python知道'hello'是一個字符串,而spam是一個變量,因為字符串被引號括起來,而變量名不是。

如果您在shell中鍵入spam,您應該會看到spam變量('hello'字符串)的內容。這是因為Python會將變量計算為其中存儲的值:在這種情況下,字符串為'hello'。

>>> spam = 'hello'

>>> spam

'hello'

>>>

字符串幾乎可以包含任何鍵盤字符。(我們稍後會討論特殊的"轉義字符"。)這些都是字符串的例子:

>>> 'hello'

'hello'

>>> 'Hi there!'

'Hi there!'

>>> 'KITTENS'

'KITTENS'

>>> ''

''

>>> '7 apples, 14 oranges, 3 lemons'

'7 apples, 14 oranges, 3 lemons'

>>> 'Anything not pertaining to elephants is irrelephant.'

'Anything not pertaining to elephants is irrelephant.'

>>> 'O*wY%*&OcfsdYO*&gfC%YO*&%3yc8r2'

'O*wY%*&OcfsdYO*&gfC%YO*&%3yc8r2'

注意''字符串中有零個字符; 單引號之間沒有任何內容。這稱為空字符串空字符串

使用+運算符進行字符串連接

您可以使用+運算符將兩個字符串值添加到一個新字符串值中。這樣做稱為字符串連接。嘗試在命令行中輸入' Hello'+'World! ':

>>> 'Hello' + 'World!'

'HelloWorld!'

>>>

要在"Hello"和"World!"之間添加一個空格,請在"Hello"字符串的末尾和單引號前面添加一個空格,如下所示:

>>> 'Hello ' + 'World!'

'Hello World!'

>>>

請記住,Python將精確地連接你告訴它連接的字符串。如果在結果字符串中需要空格,則兩個原始字符串之一中必須有空格。

+操作符可以連接兩個字符串值到一個新的字符串值("你好" +"世界!"到"世界,你好!"),就像它可以增加兩個整數值到一個新的整數值(2 + 2 至4) 。 由於值的數據類型,Python知道+運算符應該做什麼。每個值都是有它的數據類型。值"Hello"的數據類型是一個字符串。值5的數據類型是整數。告訴我們(和計算機)數據的數據類型是什麼樣的數據。

+操作者可以在表達式中使用具有兩個字符串或兩個整數。如果您嘗試使用字符串值和整數值的+運算符,則會出現錯誤。在交互式shell中鍵入以下代碼:

>>> 'Hello' + 42

Traceback (most recent call last):

File "<stdin>", line 1, in <module>/<stdin>

TypeError: Can't convert 'int' object to str implicitly

>>> 'Hello' + '42'

'Hello42'

>>>

使用*運算符進行字符串複製

您還可以在字符串和整數上使用*運算符來執行字符串複製。這將複製(即重複)一個字符串,但是整數值是多少倍。在交互式shell中鍵入以下內容:

>>> 'Hello' * 3

'HelloHelloHello'

>>> spam = 'Abcdef'

>>> spam = spam * 3

>>> spam

'AbcdefAbcdefAbcdef'

>>> spam = spam * 2

>>> spam

'AbcdefAbcdefAbcdefAbcdefAbcdefAbcdef'

>>>

*操作符可以用兩個整數值(將它們相乘)工作。它也可以使用字符串值和整數值(它將複製字符串)。但它不能使用兩個字符串值,這會導致錯誤:

>>> 'Hello' * 'world!'

Traceback (most recent call last):

File "<stdin>", line 1, in <module>/<stdin>

TypeError: can't multiply sequence by non-int of type 'str'

>>>

字符串連接和字符串複製顯示的是,Python中的運算符可以根據它們所操作的值的數據類型執行不同的操作。+ 操作符可以做加法或字符串連接。* 操作符可以做乘法或字符串複製。

使用print() 函數打印值

還有另一種稱為print()函數調用的Python指令。在交互式shell中鍵入以下內容:

>>> print('Hello!')

Hello!

>>> print(42)

42

>>>

函數(如上例中的print())具有執行任務的代碼,例如在屏幕上打印值。Python有許多不同的函數。要調用 一個函數意味著執行函數內部的代碼。

在上面的例子中的指令的值傳遞給print()函數中,並且print()函數將打印值到屏幕上。調用函數時傳遞的值稱為參數。(參數與數值相同,當傳遞給函數調用時,我們只是調用這些值。)當我們開始編寫程序時,我們在屏幕上顯示文本的方式是使用print() 函數。

您可以將表達式傳遞給print() 函數而不是單個值。這是因為實際傳遞給print()函數的值是該表達式的評估值。在交互式shell中嘗試此字符串連接表達式:

>>> spam = 'Al'

>>> print('Hello, ' + spam)

Hello, Al

>>>

'Hello, ' + spam表達式計算結果為字符串值'Hello, Al'。此字符串值是傳遞給print()函數調用的值。

字符轉化

有時候我們可能想要使用一個不容易輸入字符串值的字符。例如,我們可能希望將單引號字符作為字符串的一部分。但是我們會收到一條錯誤消息,因為Python認為單引號是結束字符串值的引號,而後面的文本是錯誤的Python代碼,而不是字符串的其餘部分。在交互式shell中鍵入以下內容:

>>> print('Al's cat is named Zophie.')

File "<stdin>", line 1/<stdin>

print('Al's cat is named Zophie.')

^

SyntaxError: invalid syntax

>>>

要在字符串中使用單引號,我們需要使用轉義字符。轉義字符是反斜槓字符,後跟另一個字符。例如,\\ t,\\ n 或\\'。斜槓告訴Python,斜線後面的字符具有特殊含義。在交互式shell中鍵入以下內容:

>>> print('Al\\'s cat is named Zophie.')

Al's cat is named Zophie.

>>>

轉義字符可幫助我們打印難以在源代碼中鍵入的字母。表4-1顯示了Python中的一些轉義字符:

表4-1。轉義字符

反斜槓始終位於轉義字符的前面,即使您只想在字符串中使用反斜線。這行代碼不起作用:

>>> print('He flew away in a green\\teal helicopter.')

He flew away in a green eal helicopter.

這是因為"teal"中的"t"被視為反斜槓之後的轉義字符。轉義字符\\t模擬按鍵盤上的Tab鍵。轉義字符在那裡,以便字符串可以包含無法輸入的字符。

相反,嘗試下面的代碼:

>>> print('He flew away in a green\\\\teal helicopter.')

He flew away in a green\\teal helicopter.

單引號和雙引號

字符串並不總是必須在Python中的兩個單引號之間。您可以改用雙引號。這兩行打印相同的東西:

>>> print('Hello world')

Hello world

>>> print("Hello world")

Hello world

但是你不能混用單引號和雙引號。這一行會給你一個錯誤:

>>> print('Hello world")

SyntaxError: EOL while scanning single-quoted string

>>>

我喜歡使用單引號,因此我不必按住鍵盤上的Shift鍵來輸入它們。輸入起來比較容易,而且電腦也不在乎。

但是請記住,就像你必須使用轉義字符 ''在單引號中包含一個字符串中的單引號一樣,你需要轉義字符\" 來在由雙引號括起來的字符串中有一個雙引號。例如,看看這兩行:

>>> print('I asked to borrow Alice\\'s car for a week. She said, "Sure."')

I asked to borrow Alice's car for a week. She said, "Sure."

>>> print("She said, \"I can't believe you let him borrow your car.\"")

She said, "I can't believe you let him borrow your car."

您不需要在單引號字符串中轉義雙引號,並且您不需要在雙引號字符串中轉義單引號。Python解釋器很聰明,知道如果一個字符串以一種引號開頭,另一種引用並不意味著字符串結束。

索引

您的加密程序通常需要從字符串中獲取單個字符。索引是將方括號[和]添加到字符串值(或包含字符串的變量)的末尾,並在它們之間加上數字。這個數字被稱為索引,並告訴Python在字符串中哪個位置有你想要的字符。字符串中第一個字符的索引是0。索引1用於第二個字符,索引2用於第三個字符,依此類推。

在交互式shell中鍵入以下內容:

>>> spam = 'Hello'

>>> spam[0]

'H'

>>> spam[1]

'e'

>>> spam[2]

'l'

請注意,表達式spam [0]的 計算結果為字符串值'H',因為H是字符串'Hello'中的第一個字符。請記住,索引從0開始,而不是1.這就是H的索引為0而不是1的原因。

python學習入門:字符串函數的使用說明

圖4-1。字符串'Hello'及其索引。

索引可以與包含字符串值或字符串值的變量(如"Zophie")一起使用。在交互式shell中輸入以下內容:

>>>'Zophie'[2]

'P'

表達式'Zophie'[2] 計算字符串值'p'。這個'p'字符串就像任何其他字符串值一樣,可以存儲在變量中。在交互式shell中鍵入以下內容:

>>> eggs = 'Zopie'[2]

>>> eggs

'p'

>>>

如果輸入的索引對於字符串來說太大,Python將顯示"索引超出範圍"錯誤消​​息。字符串'Hello'中只有5個字符。如果我們嘗試使用索引10,那麼Python將顯示一個錯誤,指出我們的索引"超出範圍":

>>> 'Hello'[10]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>/<stdin>

IndexError: string index out of range

>>>

負指數

負指標從字符串的末尾開始並向前。負號索引-1是字符串中最後一個字符的索引 。索引-2是倒數第二個字符的索引,依此類推。

在交互式shell中鍵入以下內容:

>>> 'Hello'[-1]

'o'

>>> 'Hello'[-2]

'l'

>>> 'Hello'[-3]

'l'

>>> 'Hello'[-4]

'e'

>>> 'Hello'[-5]

'H'

>>> 'Hello'[0]

'H'

>>>

請注意,-5和0是同一字符的索引。大多數情況下,您的代碼將使用正索引,但有時使用負索引會更容易。

截取字符

如果您想從字符串中獲取多個字符,則可以使用slicing而不是索引。slicing也使用[和]方括號但具有兩個整數索引,而不是一個。這兩個指標是由一個獨立的:冒號。在交互式shell中鍵入以下內容:

>>> 'Howdy'[0:3]

'How'

>>>

slicing評估的字符串從第一個索引開始,然後上升到第二個索引,但不包括第二個索引。字符串值'Howdy'的0索引 是H,3索引是d。由於切片達到但不包括第二個索引,因此切片'Howdy'[0:3]計算為字符串值'How'。

嘗試在交互式shell中鍵入以下內容:

>>> 'Hello world!'[0:5]

'Hello'

>>> 'Hello world!'[6:12]

'world!'

>>> 'Hello world!'[-6:-1]

'world'

>>> 'Hello world!'[6:12][2]

'r'

>>>

請注意,表達式'Hello world!'[6:12] [2]首先評估為'world!'[2] ,這是一個進一步計算為'r'的索引。

與索引不同,如果給它一個索引太大的字符串,slicing永遠不會給你一個錯誤。它只會返回最寬的匹配切片:

>>> 'Hello'[0:999]

'Hello'

>>> 'Hello'[2:999]

'llo'

>>> 'Hello'[1000:2000]

''

>>>

表達式'Hello'[1000:2000] 返回一個空白字符串,因為索引1000在字符串結尾之後,所以這個切片可能不包含可能的字符。

空白Slice索引

如果省略切片的第一個索引,Python會自動認為您要為第一個索引指定索引0。表達式'Howdy'[0:3]和'Howdy'[:3]評估相同的字符串:

>>> 'Howdy'[:3]

'How'

>>> 'Howdy'[0:3]

'How'

>>>

如果省略第二個索引,Python會自動認為您要指定字符串的其餘部分:

>>> 'Howdy'[2:]

'wdy'

>>>

Slicing 是從較大字符串獲取"子串"的簡單方法。(但實際上,"子串"仍然只是一個字符串值,就像任何其他字符串一樣。)嘗試在shell中輸入以下內容:

>>> myName = 'Zophie the Fat Cat'

>>> myName[-7:]

'Fat Cat'

>>> myName[:10]

'Zophie the'

>>> myName[7:]

'the Fat Cat'

>>>

到目前為止,我們一直在向交互式shell中鍵入一條指令。當我們編寫程序時,我們輸入了幾條指令,並讓它們在沒有等待下一條指令的情況下運行。讓我們寫我們的第一個程序!

該軟件程序提供交互shell名字叫做IDLE,除了名為文件編輯器的交互式shell外,IDLE還有另一部分內容。

在Python shell窗口的頂部,單擊

文件新窗口。一個新的空白窗口會顯示給我們輸入我們的程序。這個窗口是文件編輯器。文件編輯器窗口的右下角將顯示光標當前位於文件中的行和列。

python學習入門:字符串函數的使用說明

圖4-2。文件編輯器窗口。光標位於第1行第0列。

您始終可以區分文件編輯器窗口和交互式shell窗口,因為交互式shell將始終包含>>> 提示符。

Hello World!

程序員學習新語言的傳統是讓他們的第一個程序在屏幕上顯示"Hello world!"文本。我們現在將創建我們自己的Hello World程序。

在新文件編輯器窗口中輸入以下文本。我們把這個文本稱為程序的源代碼,因為它包含了Python將遵循的指令,以確定程序應該如何表現。

Hello World的源代碼

hello.py

1. # This program says hello and asks for my name.

2. print('Hello world!')

3. print('What is your name?')

4. myName = input()

5. print('It is good to meet you, ' + myName)

IDLE程序將為不同類型的指令提供不同的顏色。鍵入此代碼後,窗口應如下所示:

python學習入門:字符串函數的使用說明

圖4-3。在鍵入代碼後,文件編輯器窗口將如下所示。

保存您的程序

一旦你輸入了你的源代碼,保存它,這樣你就不用每次啟動IDLE時重新輸入它。為此,請從"文件編輯器"窗口頂部的菜單中選擇" 文件另存為"

。另存為窗口應該打開。在文件名字段中輸入hello.py,然後點擊保存。(見圖4-4)

鍵入時應該每隔一段時間保存一次程序。這樣,如果計算機崩潰或您意外退出IDLE,您將不會丟失您鍵入的所有內容。作為快捷方式,您可以在Windows和Linux上按Ctrl-S或在OS X上按⌘-S來保存文件。

運行你的程序

現在是時候運行我們的程序了。點擊運行運行模塊或僅需按F5鍵盤上的鍵。您的程序應該在首次啟動IDLE時出現的shell窗口中運行。請記住,您必須從文件編輯器的窗口按F5,而不是交互式shell的窗口。

當您的程序詢問您的姓名時,請繼續輸入,如圖4-5所示:

python學習入門:字符串函數的使用說明

圖4-5。運行"Hello World"程序時,交互式shell的顯示。

現在,當您按Enter時,程序應該按名稱向您(用戶,即使用該程序的用戶)致意。恭喜!你已經編寫了你的​​第一個程序。你現在是一個初學的計算機程序員。(如果您願意,可以再次按F5再次運行此程序。)

如果你得到一個如下所示的錯誤:

Hello world!

What is your name?

Albert

Traceback (most recent call last):

File "C:/Python27/hello.py", line 4, in <module>

myName = input()

File "<string>", line 1, in <module>/<string>

NameError: name 'Albert' is not defined

......

這意味著你正在用Python 2而不是Python 3運行程序。Python要求輸入函數在接受變量時要以''包含起來,比如 你輸入'Albert'就沒問題了。

打開您保存的程序

單擊頂角的X關閉文件編輯器。要重新加載保存的程序,請從菜單中選擇文件打開。現在就這樣做,並在出現的窗口中選擇 hello.py並按下打開按鈕。您保存的hello.py 程序應在"文件編輯器"窗口中打開。

"Hello World"計劃如何運作

我們輸入的每一行都是一條指示,告訴Python準確地做什麼。計算機程序很像一個配方。先做第一步,然後做第二步,等到最後。按順序執行每條指令,從程序的最頂層開始,按照指令列表進行操作。程序執行第一行指令後,它會繼續執行第二行,然後執行第三行,依此類推。

我們按程序執行程序執行,或簡稱執行程序。執行從第一行代碼開始,然後向下移動。執行可以跳過而不是從上到下,我們將在下一章找到如何實現這一點。

讓我們一行一行地查看我們的程序,看看它在做什麼,從第1行開始。

註釋

hello.py

1. #這個節目打招呼並問我的名字。

這一行被稱為註釋。註釋不是針對計算機,而是針對您。電腦忽略它們。它們用於提醒您程序執行的是什麼,或者告訴其他可能查看代碼的人員您的代碼試圖執行的操作。#符號後面的任何文字(稱為井號)都是註釋。程序員通常在他們的代碼頂部發表註釋,以給程序一個標題。IDLE程序以紅色文本顯示評論以幫助他們脫穎而出。

函數

一個功能有點像你的程序中一個小程序。它包含從上到下執行的代碼行。Python提供了一些我們可以使用的內置函數(您已經使用了print()函數)。關於函數的偉大之處在於我們只需要知道函數的作用,但不知道它是如何實現的。(您需要知道print()函數在屏幕上顯示文本,但您不需要知道它是如何做到的。)

一個函數調用是一段代碼,它告訴我們的程序運行函數中的代碼。例如,只要你想在屏幕上顯示一個字符串,你的程序就可以調用print()函數。的打印()函數將你作為輸入在括號之間鍵入值和在屏幕上顯示的文本。因為想要顯示Hello World!在屏幕上,我們鍵入打印函數名稱,後面跟著一個左括號,然後是'Hello world!'。字符串和右括號。

Print()函數

hello.py

2. print('Hello world!')

3. print('What is your name?')

這一行是對print() 函數的調用(將要打印的字符串放在括號內)。我們在函數名的末尾添加括號,以明確我們指的是名為print()的函數,而不是名為print的變量。函數結尾處的括號讓我們知道我們正在討論一個函數,就像'42'周圍的引號告訴我們我們正在談論字符串'42'而不是整數42。

第3行是另一個print() 函數調用。這次,程序顯示"你叫什麼名字?"

Input()函數

hello.py

4. myName = input()

第4行有一個賦值語句,其中包含一個變量(myName)和一個函數調用(input())。當調用input()時,程序將等待用戶輸入一些文本並按Enter鍵。用戶輸入的文本字符串(它們的名稱)將成為存儲在myName中的字符串值。

與表達式一樣,函數調用也為返回值。(事實上​​,我們也可以使用單詞"returns"來表示函數調用與"evaluate"相同的事情。)在這種情況下,input()函數的返回值是用戶輸入的字符串 - 他們的名稱。如果用戶在Albert中鍵入,則input() 函數調用將評估(即返回)字符串'Albert'。

名為input()的函數不需要任何參數(與print()函數不同),這就是為什麼括號之間沒有任何內容。

hello.py

5. print('It is good to meet you, ' + myName)

對於第5行的print()調用,我們使用加號運算符(+)連接字符串' It is good to meet you '和存儲在myName變量中的字符串,這是我們用戶輸入到程序中的名稱。這就是我們如何讓程序以名字迎接我們。

結束程序

一旦程序執行最後一行,它就會停止。此時它已終止退出,計算機忘記了所有變量,包括我們存儲在myName中的字符串。如果您再次嘗試運行程序並鍵入其他名稱,則會打印該名稱。

Hello world!

What is your name?

Alan

It is good to meet you, Alan

請記住,計算機只執行你編程的任務。在這個程序中,它被編程為詢問您的姓名,讓您鍵入一個字符串,然後打個招呼並顯示您鍵入的字符串。

但電腦很笨。該程序不關心你是否輸入你的名字,別人的名字,或只是愚蠢的東西。你可以輸入你想要的任何東西,電腦會以同樣的方式處理它:

Hello world!

What is your name?

poop

It is good to meet you, poop

總結

本章中你已經彙總了幾個Python指令來製作一個完整的程序,詢問用戶的名字,然後問候它們。

後面的所有程序都會更加複雜,但不用擔心。這些程序將全部逐行解釋。而且,您始終可以將指令輸入到交互式shell中,以便在將它們全部放入完整程序之前查看它們的操作。


分享到:


相關文章: