版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院全員核酸檢測工作總結(jié)(6篇)
- 關(guān)于項(xiàng)目合作的意向書(6篇)
- 《siji酒店調(diào)研報(bào)告》課件
- 體育課程活動策劃的實(shí)踐與效果評估報(bào)告
- 企業(yè)園區(qū)的綠化美化實(shí)踐探索
- 辦公新境界宋城辦公環(huán)境規(guī)劃與設(shè)計(jì)思路
- 創(chuàng)新設(shè)計(jì)打造安全舒適的學(xué)生餐廳環(huán)境
- 辦公新紀(jì)元打造高效辦公環(huán)境-辦公環(huán)境與設(shè)備綜合改善計(jì)劃書
- 辦公自動化系統(tǒng)中的數(shù)學(xué)算法優(yōu)化
- 辦公用品客戶需求調(diào)研與高效采購方法
- 2024年中考語文之文言文對比閱讀-狼(解析版)
- 園林綠化一二三級養(yǎng)護(hù)標(biāo)準(zhǔn)及收費(fèi)方案
- 吉林省松原市寧江區(qū)2023-2024學(xué)年八年級下學(xué)期期中考試數(shù)學(xué)試題
- 新媒體視頻剪輯智慧樹知到期末考試答案章節(jié)答案2024年臨沂職業(yè)學(xué)院
- HYT 081-2005 紅樹林生態(tài)監(jiān)測技術(shù)規(guī)程
- 西游記車遲國斗法
- 酒店前臺-客人入住登記表
- 單位檔案安全檢查記錄表
- 中國式教育現(xiàn)代化教師心得1000字文章10篇
- 2024年NOC-創(chuàng)意實(shí)驗(yàn)室試題及答案
- 綠植租擺服務(wù)方案
評論
0/150
提交評論