Python程序設(shè)計(jì)基礎(chǔ)第二章 基礎(chǔ)語法概述_第1頁
Python程序設(shè)計(jì)基礎(chǔ)第二章 基礎(chǔ)語法概述_第2頁
Python程序設(shè)計(jì)基礎(chǔ)第二章 基礎(chǔ)語法概述_第3頁
Python程序設(shè)計(jì)基礎(chǔ)第二章 基礎(chǔ)語法概述_第4頁
Python程序設(shè)計(jì)基礎(chǔ)第二章 基礎(chǔ)語法概述_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

匯報(bào)人:WPSPython程序設(shè)計(jì)基礎(chǔ)第二章基礎(chǔ)語法概述目錄01Python語法規(guī)范02變量和數(shù)據(jù)類型03常見運(yùn)算符04輸入與輸出目錄05Python生態(tài)系統(tǒng)之math庫06小試牛刀07拓展實(shí)踐:模擬自動售貨機(jī)找零.

養(yǎng)成良好的編程習(xí)慣。.深入理解變量的概念。.掌握Python常用的數(shù)據(jù)類型。.掌握Python常用的運(yùn)算符。.掌握print()與input()函數(shù)的使用方法。.掌握math庫的使用方法。學(xué)習(xí)目標(biāo)PART12.1Python語法規(guī)范2.1.1大小寫Python

區(qū)分代碼的大小寫,這被稱為大小寫敏感。例如,在代碼

2.1

中,如果將小海龜庫中的

turtle.Turtle()類寫成了全小寫,則代碼運(yùn)行時就會報(bào)錯。2.1.1大小寫區(qū)分代碼大小寫的程序語言有很多,因此有一個良好的書寫代碼習(xí)慣很重要。在為程序中各種

要素命名時,一定要有一個統(tǒng)一的規(guī)范。例如,一般面向?qū)ο笾蓄惖拿Q都是首字母大寫;如果名

稱使用多個單詞,則單詞之間可以使用下畫線連接等。當(dāng)然這些習(xí)慣不是強(qiáng)制的,而且不同的程序

語言往往有不同的風(fēng)格。但一定要有一個良好的編程習(xí)慣,并且要在一開始就注意養(yǎng)成。2.1.2縮進(jìn)在C、C++、Java、C#等很多程序語言中,代碼塊使用{}括起來。但Python省去了花括號,直接強(qiáng)制使用縮進(jìn)來表示代碼塊,如代碼2.2中for語句后面的3行代碼都有4個空格的縮進(jìn),這3行代碼就構(gòu)成了一個代碼塊,隸屬于for語句。for語句每循環(huán)一次都要執(zhí)行這3行代碼。2.1.2縮進(jìn)代碼

2.3

有無縮進(jìn)效果大不同importturtlet=turtle.Turtle()t.speed(0)

#速度設(shè)為最快colors=

["red","yellow","green"]

#這是一個顏色盒forxin

range(20,100):#循環(huán)t.pencolor(colors[x%3])

#在

3個顏色中挑一個t.circle(x)

#以

x

為半徑畫個圓t.left(10)

#左轉(zhuǎn)

10°

,這行不屬于

for循環(huán)t.getscreen().exitonclick()2.1.2縮進(jìn)在Python中,每一層的縮進(jìn)為4個空格,但一般情況下并不需要程序員手動輸入。第1章介紹的眾多集成開發(fā)環(huán)境都有自動添加縮進(jìn)的功能。例如,在代碼2.3中,輸入for語句所在行最后的冒號并按Enter鍵后,集成開發(fā)環(huán)境會自動添加縮進(jìn)。如果沒有出現(xiàn)縮進(jìn),一般是因?yàn)閒or語句行最后的英文冒號寫成了中文的冒號。Python語言用到的所有特殊字符,如冒號、點(diǎn)、逗號、括號、引號等,都是英文半角格式下的。2.1.3注釋前面出現(xiàn)的很多代碼例子中都有以“#”開頭的文字內(nèi)容,這些就是代碼的注釋。注釋用于幫助用戶理解代碼,它們不屬于代碼,不會被執(zhí)行。好的代碼大都有注釋,注釋能顯著提高對代碼的理解。除添加注釋外,好的代碼還要求有自解釋性,也就是代碼本身具有很好的描述性,其各要素的命名都很直觀。2.1.4留白代碼一般要適當(dāng)?shù)牧舭?,包括空格、空行等。前面的代碼例子為了節(jié)約篇幅,行與行之間沒有留白。但真正在計(jì)算機(jī)中書寫代碼時,一般要適當(dāng)留白。例如,代碼2.2添加留白后變?yōu)榇a2.4??梢钥吹皆趇mport語句后有空行,在for語句循環(huán)結(jié)構(gòu)和窗體退出的代碼之間也有空行。這些空行不是必需的,但它們可以將整個代碼分成幾個“段落”,每個段落都有自己的主題,

讓程序也有起承轉(zhuǎn)合。其實(shí)不僅行與行之間要留白,同一行的字符之間也可以留白。仔細(xì)觀察代

碼2.4,在“=”的兩側(cè)、“%”的兩側(cè)等位置都添加了空格。這些空格使程序看上去更舒展、通

透、美觀。2.1.5換行如果有一行代碼特別長,屏幕顯示不下怎么辦?有人認(rèn)為這不是問題,只需換行即可。但這個

問題并沒有看上去那么簡單。程序是由多行代碼構(gòu)成的?,F(xiàn)在將一行長長的代碼分成了兩行來寫,Python解釋器如何知道程

