午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

 靜幻堂 2019-12-12
程序員書屋 2019-10-22 09:05:15

有一本學(xué)Python的書,也許你還沒有關(guān)注到,它在bookauthority的Python類目中排名第三,要?jiǎng)龠^太多太多的Python書。那就是《Python編程快速上手 讓繁瑣工作自動(dòng)化》。

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三
原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

就它本身來說,這本書不會(huì)讓你變成一個(gè)職業(yè)軟件開發(fā)者,就像幾節(jié)吉他課程不會(huì)讓你變成一名搖滾巨星。但如果你是辦公室職員、管理者、學(xué)術(shù)研究者,或使用計(jì)算機(jī)來工作或娛樂的任何人,你將學(xué)到編程的基本知識(shí),這樣就能將下面這樣一些簡單的任務(wù)自動(dòng)化:

  • 移動(dòng)并重命名幾千個(gè)文件,將它們分類,放入文件夾;
  • 填寫在線表單,不需要打字;
  • 在網(wǎng)站更新時(shí),從網(wǎng)站下載文件或復(fù)制文本;
  • 讓計(jì)算機(jī)向客戶發(fā)出短信通知;
  • 更新或格式化Excel電子表格;
  • 檢查電子郵件并發(fā)出預(yù)先寫好的回復(fù)。
原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

對人來說,這些任務(wù)簡單,但很花時(shí)間。它們通常很瑣碎、很特殊,沒有現(xiàn)成的軟件可以完成。有一點(diǎn)編程知識(shí),就可以讓計(jì)算機(jī)為你完成這些任務(wù)。

本書沒有設(shè)計(jì)成參考手冊,它是初學(xué)者指南。編碼風(fēng)格有時(shí)候違反最佳實(shí)踐(例如,有些程序使用全局變量),但這是一種折中,讓代碼更簡單,以便學(xué)習(xí)。

下面分享一下第一章節(jié),希望你的Python編程語言可以從這里開始。

Python基礎(chǔ)

Python編程語言有許多語法結(jié)構(gòu)、標(biāo)準(zhǔn)庫函數(shù)和交互式開發(fā)環(huán)境功能。好在,你可以忽略大多數(shù)內(nèi)容。你只需要學(xué)習(xí)部分內(nèi)容,就能編寫一些方便的小程序。

但在動(dòng)手之前,你必須學(xué)習(xí)一些基本編程概念。就像魔法師培訓(xùn),你可能認(rèn)為這些概念既深?yuàn)W又啰嗦,但有了一些知識(shí)和實(shí)踐,你就能像魔法師一樣指揮你的計(jì)算機(jī),完成難以置信的事情。

本章有幾個(gè)例子,我們鼓勵(lì)你在交互式環(huán)境中輸入它們。交互式環(huán)境讓你每次執(zhí)行一條Python指令,并立即顯示結(jié)果。使用交互式環(huán)境對于了解基本Python指令的行為是很好的,所以你在閱讀時(shí)要試一下。做過的事比僅僅讀過的內(nèi)容,更令人印象深刻。

1.1 在交互式環(huán)境中輸入表達(dá)式

啟動(dòng)IDLE就運(yùn)行了交互式環(huán)境,這是和Python一起安裝的。在Windows上,打開“開始”菜單,選擇“All ProgramsPython 3.3”,然后選擇“IDLE(Python GUI)”。在OS X上,選擇“ApplicationsMacPython 3.3IDLE”。在Ubuntu上,打開新的終端窗口并輸入idle3。

一個(gè)窗口會(huì)出現(xiàn),包含>>>提示符,這就是交互式環(huán)境。在提示符后輸入2 + 2,讓Python做一些簡單的算術(shù)。

>>> 2 + 2
4