序中的兩行代碼原本就是兩行獨(dú)立的代碼,還是某一行長代碼被分成了兩行呢?因此必須使用一種

方式讓

Python解釋器可以區(qū)分這兩種情形。在很多程序語言中,一行代碼最后要加一個特殊記號來表示本行代碼結(jié)束。例如,C系列的語

言會在一行代碼尾部加一個分號。如果沒有看到分號,就意味著本行代碼沒有結(jié)束,屏幕上的下一行應(yīng)該還是同一行代碼。這樣就解決這個問題了,但其弊端是每寫一行代碼都得在尾部加一個分號,

包括那些很短的行,如果遺忘還會造成誤會。2.1.5換行Python

沒有采用這個方案,因此平時書寫代碼時不用在尾部加記號。當(dāng)偶爾遇到超長代碼行需

要分成多行書寫時,只需在行尾添加斜杠“\”即可。下面看代碼2.5,這個例子嘗試使用小海龜模

擬縱向書寫的效果,輸出梁啟超的名篇《少年中國說》的一段文字。這段文字以字符串的形式出現(xiàn)

在代碼中,雖然只是原文中的一段,但對于代碼行來說,還是過長,一行無法寫完??梢钥吹?,在

代碼中這段文字每次換行時行尾都有一個“\”,因此這幾行其實(shí)是一行代碼。代碼2.5縱向輸出《少年中國說》一段文字(代碼段見書27頁)PART22.2變量和數(shù)據(jù)類型2.2變量和數(shù)據(jù)類型變量是非常基礎(chǔ)的語言要素,深入理解變量的概念對于編程初學(xué)者的重要性是怎么言之都不為

過的。正是因?yàn)樽兞渴只A(chǔ),所以前面的很多代碼例子中已經(jīng)不可避免地用到了變量。例如,代

2.5

中的小海龜

t,還有保存《少年中國說》文字內(nèi)容的

content

等,都是變量。下面來正式認(rèn)識

一下變量。2.2.1變量編程與烹飪有相似之處。烹飪的過程將原料加工成菜肴,在這個過程中,原料是輸入,最后的

菜肴是輸出。加工過程中需要各種類型的器皿容納食材。程序也需要輸入數(shù)據(jù),運(yùn)行過程中會將輸

入數(shù)據(jù)加工成需要的樣子后輸出。例如,將輸入的原始圖片數(shù)據(jù)加工成用戶喜歡的樣子輸出。在這

個加工過程中,程序也需要各種容器來容納數(shù)據(jù),這些容器就是變量。程序中的變量有不同的類型,稱為數(shù)據(jù)類型。好比廚房容器分為鍋、碗、瓢、盆等不同的種類,

不同類型的容器適合容納不同類型的數(shù)據(jù)。與廚房容器不同的是,程序中的變量要有明確的名稱,

稱為標(biāo)識符,只有這樣才能方便地在程序中使用它們。例如,前面代碼中根據(jù)

Turlte

類生成一個具

體的小海龜對象并保存在

t這個變量中,如果沒有

t這個名稱,就無法方便地指揮這個小海龜。同樣

地,《少年中國說》中的那段文字保存在

content

變量中,如果沒有

content

這個名稱,程序又該怎

樣訪問這段文字內(nèi)容呢?因此程序中的變量都要有名稱,一般由英文大小寫字母、數(shù)字、下畫線等常用字符構(gòu)成,但不能以數(shù)字開頭。而且因?yàn)?/p>

Python是大小寫敏感的語言,所以標(biāo)識符是區(qū)分大小

寫的。另外,變量名通常也不能使用

Python語言固有的一些標(biāo)識符,因?yàn)樗鼈円呀?jīng)有了其他特殊含

義了。例如,不能將一個變量命名為

for,類似

for這樣的一些

Python語言固有的標(biāo)識符被稱為Python

語言的關(guān)鍵字(keyword)。2.2.1變量在

Python

中,變量要先定義,再使用。所謂定義其實(shí)是在計(jì)算機(jī)內(nèi)存中開辟一塊空間,并將這

塊空間初始化,然后給這塊空間起個名稱(標(biāo)識符),以后要訪問這塊內(nèi)存空間中的數(shù)據(jù)時只需通

過標(biāo)識符即可,不用操心內(nèi)存空間的二進(jìn)制地址。這也是高級程序語言“高級”的地方之一,遠(yuǎn)離

機(jī)器世界,努力靠近人類世界。具體來說,在

Python

中定義變量是通過賦值語句來完成的。例如,

t=turtle.Turtle(),又或者

author="梁啟超少年中國說"。這里的等號“=”不是數(shù)學(xué)意義上的相等,

而是表示賦值,是將等號右側(cè)的數(shù)據(jù)賦值給等號左側(cè)的變量(Python

使用“==”表示相等)。在賦

值的過程中,變量就被定義好了,程序即可使用這個標(biāo)識符來訪問該變量,或者說訪問該變量所指

代的內(nèi)存空間。2.2.1變量再來看一個使用變量的例子。在代碼

2.6

中,通過賦值語句定義了一個

age

變量,其初始值為

18。之后使用print()函數(shù)輸出

age變量的值,然后再一次為變量

age賦值。第二次為

age賦值時,由

age變量已經(jīng)存在,無須定義,直接修改其值即可。注意,

第二個賦值語句中寫在等號右側(cè)的

age

和等號左側(cè)的

age是對

age變量不同的操作。等號右側(cè)的

age是對變量

age

的讀取操作,讀取得到的

值加

1后再寫入

age

變量。如果將上述代碼的第一行變?yōu)樽⑨?,則運(yùn)行就會出錯。錯誤信息為“NameError:name‘a(chǎn)ge’isnot

defined”,意思是變量

age沒有定義。這是由于在

age沒有定義的情況下,print()函數(shù)卻要輸出

age

變量的值,從而引起變量未定義的錯誤。因此在使用一個變量前一定要確保其有定義。2.2.2數(shù)據(jù)類型變量保存的數(shù)據(jù)有不同類型之分,因此變量也有相應(yīng)的類型。例如,保存整數(shù)的整型變量、

保存小數(shù)的浮點(diǎn)型變量,以及復(fù)數(shù)類型、字符串等。每一種數(shù)據(jù)類型都有一些共同的特征及針

對這種類型的一系列操作。在某些程序語言中,定義變量時必須明確說明變量的類型,而且這

個變量一經(jīng)確定就不能保存其他類型的數(shù)據(jù),如聲明為整型的變量不能用來保存字符串。但

Python語言不是這樣的。Python對數(shù)據(jù)類型的處理比較靈活,定義變量時無須聲明變量的類型,

Python會自動判斷。在

Python程序中,同一個變量上一刻保存的是整數(shù),下一秒換成字符串也

是沒問題的。雖然

Python變量的數(shù)據(jù)類型比較靈活,但并不意味著數(shù)據(jù)類型對于

Python不重要。了解常見數(shù)

據(jù)類型的特點(diǎn)及相應(yīng)操作仍然是一個重要而基礎(chǔ)的工作。本章主要介紹整型、浮點(diǎn)型、復(fù)數(shù)類型、

邏輯類型等基本類型,關(guān)于字符串等類型會在后續(xù)章節(jié)逐漸進(jìn)行介紹。2.2.2數(shù)據(jù)類型1.整型顧名思義,整型變量中保存的是整數(shù)。整數(shù)可以進(jìn)行各種常見的數(shù)學(xué)運(yùn)算,下面的代碼2.7以

等差數(shù)列為例做了簡單的演示。在這段代碼中有幾個注意點(diǎn):①可以使用Python內(nèi)置函數(shù)type()查看變量類型;②整型變量的加法、減法、乘法運(yùn)算結(jié)果仍為整型,但除法運(yùn)算不是。在Python3.x版本中,兩個整數(shù)的除法結(jié)果為小數(shù),無論是否整除2.2.2數(shù)據(jù)類型2.浮點(diǎn)型浮點(diǎn)型變量中保存的是小數(shù)。小數(shù)可以使用十進(jìn)制的方式直接寫出來,如3.14;也可以采用科

學(xué)記數(shù)法來表達(dá),如

5.23e3表示

5230.0。這里的

e大小寫均可,表示

10

的冪,指數(shù)由e后的數(shù)值決

定。指數(shù)可以是負(fù)的,如

6.02e-2表示

0.0602。整數(shù)與小數(shù)在計(jì)算機(jī)中的處理方法是不一樣的。因此14

與14.0

雖然數(shù)值大小一樣,但一個為

整數(shù),另一個為浮點(diǎn)數(shù),不能混為一談。另外,整數(shù)運(yùn)算是精確的,而浮點(diǎn)數(shù)運(yùn)算是有誤差的。這

是因?yàn)槌绦蛑斜磉_(dá)的十進(jìn)制小數(shù)其實(shí)在計(jì)算機(jī)內(nèi)是要轉(zhuǎn)換為二進(jìn)制小數(shù)的。但很多十進(jìn)制小數(shù)無法

精確地用二進(jìn)制小數(shù)來表達(dá),這有點(diǎn)類似很多分?jǐn)?shù)無法用小數(shù)精確表達(dá)。例如,1/3是一個精確值,

但轉(zhuǎn)換為小數(shù)是一個無限小數(shù)。如果只能寫到小數(shù)點(diǎn)后若干位的話,則得到的小數(shù)就是1/3的近似

值,是有誤差的。同樣地,一些十進(jìn)制小數(shù)在轉(zhuǎn)換為二進(jìn)制小數(shù)時,轉(zhuǎn)換過程永遠(yuǎn)沒有盡頭,計(jì)算

機(jī)不可能無限地進(jìn)行這個轉(zhuǎn)換,一定要在某個位置截?cái)啵罱K得到的二進(jìn)制小數(shù)就是原十進(jìn)制小數(shù)

的一個近似值。下面的代碼2.8

演示了浮點(diǎn)數(shù)運(yùn)算有誤差的事實(shí)。當(dāng)然這個誤差非常得小,如果不是進(jìn)行某些

高精度的運(yùn)算,一般可以忽略。

2.2.2數(shù)據(jù)類型2.浮點(diǎn)型浮點(diǎn)型變量中保存的是小數(shù)。小數(shù)可以使用十進(jìn)制的方式直接寫出來,如3.14;也可以采用科

學(xué)記數(shù)法來表達(dá),如

5.23e3表示

5230.0。這里的

e大小寫均可,表示

10

的冪,指數(shù)由e后的數(shù)值決

定。指數(shù)可以是負(fù)的,如

6.02e-2表示

0.0602。

整數(shù)與小數(shù)在計(jì)算機(jī)中的處理方法是不一樣的。因此14

與14.0

雖然數(shù)值大小一樣,但一個為

整數(shù),另一個為浮點(diǎn)數(shù),不能混為一談。另外,整數(shù)運(yùn)算是精確的,而浮點(diǎn)數(shù)運(yùn)算是有誤差的。這