IDLE窗口現(xiàn)在應(yīng)該顯示下面這樣的文本:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit
(AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 2
4
>>>

在Python中,2 + 2稱為“表達(dá)式”,它是語言中最基本的編程結(jié)構(gòu)。表達(dá)式包含“值”(例如2)和“操作符”(例如+),并且總是可以求值(也就是歸約)為單個(gè)值。這意味著在Python代碼中,所有使用表達(dá)式的地方,也可以使用一個(gè)值。

在前面的例子中,2 + 2被求值為單個(gè)值4。沒有操作符的單個(gè)值也被認(rèn)為是一個(gè)表達(dá)式,盡管它求值的結(jié)果就是它自己,像下面這樣:

>>> 2
2

錯(cuò)誤沒關(guān)系!

如果程序包含計(jì)算機(jī)不能理解的代碼,就會(huì)崩潰,這將導(dǎo)致Python顯示錯(cuò)誤信息。錯(cuò)誤信息并不會(huì)破壞你的計(jì)算機(jī),所以不要害怕犯錯(cuò)誤。“崩潰”只是意味著程序意外地停止執(zhí)行。

如果你希望對一條錯(cuò)誤信息了解更多,可以在網(wǎng)上查找這條信息的準(zhǔn)確文本,找到關(guān)于這個(gè)錯(cuò)誤的更多內(nèi)容。也可以查看http:///automatestuff/,這里有常見的Python錯(cuò)誤信息和含義的列表。

Python表達(dá)式中也可以使用大量其他操作符。例如,表 1-1 列出了Python的所有數(shù)學(xué)操作符。

表1-1 數(shù)學(xué)操作符

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

數(shù)學(xué)操作符的操作順序(也稱為“優(yōu)先級(jí)”)與數(shù)學(xué)中類似。**操作符首先求值,接下來是-*、/、//和%操作符,從左到右計(jì)算。+和-操作符最后求值,也是從左到右計(jì)算。如果需要,可以用括號(hào)來改變通常的優(yōu)先級(jí)。在交互式環(huán)境中輸入下列表達(dá)式:

>>> 2 + 3 * 6
20
>>> (2 + 3) * 6
30
>>> 48565878 * 578453
28093077826734
>>> 2 ** 8
256
>>> 23 / 7
3.2857142857142856
>>> 23 // 7
3
>>> 23 % 7
2
>>> 2 + 2
4
>>> (5 - 1) * ((7 + 1) / (3 - 1))
16.0

在每個(gè)例子中,作為程序員,你必須輸入表達(dá)式,但Python完成較難的工作,將它求值為單個(gè)值。Python將繼續(xù)求值表達(dá)式的各個(gè)部分,直到它成為單個(gè)值,如圖1-1所示。

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

圖1-1 表達(dá)式求值將它歸約為單個(gè)值

將操作符和值放在一起構(gòu)成表達(dá)式的這些規(guī)則,是 Python 編程語言的基本部分,就像幫助我們溝通的語法規(guī)則一樣。下面是例子:

This is a grammatically correct English sentence.

This grammatically is sentence not English correct a.

第二行很難解釋,因?yàn)樗环嫌⒄Z的規(guī)則。類似地,如果你輸入錯(cuò)誤的 Python指令,Python也不能理解,就會(huì)顯示出錯(cuò)誤信息,像下面這樣:

>>> 5 +
File "<stdin>", line 1
5 +
^
SyntaxError: invalid syntax
>>> 42 + 5 + * 2
File "<stdin>", line 1
42 + 5 + * 2
^
SyntaxError: invalid syntax

你總是可以在交互式環(huán)境中輸入一條指令,檢查它是否能工作。不要擔(dān)心會(huì)弄壞計(jì)算機(jī):最壞的情況就是Python顯示出錯(cuò)信息。專業(yè)的軟件開發(fā)者在編寫代碼時(shí),常常會(huì)遇到錯(cuò)誤信息。

1.2 整型、浮點(diǎn)型和字符串?dāng)?shù)據(jù)類型

記住,表達(dá)式是值和操作符的組合,它們可以通過求值成為單個(gè)值?!皵?shù)據(jù)類型”是一類值,每個(gè)值都只屬于一種數(shù)據(jù)類型。表1-2列出了Python中最常見的數(shù)據(jù)類型。例如,值-2和30屬于“整型”值。整型(或int)數(shù)據(jù)類型表明值是整數(shù)。帶有小數(shù)點(diǎn)的數(shù),如3.14,稱為“浮點(diǎn)型”(或float)。請注意,盡管42是一個(gè)整型,但42.0是一個(gè)浮點(diǎn)型。

表1-2 常見數(shù)據(jù)類型

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

Python程序也可以有文本值,稱為“字符串”,或strs(發(fā)音為“stirs”)??偸怯脝我?hào)(')包圍住字符串(例如'Hello'或'Goodbye cruel world!'),這樣Python就知道字符串的開始和結(jié)束。甚至可以有沒有字符的字符串,稱為“空字符串”。第4章更詳細(xì)地解釋了字符串。

如果你看到錯(cuò)誤信息SyntaxError: EOL while scanning string literal,可能是忘記了字符串末尾的單引號(hào),如下面的例子所示:

>>> 'Hello world!
SyntaxError: EOL while scanning string literal

1.3 字符串連接和復(fù)制

根據(jù)操作符之后的值的數(shù)據(jù)類型,操作符的含義可能會(huì)改變。例如,在操作兩個(gè)整型或浮點(diǎn)型值時(shí),+是相加操作符。但是,在用于兩個(gè)字符串時(shí),它將字符串連接起來,成為“字符串連接”操作符。在交互式環(huán)境中輸入以下內(nèi)容:

>>> 'Alice' + 'Bob'
'AliceBob'

該表達(dá)式求值為一個(gè)新字符串,包含了兩個(gè)字符串的文本。但是,如果你對一個(gè)字符串和一個(gè)整型值使用加操作符,Python就不知道如何處理,它將顯示一條錯(cuò)誤信息。

>>> 'Alice' + 42
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
'Alice' + 42
TypeError: Can't convert 'int' object to str implicitly

錯(cuò)誤信息Can't convert 'int' object to str implicitly表示Python認(rèn)為,你試圖將一個(gè)整數(shù)連接到字符串'Alice'。代碼必須顯式地將整數(shù)轉(zhuǎn)換為字符串,因?yàn)镻ython不能自動(dòng)完成轉(zhuǎn)換。(1.6節(jié)“程序剖析”在討論函數(shù)時(shí),將解釋數(shù)據(jù)類型轉(zhuǎn)換。)

在用于兩個(gè)整型或浮點(diǎn)型值時(shí),-*-操作符表示乘法。但-*-操作符用于一個(gè)字符串值和一個(gè)整型值時(shí),它變成了“字符串復(fù)制”操作符。在交互式環(huán)境中輸入一個(gè)字符串乘一個(gè)數(shù)字,看看效果。

>>> 'Alice' * 5
'AliceAliceAliceAliceAlice'

該表達(dá)式求值為一個(gè)字符串,它將原來的字符串重復(fù)若干次,次數(shù)就是整型的值。字符串復(fù)制是一個(gè)有用的技巧,但不像字符串連接那樣常用。

*操作符只能用于兩個(gè)數(shù)字(作為乘法),或一個(gè)字符串和一個(gè)整型(作為字符串復(fù)制操作符)。否則,Python將顯示錯(cuò)誤信息。

>>> 'Alice' * 'Bob'
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
'Alice' * 'Bob'
TypeError: can't multiply sequence by non-int of type 'str'
>>> 'Alice' * 5.0
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
'Alice' * 5.0
TypeError: can't multiply sequence by non-int of type 'float'

Python不理解這些表達(dá)式是有道理的:你不能把兩個(gè)單詞相乘,也很難將一個(gè)任意字符串復(fù)制小數(shù)次。

1.4 在變量中保存值

“變量”就像計(jì)算機(jī)內(nèi)存中的一個(gè)盒子,其中可以存放一個(gè)值。如果你的程序稍后將用到一個(gè)已求值的表達(dá)式的結(jié)果,就可以將它保存在一個(gè)變量中。

1.4.1 賦值語句

用“賦值語句”將值保存在變量中。賦值語句包含一個(gè)變量名、一個(gè)等號(hào)(稱為賦值操作符),以及要存儲(chǔ)的值。如果輸入賦值語句spam = 42,那么名為spam的變量將保存一個(gè)整型值42。

可以將變量看成一個(gè)帶標(biāo)簽的盒子,值放在其中,如圖1-2所示。

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

圖1-2 spam = 42 就像是告訴程序“變量spam現(xiàn)在有整數(shù)42放在里面”

例如,在交互式環(huán)境中輸入以下內(nèi)容:

? >>> spam = 40
 >>> spam
 40
 >>> eggs = 2
? >>> spam + eggs
 42
 >>> spam + eggs + spam
 82
? >>> spam = spam + 2
 >>> spam
 42

第一次存入一個(gè)值,變量就被“初始化”(或創(chuàng)建)?。此后,可以在表達(dá)式中使用它,以及其他變量和值?。如果變量被賦了一個(gè)新值,老值就被忘記了?。這就是為什么在例子結(jié)束時(shí),spam求值為42,而不是40。這稱為“覆寫”該變量。在交互式環(huán)境中輸入以下代碼,嘗試覆寫一個(gè)字符串:

>>> spam = 'Hello'
>>> spam
'Hello'
>>> spam = 'Goodbye'
>>> spam
'Goodbye'

就像圖1-3中的盒子,這個(gè)例子中的spam變量保存了'Hello',直到你用'Goodbye'替代它。

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

圖1-3 如果一個(gè)新值賦給變量,老值就被遺忘了

1.4.2 變量名

表1-3中有一些合法變量名的例子。你可以給變量取任何名字,只要它遵守以下3條規(guī)則:

1.只能是一個(gè)詞。

2.只能包含字母、數(shù)字和下劃線。

3.不能以數(shù)字開頭。

表1-3 有效和無效的變量名

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

變量名是區(qū)分大小寫的。這意味著,spam、 SPAM、Spam和sPaM是4個(gè)不同的變量。變量用小寫字母開頭是Python的慣例。

本書的變量名使用了駝峰形式,沒有用下劃線。也就是說,變量名用lookLikeThis,而不是looking_like_this。一些有經(jīng)驗(yàn)的程序員可能會(huì)指出,官方的Python代碼風(fēng)格PEP 8,即應(yīng)該使用下劃線。我喜歡駝峰式,這沒有錯(cuò),并認(rèn)為PEP 8本身“愚蠢的一致性是頭腦狹隘人士的心魔”:

“一致地滿足風(fēng)格指南是重要的。但最重要的是,知道何時(shí)要不一致,因?yàn)橛袝r(shí)候風(fēng)格指南就是不適用。如果有懷疑,請相信自己的最佳判斷。”