是因?yàn)槌绦蛑斜磉_(dá)的十進(jìn)制小數(shù)其實(shí)在計(jì)算機(jī)內(nèi)是要轉(zhuǎn)換為二進(jìn)制小數(shù)的。但很多十進(jìn)制小數(shù)無法

精確地用二進(jìn)制小數(shù)來表達(dá),這有點(diǎn)類似很多分?jǐn)?shù)無法用小數(shù)精確表達(dá)。2.2.2數(shù)據(jù)類型2.浮點(diǎn)型例如,1/3是一個精確值,

但轉(zhuǎn)換為小數(shù)是一個無限小數(shù)。如果只能寫到小數(shù)點(diǎn)后若干位的話,則得到的小數(shù)就是1/3的近似

值,是有誤差的。同樣地,一些十進(jìn)制小數(shù)在轉(zhuǎn)換為二進(jìn)制小數(shù)時,轉(zhuǎn)換過程永遠(yuǎn)沒有盡頭,計(jì)算

機(jī)不可能無限地進(jìn)行這個轉(zhuǎn)換,一定要在某個位置截?cái)啵罱K得到的二進(jìn)制小數(shù)就是原十進(jìn)制小數(shù)

的一個近似值。下面的代碼2.8

演示了浮點(diǎn)數(shù)運(yùn)算有誤差的事實(shí)。當(dāng)然這個誤差非常得小,如果不是進(jìn)行某些

高精度的運(yùn)算,一般可以忽略。

2.2.2數(shù)據(jù)類型3.復(fù)數(shù)類型這里的復(fù)數(shù)即中學(xué)數(shù)學(xué)中的復(fù)數(shù),有實(shí)部與虛部,只不過將虛部單位

i

改寫成字母

j。代碼

2.9

中首先定義了一個復(fù)數(shù)型變量

a,然后使用

type()函數(shù)確認(rèn)其數(shù)據(jù)類型,再輸出復(fù)數(shù)

a

的實(shí)部和虛部,

最后輸出

a

的值。

2.2.2數(shù)據(jù)類型3.復(fù)數(shù)類型這里的復(fù)數(shù)即中學(xué)數(shù)學(xué)中的復(fù)數(shù),有實(shí)部與虛部,只不過將虛部單位

i

改寫成字母

j。代碼

2.9

中首先定義了一個復(fù)數(shù)型變量

a,然后使用

type()函數(shù)確認(rèn)其數(shù)據(jù)類型,再輸出復(fù)數(shù)

a

的實(shí)部和虛部,

最后輸出

a

的值??梢钥吹阶兞?/p>

a

的類型是complex,即復(fù)數(shù)類型。而輸出其實(shí)部與虛部的代碼又一次見到了面向

對象中的“點(diǎn)”形式,這說明一個簡單的復(fù)數(shù)也是一個對象,所有的復(fù)數(shù)構(gòu)成一個復(fù)數(shù)類,它們擁

有一些共同的特征屬性,如都有實(shí)部與虛部。另外需要注意的是,復(fù)數(shù)的實(shí)部、虛部是實(shí)數(shù),不限

于整數(shù),因此輸出的實(shí)部、虛部是浮點(diǎn)型。

2.2.3類型轉(zhuǎn)換不同類型的數(shù)據(jù)之間是可以根據(jù)需要進(jìn)行轉(zhuǎn)換的,如代碼

2.7

中等差數(shù)列需要將求出的

a_5

浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù),這可以使用

Python

內(nèi)置的

int()函數(shù)來完成,如代碼

2.10

中的粗體代碼所示。PART32.3常見運(yùn)算符2.3.1算術(shù)運(yùn)算符2.3.1算術(shù)運(yùn)算符算術(shù)運(yùn)算符可以完成基本的數(shù)學(xué)運(yùn)算,如加、減、乘、除等。表

2.1列出了幾種

Python常用的

算術(shù)運(yùn)算符。運(yùn)算符+加法

減法*乘法/除法//整除:返回商的整數(shù)部分。15

//2的結(jié)果是

7%模運(yùn)算:返回商的余數(shù)。

15%2的結(jié)果是1**乘方:2**3結(jié)果是

8

,4**0.5結(jié)果是

2.0說明2.3.1算術(shù)運(yùn)算符2.3.1算術(shù)運(yùn)算符模運(yùn)算有一些非常典型的應(yīng)用。例如,判斷一個整數(shù)是不是偶數(shù),可以很容易用%

運(yùn)算來實(shí)

現(xiàn)。又如,假設(shè)程序接到的輸入是從負(fù)無窮到正無窮區(qū)間的任一整數(shù),但程序需要將輸入的整數(shù)變

為[0,2]區(qū)間的一個整數(shù)。這時模運(yùn)算就派上用場了,只需讓輸入的整數(shù)%3

即可。還記得第

1章繪制

彩色螺旋的例子嗎?再來看一遍這個例子的代碼,注意其中的粗體顯示部分。代碼2.12繪制彩色螺旋(代碼1.8重現(xiàn))importturtlet=turtle.Turtle()t.speed(0)

#速度設(shè)為最快colors=

["red","yellow","green"]

#這是一個顏色盒forxin

range(20,100):#循環(huán)t.pencolor(colors[x%3])

#在

3個顏色中挑一個t.circle(x)

#以

x

為半徑畫個圓t.left(10)

#左轉(zhuǎn)