好的變量名描述了它包含的數(shù)據(jù)。設(shè)想你搬到一間新屋子,搬家紙箱上標(biāo)的都是“東西”。你永遠(yuǎn)找不到任何東西!本書的例子和許多Python的文檔,使用spam、eggs和bacon等變量名作為一般名稱(受到Monty Python的“Spam”短劇的影響),但在你的程序中,具有描述性的名字有助于提高代碼可讀性。

1.5 第一個(gè)程序

雖然交互式環(huán)境對于一次運(yùn)行一條 Python指令很好,但要編寫完整的Python程序,就需要在文件編輯器中輸入指令?!拔募庉嬈鳌鳖愃朴贜otepad或TextMate這樣的文本編輯器,它有一些針對輸入源代碼的特殊功能。要在IDLE中打開文件編輯器,請選擇FileNew ?File。

出現(xiàn)的窗口中應(yīng)該包含一個(gè)光標(biāo),等待你輸入,但它與交互式環(huán)境不同。在交互式環(huán)境中,按下回車,就會(huì)執(zhí)行Python指令。文件編輯器允許輸入許多指令,保存為文件,并運(yùn)行該程序。下面是區(qū)別這兩者的方法:

  • 交互式環(huán)境窗口總是有>>>提示符。
  • 文件編輯器窗口沒有>>>提示符。

現(xiàn)在是創(chuàng)建第一個(gè)程序的時(shí)候了!在文件編輯器窗口打開后,輸入以下內(nèi)容:

? # This program says hello and asks for my name.
? print('Hello world!')
 print('What is your name?') # ask for their name
? myName = input()
? print('It is good to meet you, ' + myName)
? print('The length of your name is:')
 print(len(myName))
? print('What is your age?') # ask for their age
 myAge = input()
 print('You will be ' + str(int(myAge) + 1) + ' in a year.')

在輸入完源代碼后保存它,這樣就不必在每次啟動(dòng)IDLE時(shí)重新輸入。從文件編輯器窗口頂部的菜單,選擇File?Save As。在“Save As”窗口中,在輸入框輸入hello.py,然后點(diǎn)擊“Save”。

在輸入程序時(shí),應(yīng)該過一段時(shí)間就保存你的程序。這樣,如果計(jì)算機(jī)崩潰,或者不小心退出了IDLE,也不會(huì)丟失代碼。作為快捷鍵,可以在Windows和Linux上按Ctrl-S,在OS X上按?-S,來保存文件。

在保存文件后,讓我們來運(yùn)行程序。選擇Run?Run Module,或按下F5鍵。程序?qū)⒃诮换ナ江h(huán)境窗口中運(yùn)行,該窗口是首次啟動(dòng)IDLE時(shí)出現(xiàn)的。記住,必須在文件編輯器窗口中按F5,而不是在交互式環(huán)境窗口中。在程序要求輸入時(shí),輸入你的名字。在交互式環(huán)境中,程序輸出應(yīng)該看起來像這樣:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit
(AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
Hello world!
What is your name?
Al
It is good to meet you, Al
The length of your name is:
2
What is your age?
4
You will be 5 in a year.
>>>

如果沒有更多代碼行要執(zhí)行,Python程序就會(huì)“中止”。也就是說,它停止運(yùn)行。(也可以說Python程序“退出”了。)

可以通過點(diǎn)擊窗口上部的X,關(guān)閉文件編輯器。要重新加載一個(gè)保存了的程序,就在菜單中選擇File?Open?,F(xiàn)在請這樣做,在出現(xiàn)的窗口中選擇hello.py,并點(diǎn)擊“Open”按鈕。前面保存的程序hello.py應(yīng)該在文件編輯器窗口中打開。

1.6 程序剖析

新程序在文件編輯器中打開后,讓我們快速看一看它用到的Python指令,逐一查看每行代碼。

1.6.1 注釋

下面這行稱為“注釋”。

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

Python會(huì)忽略注釋,你可以用它們來寫程序注解,或提醒自己代碼試圖完成的事。這一行中,#標(biāo)志之后的所有文本都是注釋。

有時(shí)候,程序員在測試代碼時(shí),會(huì)在一行代碼前面加上#,臨時(shí)刪除它。這稱為“注釋掉”代碼。在你想搞清楚為什么程序不工作時(shí),這樣做可能有用。稍后,如果你準(zhǔn)備還原這一行代碼,可以去掉#。

Python也會(huì)忽略注釋之后的空行。在程序中,想加入空行時(shí)就可以加入。這會(huì)讓你的代碼更容易閱讀,就像書中的段落一樣。

1.6.2 print()函數(shù)

print()函數(shù)將括號(hào)內(nèi)的字符串顯示在屏幕上。

? print('Hello world!')
 print('What is your name?') # ask for their name

代碼行print('Hello world!')表示“打印出字符串'Hello world!'的文本”。Python執(zhí)行到這行時(shí),你告訴Python調(diào)用print()函數(shù),并將字符串“傳遞”給函數(shù)。傳遞給函數(shù)的值稱為“參數(shù)”。請注意,引號(hào)沒有打印在屏幕上。它們只是表示字符串的起止,不是字符串的一部分。

也可以用這個(gè)函數(shù)在屏幕上打印出空行,只要調(diào)用print()就可以了,括號(hào)內(nèi)沒有任何東西。

在寫函數(shù)名時(shí),末尾的左右括號(hào)表明它是一個(gè)函數(shù)的名字。這就是為什么在本書中你會(huì)看到print(),而不是print。第2章更詳細(xì)地探討了函數(shù)。

1.6.3 input()函數(shù)

函數(shù)等待用戶在鍵盤上輸入一些文本,并按下回車鍵。

? myName = input()

這個(gè)函數(shù)求值為一個(gè)字符串,即用戶輸入的文本。前面的代碼行將這個(gè)字符串賦給變量myName。

你可以認(rèn)為input()函數(shù)調(diào)用是一個(gè)表達(dá)式,它求值為用戶輸入的任何字符串。如果用戶輸入'Al',那么該表達(dá)式就求值為myName = 'Al'。

1.6.4 打印用戶的名字

接下來的print()調(diào)用,在括號(hào)間包含表達(dá)式'It is good to meet you, ' + myName。

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

要記住,表達(dá)式總是可以求值為一個(gè)值。如果'Al'是上一行代碼保存在myName中的值,那么這個(gè)表達(dá)式就求值為'It is good to meet you, Al'。這個(gè)字符串傳給print(),它將輸出到屏幕上。

1.6.5 len()函數(shù)

你可以向len()函數(shù)傳遞一個(gè)字符串(或包含字符串的變量),然后該函數(shù)求值為一個(gè)整型值,即字符串中字符的個(gè)數(shù)。

? print('The length of your name is:')
 print(len(myName))

在交互式環(huán)境中輸入以下內(nèi)容試一試:

>>> len('hello')
5
>>> len('My very energetic monster just scarfed nachos.')
46
>>> len('')
0

就像這些例子,len(myName)求值為一個(gè)整數(shù)。然后它被傳遞給print(),在屏幕上顯示。請注意,print()允許傳入一個(gè)整型值或字符串。但如果在交互式環(huán)境中輸入以下內(nèi)容,就會(huì)報(bào)錯(cuò):

 >>> print('I am ' + 29 + ' years old.')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print('I am ' + 29 + ' years old.')
TypeError: Can't convert 'int' object to str implicitly

導(dǎo)致錯(cuò)誤的原因不是print()函數(shù),而是你試圖傳遞給print()的表達(dá)式。如果在交互式環(huán)境中單獨(dú)輸入這個(gè)表達(dá)式,也會(huì)得到同樣的錯(cuò)誤。

>>> 'I am ' + 29 + ' years old.'
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
'I am ' + 29 + ' years old.'
TypeError: Can't convert 'int' object to str implicitly

報(bào)錯(cuò)是因?yàn)?,只能?操作符加兩個(gè)整數(shù),或連接兩個(gè)字符串。不能讓一個(gè)整數(shù)和一個(gè)字符串相加,因?yàn)檫@不符合Python的語法。可以使用字符串版本的整數(shù),修復(fù)這個(gè)錯(cuò)誤。這在下一節(jié)中解釋。