10°t.getscreen().exitonclick()2.3.1算術(shù)運(yùn)算符2.3.1算術(shù)運(yùn)算符在繪制彩色螺旋的代碼中,for

循環(huán)中的變量

x

即為半徑,取值位于[20,100)區(qū)間。如何根據(jù)

x

的值在顏色盒中挑選顏色呢?因?yàn)轭伾?/p>

colors

中只有

3種顏色,其編號依次為

0、1、2,即

colors[0]

代表

red,colors[2]代表

green。問題就變?yōu)槿绾螌⒁粋€[20,100)區(qū)間的整數(shù)映射到[0,2]區(qū)間,此時即

可進(jìn)行

x%3運(yùn)算,這樣無論

x

的值是多少,除以

3取余后結(jié)果一定是

0、1、2

中的一個。模運(yùn)算和整除組合起來可以提取整數(shù)的某一位。例如,對于整數(shù)

5673,如何將個位

3單獨(dú)提出呢?如何抹掉個位

3變?yōu)?/p>

5670

呢?這些都可以用//和%的組合來實(shí)現(xiàn)。代碼

2.13演示了對于一

個兩位數(shù)如何提取個位數(shù)與十位數(shù),提取更多位數(shù)的整數(shù)的某一位的道理是一樣的。2.3.1算術(shù)運(yùn)算符代碼

2.13

取余、整除運(yùn)算的應(yīng)用num

=

73print("兩位數(shù)的個位:",num%

10)print("兩位數(shù)的十位:",num//

10)2.3.2賦值運(yùn)算符在中學(xué)數(shù)學(xué)中,等號“=”的含義是判斷等號兩邊的數(shù)是否相等。但在

Python語言中,等號“=”

的含義是賦值運(yùn)算,表示一個動作,將等號右側(cè)的數(shù)據(jù)賦值給左側(cè)的變量。在很多程序語言中判斷

是否相等時使用兩個等號“==”,Python語言也不例外。Python

中的賦值運(yùn)算有很多比較靈活的寫法,代碼

2.14演示了幾種常見的形式。2.3.3復(fù)合運(yùn)算符復(fù)合運(yùn)算符是將某種算術(shù)運(yùn)算符和賦值運(yùn)算符結(jié)合起來,形成一種簡潔的寫法。一些常用的復(fù)

合運(yùn)算符如表

2.2所示。運(yùn)算符說明+=a+=

1等效于

a=a+

1-=a-=2

等效于a

=

a

-

2*=a*=3等效于

a=a*3/=a

/=4等效于

a

=a

/

42.3.4比較運(yùn)算符復(fù)合運(yùn)算符是將某種算術(shù)運(yùn)算符和賦值運(yùn)算符結(jié)合起來,形成一種簡潔的寫法。一些常用的復(fù)

合運(yùn)算符如表

2.2所示。運(yùn)算符==5==5的結(jié)果為

True;5==6的結(jié)果為False!=5

!=6的結(jié)果為

True;5

!=5

的結(jié)果為False>5>4的結(jié)果為

True;5>6的結(jié)果為False>=5>=5的結(jié)果為

True;5>=6的結(jié)果為False<5<6的結(jié)果為

True;5<4的結(jié)果為False<=5<=5的結(jié)果為

True;5<=4的結(jié)果為False2.3.5邏輯運(yùn)算符邏輯運(yùn)算包括與、或、非,專門針對邏輯類型的變量進(jìn)行運(yùn)算,對應(yīng)的3種運(yùn)算符如表2.4

所示。運(yùn)算符說明and與運(yùn)算:如果

x為

False,則

x

andy

返回

False,否則返回

y的值or或運(yùn)算:如果

x為

True,則

x

or

y

返回

True,否則返回

y的值not非運(yùn)算:如果

x為

True,則

not

x

返回False2.3.5邏輯運(yùn)算符其中,and與

or為二元運(yùn)算符,not是一元運(yùn)算符,直接對邏輯值取反。對于

and運(yùn)算符,只有當(dāng)兩個邏輯值都為

True時結(jié)果才為

True。實(shí)際上對于表達(dá)式xandy,如

果第一個操作數(shù)

x是

False,則無須關(guān)心

y

的值是真還是假,結(jié)果均為

False。如果

x

的值是

True

,

y

的值即為結(jié)果的值。這樣的思維方法體現(xiàn)了計(jì)算思維中的分解思想,從而無須比對

x與

y

的各

種真假組合情況。對于

or

運(yùn)算符,只要參與運(yùn)算的兩個邏輯值中有一個為

True,結(jié)果即為

True。前面介紹的比較運(yùn)算的結(jié)果均為邏輯值,因此比較運(yùn)算經(jīng)常和邏輯運(yùn)算組合起來形成更復(fù)雜的

表達(dá)式,如代碼

2.15所示。2.3.5邏輯運(yùn)算符其中,and與

or為二元運(yùn)算符,not是一元運(yùn)算符,直接對邏輯值取反。對于

and運(yùn)算符,只有當(dāng)兩個邏輯值都為

True時結(jié)果才為

True。實(shí)際上對于表達(dá)式xandy,如

果第一個操作數(shù)

x是

False,則無須關(guān)心

y

的值是真還是假,結(jié)果均為

False。如果

x

的值是

True

,

y

的值即為結(jié)果的值。這樣的思維方法體現(xiàn)了計(jì)算思維中的分解思想,從而無須比對

x與

y

的各

種真假組合情況。對于

or

運(yùn)算符,只要參與運(yùn)算的兩個邏輯值中有一個為

True,結(jié)果即為