1.6.6 str()、int()和float()函數(shù)

如果想要連接一個(gè)整數(shù)(如29)和一個(gè)字符串,再傳遞給print(),就需要獲得值'29'。它是29的字符串形式。str()函數(shù)可以傳入一個(gè)整型值,并求值為它的字符串形式,像下面這樣:

>>> str(29)
'29'
>>> print('I am ' + str(29) + ' years old.')
I am 29 years old.

因?yàn)閟tr(29)求值為’29’,所以表達(dá)式'I am ' + str(29) + ' years old.'求值為'I am ' + '29' + ' years old.',它又求值為'I am 29 years old.'。這就是傳遞給print()函數(shù)的值。

str()、int()和float()函數(shù)將分別求值為傳入值的字符串、整數(shù)和浮點(diǎn)數(shù)形式。請嘗試用這些函數(shù)在交互式環(huán)境中轉(zhuǎn)換一些值,看看會(huì)發(fā)生什么。

>>> str(0)
'0'
>>> str(-3.14)
'-3.14'
>>> int('42')
42
>>> int('-99')
-99
>>> int(1.25)
1
>>> int(1.99)
1
>>> float('3.14')
3.14
>>> float(10)
10.0

前面的例子調(diào)用了str()、int()和float()函數(shù),向它們傳入其他數(shù)據(jù)類型的值,得到了字符串、整型或浮點(diǎn)型的值。

如果想要將一個(gè)整數(shù)或浮點(diǎn)數(shù)與一個(gè)字符串連接,str()函數(shù)就很方便。如果你有一些字符串值,希望將它們用于數(shù)學(xué)運(yùn)算,int()函數(shù)也很有用。例如,input()函數(shù)總是返回一個(gè)字符串,即便用戶輸入的是一個(gè)數(shù)字。在交互式環(huán)境中輸入spam = input(),在它等待文本時(shí)輸入101。

>>> spam = input()
101
>>> spam
'101'