True。前面介紹的比較運(yùn)算的結(jié)果均為邏輯值,因此比較運(yùn)算經(jīng)常和邏輯運(yùn)算組合起來形成更復(fù)雜的

表達(dá)式,如代碼

2.15所示。2.3.6成員運(yùn)算符成員運(yùn)算符用來判斷一個成員(元素)是否在一個集體(序列)中。常用的成員運(yùn)算符有

in和

notin,如表

2.5所示。運(yùn)算符in如果元素在指定的序列中,則返回

True,否則返回

Falsenotin如果元素不在指定的序列中,則返回

True,否則返回

False說明表

2.5成員運(yùn)算符2.3.6成員運(yùn)算符Python

中有很多序列型的容器,如第

5章的列表、元組、字典等,它們經(jīng)常會和成員運(yùn)算符搭

配使用。其實(shí)字符串也是一個由若干個字符構(gòu)成的序列,因此可以用成員運(yùn)算符判斷一個字符串是

否在另一個更長的字符串中。在中華傳統(tǒng)文化中,詩詞無疑占有很重的分量,而飛花令則是人們在背誦詩詞時一種有趣的游

戲形式。代碼

2.16假設(shè)飛花令的關(guān)鍵字是“千里”,要求判斷給出的詩句中是否包含關(guān)鍵字,成員

運(yùn)算符即可很好地完成這個任務(wù)。2.3.7運(yùn)算符的優(yōu)先級不同的運(yùn)算符組合起來往往會構(gòu)成一個比較復(fù)雜的表達(dá)式,此時多個運(yùn)算符之間的計(jì)算會有先

后問題,即運(yùn)算符的優(yōu)先級問題。表

2.6給出了一些常用運(yùn)算符的優(yōu)先級。對于十分復(fù)雜的表達(dá)式,

可通過括號來明確運(yùn)算順序是一個好的做法。運(yùn)算符說明運(yùn)算符優(yōu)先級順序圓括號()高||||||||低乘方**乘除*、/、//、%加減+、-比較運(yùn)算符==、!=、>、>=、<、<=成員運(yùn)算符in、not

in非not與and或or2.3.7運(yùn)算符的優(yōu)先級不同的運(yùn)算符組合起來往往會構(gòu)成一個比較復(fù)雜的表達(dá)式,此時多個運(yùn)算符之間的計(jì)算會有先

后問題,即運(yùn)算符的優(yōu)先級問題。表

2.6給出了一些常用運(yùn)算符的優(yōu)先級。對于十分復(fù)雜的表達(dá)式,

可通過括號來明確運(yùn)算順序是一個好的做法。運(yùn)算符說明運(yùn)算符優(yōu)先級順序圓括號()高||||||||低乘方**乘除*、/、//、%加減+、-比較運(yùn)算符==、!=、>、>=、<、<=成員運(yùn)算符in、not

in非not與and或orPART42.4輸入與輸出前面的代碼中已經(jīng)多次用到了

print()函數(shù),這是

Python

程序的基本輸出方式。雖然

print()函數(shù)

的使用很簡單,但也有一些細(xì)節(jié)需要介紹。另外,還有和輸出對應(yīng)的輸入函數(shù)input(),它們是頻繁

出現(xiàn)在代碼示例中的兩個函數(shù)。2.4輸入與輸出在

Python

中,如果想要了解某個函數(shù)的詳細(xì)語法,則可以使用help()函數(shù)。例如,想顯示print()

函數(shù)的語法細(xì)節(jié),輸入help(print)即可得到print()函數(shù)的幫助信息,如代碼

2.17所示。2.4.1輸出函數(shù)print()下面的代碼

2.18演示了合理使用

print()函數(shù)的參數(shù)來控制文字輸出的效果。第一行代碼輸出若

干個空格和“蟬”字,空格是為了讓詩的標(biāo)題有居中的效果。第二行代碼輸出兩項(xiàng)內(nèi)容,朝代和作

者。二者之間使用“|”分隔。這兩個

print()函數(shù)沒有明確說明end

參數(shù)的值,因此就是默認(rèn)的換行

符。所以詩的標(biāo)題和作者各占一行。接下來的

4個print()函數(shù)都明確指出

end參數(shù)的值。當(dāng)

end參數(shù)

的值為空格時,該句詩輸出完成但并不換行,下一句詩會在同行輸出。2.4.1輸出函數(shù)print()很多時候程序運(yùn)行后需要從鍵盤獲取數(shù)據(jù),完成這一任務(wù)可以使用

Python

內(nèi)置的

input()函數(shù)。

input()函數(shù)一般出現(xiàn)在賦值運(yùn)算符的右側(cè),當(dāng)程序運(yùn)行到

input()函數(shù)處時會停下來,在屏幕上輸出提

示信息后等待來自鍵盤的輸入數(shù)據(jù)。一旦用戶輸入完成并按

Enter鍵后,程序會繼續(xù)運(yùn)行。此時

input()

函數(shù)會將從鍵盤得到的輸入數(shù)據(jù)保存到某個變量中,就像代碼

2.19所展示的。代碼

2.19運(yùn)行后會等待用戶從鍵盤上輸入莫高窟現(xiàn)存洞窟數(shù)量。敦煌莫高窟是世界上現(xiàn)存規(guī)模

最大、保存最完好的佛教石窟藝術(shù),是中華文明寶庫中的瑰寶,現(xiàn)存

735個洞窟。程序會根據(jù)用戶

輸入的數(shù)量正確與否給出不同的回饋。代碼

2.19

input()函數(shù)示例2.4.2輸入函數(shù)input()num=int(input("你知道莫高窟現(xiàn)存有多少個洞窟嗎?"))ifnum

==

735:print("完全正確!你一定很愛莫高窟。")elif

700<=num

<

800:print("雖然不正確,但百位數(shù)是對的。")else:print("差得有點(diǎn)多,去查閱一下資料吧。")仔細(xì)觀察這段代碼,第一行為什么會有

int()函數(shù)存在呢?其實(shí),這是因?yàn)?/p>

input()函數(shù)的返回值

為字符串,即它把從鍵盤上收到的所有輸入都看成字符串。因此雖然用戶輸入的是類似

735

這樣的

數(shù)字,但

input()函數(shù)返回的是類似“735”的字符串。程序預(yù)置的答案是整數(shù)

735,因此需要將

input()

函數(shù)的返回值轉(zhuǎn)換為整數(shù),才能和標(biāo)準(zhǔn)答案進(jìn)行比對。這就是第一行

int()函數(shù)的來歷,如果沒有它,

則程序會報(bào)錯。由于

int()函數(shù)的存在,第一行代碼形成了兩個函數(shù)套在一起的局面。因?yàn)?/p>

input()函數(shù)被套在

int()

函數(shù)中,所以函數(shù)

input()從鍵盤得到輸入的數(shù)據(jù)后,會以字符串的形式返給

int()函數(shù),由它來將其

轉(zhuǎn)換為整數(shù),最后保存到num變量中。2.4.2輸入函數(shù)input()PART52.5Python生態(tài)系統(tǒng)之math庫2.5Python生態(tài)系統(tǒng)之math庫在

Python

的標(biāo)準(zhǔn)庫中有一個小巧的數(shù)學(xué)類函數(shù)庫即

math

庫。這個庫提供了幾個數(shù)學(xué)常數(shù),如

圓周率、e、無窮等,另外還有幾十個常用的數(shù)學(xué)函數(shù)。2.5.1訪問math庫文檔要想完整地了解

math庫,查看其幫助文檔是一個好方法??砂慈缦虏襟E訪問

math庫的文檔。(

1)單擊

Windows“開始”菜單,在打開的“開始”菜單中找到

Python

的相應(yīng)條目(即第

1章

的圖

1.3所示的條目)。(2)選擇

Python條目中的【Python3.11ModuleDocs(64-bit)】選項(xiàng),如圖

2.3所示,打開一個命

令行窗口,隨后會啟動瀏覽器打開

Python工具包的索引頁面。(3)在索引頁面中的【Built-in

Modules】部分找到

math庫的入口鏈接,如圖

2.4所示,單擊后

即可瀏覽

math庫的幫助文檔。2.5.2math庫函數(shù)舉例1.?dāng)?shù)學(xué)常數(shù)下面的代碼

2.20

演示了圓周率、常數(shù)

e及正無窮和負(fù)無窮的使用。使用

math庫與使用

turtle庫

的過程是類似的,也要使用

import語句導(dǎo)入庫,庫中的數(shù)學(xué)常數(shù)及函數(shù)在使用時都要掛上庫名前綴。2.乘方運(yùn)算Python

中實(shí)現(xiàn)乘方運(yùn)算的方式有多種,代碼

2.21演示了使用

math庫中的pow()函數(shù)、Python

內(nèi)

置的pow()函數(shù)、乘方運(yùn)算符等

3種方式計(jì)算

2

的乘方與開方,可以看出其中的異同。2.5.2math庫函數(shù)舉例3.對數(shù)運(yùn)算math庫中有一系列的對數(shù)運(yùn)算函數(shù),如以2為底的log2()函數(shù),以10為底的log10()函數(shù),還有可以指定對數(shù)底的log()函數(shù)。代碼2.22做了演示。2.5.2math庫函數(shù)舉例4.其他運(yùn)算函數(shù)math庫中還有很多完成三角函數(shù)運(yùn)算的函數(shù),如

sin()、cos()等,另外還有角度與弧度之間的轉(zhuǎn)

換函數(shù),如

degrees()、radians()等,其功能都是簡單直白的,在此不再一一贅述??傮w來說,math庫是一個小庫,提供的功能大部分局限于初等數(shù)學(xué)。如果需要進(jìn)行高等數(shù)學(xué)、

工程技術(shù)等方面的科學(xué)計(jì)算,則可以了解Numpy、Scipy等第三方庫。2.5.2math庫函數(shù)舉例PART62.6小試牛刀下面將通過幾個案例來集中演練本章所學(xué)的內(nèi)容。雖然

Python學(xué)習(xí)的征程剛剛開始,所學(xué)內(nèi)容

還很有限,但已經(jīng)可以利用

Python做很多事情了?,F(xiàn)代人離不開網(wǎng)絡(luò),每個人都會有很多網(wǎng)絡(luò)賬號,常用的安全措施就是給自己的賬號設(shè)一個密

碼。什么樣的密碼才是比較安全的呢?密碼的安全性和其組合可能性有關(guān)。組合的可能性越多,密

碼相對越安全。下面就使用

Python來計(jì)算不同方案下密碼的可能性。第一種方案,只使用

26個英文字母的小寫,密碼長度為

6位。這種密碼的可能性是

26

6次

方;第二種方案,使用

26個英文字母大小寫、10個阿拉伯?dāng)?shù)字及!、@、#、¥、%這

5個特殊字符

構(gòu)成長度為

12

的密碼。這種密碼每一位的可能性是

26+26+10+5