保存在spam中的值不是整數(shù)101,而是字符串'101'。如果想要用spam中的值進(jìn)行數(shù)學(xué)運(yùn)算,那就用int()函數(shù)取得spam的整數(shù)形式,然后將這個(gè)新值存在spam中。

>>> spam = int(spam)
>>> spam
101

現(xiàn)在你應(yīng)該能將spam變量作為整數(shù),而不是字符串使用。

>>> spam * 10 / 5
202.0

請注意,如果你將一個(gè)不能求值為整數(shù)的值傳遞給int(),Python將顯示出錯(cuò)信息。

>>> int('99.99')
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
int('99.99')
ValueError: invalid literal for int() with base 10: '99.99'
>>> int('twelve')
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
int('twelve')
ValueError: invalid literal for int() with base 10: 'twelve'

如果需要對浮點(diǎn)數(shù)進(jìn)行取整運(yùn)算,也可以用int()函數(shù)。

>>> int(7.7)
7
>>> int(7.7) + 1
8

在你的程序中,最后3行使用了函數(shù)int()和str(),取得適當(dāng)數(shù)據(jù)類型的值。

? print('What is your age?') # ask for their age
 myAge = input()
 print('You will be ' + str(int(myAge) + 1) + ' in a year.')

myAge變量包含了input()函數(shù)返回的值。因?yàn)閕nput()函數(shù)總是返回一個(gè)字符串(即使用戶輸入的是數(shù)字),所以你可以使用int(myAge)返回字符串的整型值。這個(gè)整型值隨后在表達(dá)式int(myAge) + 1中與1相加。

相加的結(jié)果傳遞給str()函數(shù):str(int(myAge) + 1)。然后,返回的字符串與字符串'You will be '和' in a year.'連接,求值為一個(gè)更長的字符串。這個(gè)更長的字符串最終傳遞給print(),在屏幕上顯示。

假定用戶輸入字符串'4',保存在myAge中。字符串'4'被轉(zhuǎn)換為一個(gè)整型,所以你可以對它加1。結(jié)果是5。str()函數(shù)將這個(gè)結(jié)果轉(zhuǎn)化為字符串,這樣你就可以將它與第二個(gè)字符串'in a year.'連接,創(chuàng)建最終的消息。這些求值步驟如圖1-4所示。

文本和數(shù)字相等判斷

雖然數(shù)字的字符串值被認(rèn)為與整型值和浮點(diǎn)型值完全不同,但整型值可以與浮點(diǎn)值相等。

>>> 42 == '42'
False
>>> 42 == 42.0
True
>>> 42.0 == 0042.000
True

Python進(jìn)行這種區(qū)分,因?yàn)樽址俏谋荆椭岛透↑c(diǎn)型都是數(shù)字。

原來學(xué)Python最好的書是這一本?它在bookauthority里排名第三

圖1-4 如果4保存在myAge中,求值的步驟

1.7 小結(jié)

你可以用一個(gè)計(jì)算器來計(jì)算表達(dá)式,或在文本處理器中輸入字符串連接。甚至可以通過復(fù)制粘貼文本,很容易地實(shí)現(xiàn)字符串復(fù)制。但是表達(dá)式以及組成它們的值(操作符、變量和函數(shù)調(diào)用),才是構(gòu)成程序的基本構(gòu)建塊。一旦你知道如何處理這些元素,就能夠用Python操作大量的數(shù)據(jù)。

最好是記住本章中介紹的不同類型的操作符(+、-、-*-、/、//、%和-**-是數(shù)學(xué)操作符,+和-*-是字符串操作符),以及3種數(shù)據(jù)類型(整型、浮點(diǎn)型和字符串)。

我們還介紹了幾個(gè)不同的函數(shù)。print()和input()函數(shù)處理簡單的文本輸出(到屏幕)和輸入(通過鍵盤)。len()函數(shù)接受一個(gè)字符串,并求值為該字符串中字符的數(shù)目。

在下一章中,你將學(xué)習(xí)如何告訴Python根據(jù)它擁有的值,明智地決定什么代碼要運(yùn)行,什么代碼要跳過,什么代碼要重復(fù)。這稱為“控制流”,它讓你編寫程序來做出明智的決定。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多