67,又因長度為

12,所以最終

的可能性為

6712。這些數(shù)值都比較大,但使用

Python來求解毫無壓力,如代碼

2.23所示。2.6.1更安全的密碼假設(shè)一個成年人的體重為

70kg,人體重的

70%是水,水分子的摩爾質(zhì)量為

18g/mol,即

6.02×1023

個水分子質(zhì)量為18g。根據(jù)這些信息就可以估算一個成年人體內(nèi)的水分子個數(shù)了,計(jì)算過程如

代碼

2.24所示。Python還可以處理更加巨大的整數(shù),大到超乎想象,如pow(2,pow(2,20))這個整數(shù)。為了感受這

個整數(shù)有多大,讀者可以將運(yùn)算結(jié)果復(fù)制到文字處理軟件中,看看僅由這個整數(shù)構(gòu)成的文檔會有多

少頁。2.6.2人體內(nèi)的水分子個數(shù)人們常說“多一份備份,多一分保障”。其實(shí)在一個多環(huán)節(jié)的作業(yè)系統(tǒng)上,如果每個環(huán)節(jié)都多

一份備份,則可靠性的提升可不是一點(diǎn)點(diǎn)。例如,一個打印店有一臺計(jì)算機(jī)、一臺打印機(jī),二者合起來構(gòu)成一個具有兩個環(huán)節(jié)的打印系統(tǒng)。

但設(shè)備總有可能出故障。假設(shè)計(jì)算機(jī)和打印機(jī)各自有

10%和

20%的概率出現(xiàn)故障,由一臺計(jì)算機(jī)、

一臺打印機(jī)構(gòu)成的單系統(tǒng),以及兩臺同樣的計(jì)算機(jī)和兩臺同樣的打印機(jī)構(gòu)成的雙系統(tǒng)在可靠程度上

有多大的區(qū)別呢?雙系統(tǒng)投入了

2倍的成本,在降低不可用時間上的表現(xiàn)如何呢?代碼

2.25對這個問題進(jìn)行了回答。Python還可以處理更加巨大的整數(shù),大到超乎想象,如pow(2,pow(2,20))這個整數(shù)。為了感受這個整數(shù)有多大,讀者可以將運(yùn)算結(jié)果復(fù)制到文字處理軟件中,看看僅由這個整數(shù)構(gòu)成的文檔會有多少頁。2.6.3多一份備份,多一分保障假設(shè)某公司有

81個員工,編號為

0~80。某日公司組織員工去看電影,要求大家按順序入座一

9×9

的影廳。具體規(guī)則為

0號員工入座

1排

1號,1號員工入座

1

2號,8號員工入座

1排

9

號,9號員工入座

2排

1號,以此類推,就座效果如下所示。代碼見2.26。2.6.4如何換算座位號天安門廣場的國旗每天都在日出時升起。整齊劃一的儀仗隊(duì),伴隨著清晨第一抹陽光,將五星

紅旗冉冉升起。此情此景,每一個觀看升旗儀式的人都會油然而生自豪之情。這也是為什么很多人

會選擇去天安門廣場看升國旗儀式。那么如何查詢預(yù)定日期的日出時間,從而做好行程規(guī)劃呢?網(wǎng)上查詢?nèi)粘鰰r間的應(yīng)用有很多,

這里只是作為一個案例來演示使用

math庫中的函數(shù)估算指定日期的日出時間。估算日出時間的關(guān)

鍵在于根據(jù)相關(guān)的地理知識得到一個估算公式,本案例使用了如下估算公式:代碼見2.272.6.5日出時間是何時PART72.7拓展實(shí)踐:模擬自動售貨機(jī)找零學(xué)習(xí)編程是一個循序漸進(jìn)的過程,需要經(jīng)過大量的實(shí)踐,不斷培養(yǎng)分析問題、解決問題的能力。當(dāng)遇到一個問題時,到底要如何構(gòu)思才能寫出程序呢?下面以模擬自動售貨機(jī)找零的例子來體會程序的構(gòu)思過程2.7.1

問題描述假設(shè)一種自動售貨機(jī)只接收

1元、5元、10元紙幣,售賣的貨品均為

10元以下的小零食,且價(jià)

格沒有分,即沒有

3.95元這樣的價(jià)格,只有

3.9元這樣的價(jià)格。在用戶輸入紙幣面額及購買商品價(jià)

格后,自動售貨機(jī)會彈出應(yīng)找零的硬幣2.7拓展實(shí)踐:模擬自動售貨機(jī)找零2.7.2

IPO建構(gòu)法程序的結(jié)構(gòu)整體上可分為

3

部分,輸入、輸出和核心處理環(huán)節(jié)。程序一般首先要從外界拿到輸

入的數(shù)據(jù),然后對數(shù)據(jù)進(jìn)行符合要求的處理,如對于上面的問題而言,程序拿到用戶輸入的紙幣面

額及購買商品的金額后,經(jīng)過某種算法的處理,得到應(yīng)找零錢對應(yīng)的硬幣數(shù),最后將結(jié)果輸出。這

個過程也被稱為

IPO(Input,Process,Output),是一個非?;A(chǔ)的建構(gòu)程序的方法。因此分析問題時首先要明確輸入,就好比解數(shù)學(xué)題時首先要明確已知。同一個問題如果給的輸

入形式不同,后期的程序設(shè)計(jì)要求也是不同的。例如,自動售貨機(jī)的問題,雖然輸入的只是紙幣面

額與商品總價(jià),但這些數(shù)據(jù)是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論