python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...
本節(jié)書摘來自華章計(jì)算機(jī)《從問題到程序:用Python學(xué)編程和計(jì)算》一書中的第2章,第2.11節(jié),作者 裘宗燕,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計(jì)算機(jī)”公眾號(hào)查看。
2.11 補(bǔ)充材料
本書各章的主要內(nèi)容將圍繞著怎樣通過編程解決計(jì)算問題展開,正文中對(duì)Python語(yǔ)言的機(jī)制只做必要的說明,有些細(xì)節(jié)情況沒有涉及。另外,用Python編程也有許多有趣而且有用的技術(shù)。如果在各章的主要部分詳細(xì)羅列,也可能沖淡討論的主線。但是上述兩方面的一些情況也值得介紹。本書采用的方法是在一些章的最后增加稱為“補(bǔ)充材料”一節(jié),補(bǔ)充一些細(xì)節(jié),供讀者參考,也供用本書教授課程的教師選用。
除了討論語(yǔ)言細(xì)節(jié)和編程技術(shù)的兩個(gè)小節(jié)外,有時(shí)還總結(jié)了一些常用的編程模式。練習(xí)中的第1題總是對(duì)本章內(nèi)容做些總結(jié),其中列出本章討論過的重要概念。
2.11.1 語(yǔ)言細(xì)節(jié)
這里介紹Python語(yǔ)言中的一些與本章內(nèi)容有關(guān)的情況,作為本章內(nèi)容的補(bǔ)充。這里介紹的情況在本書中并不使用,對(duì)于初學(xué)者并不重要,可以有選擇地閱讀。提供這部分內(nèi)容有兩方面意義,首先是使本書中對(duì)Python語(yǔ)言的介紹較為完整。另一方面,讀者在進(jìn)一步使用Python去解決更復(fù)雜的問題時(shí),也可能需要用到這里介紹的功能。
整數(shù)的二進(jìn)制、八進(jìn)制和十六進(jìn)制字面量形式
Python只有一種整數(shù),即是類型為int的整數(shù)。但另一方面,這個(gè)語(yǔ)言卻為整數(shù)提供了多種不同的字面量描述方式。前面介紹的十進(jìn)制字面量形式使用最普遍,但Python還提供了二進(jìn)制、八進(jìn)制和十六進(jìn)制的整數(shù)字面量形式。現(xiàn)在介紹有關(guān)情況。
首先,二進(jìn)制、八進(jìn)制和十六進(jìn)制的整數(shù)字面量形式,都由一個(gè)引導(dǎo)部分和一個(gè)數(shù)值部分組成,一個(gè)整數(shù)仍然寫成一個(gè)連續(xù)的字符序列。這三種字面量的引導(dǎo)部分都以數(shù)字0開頭,在0之后用一個(gè)字符相互區(qū)分,而后緊接著是一串表示其數(shù)值的數(shù)字(對(duì)于十六進(jìn)制,其中還能包含一些英文字母,見下)。
二進(jìn)制整數(shù)字面量的引導(dǎo)部分是0b或者0B,隨后表示數(shù)值的部分中只能用兩個(gè)數(shù)字0和1,是一段0/1序列。例如0b110101和0B110100。在b或B之后立刻出現(xiàn)幾個(gè)0也允許,不影響結(jié)果的數(shù)值。二進(jìn)制數(shù)的數(shù)值按如下方式計(jì)算:
這里實(shí)際上假設(shè)寫出的二進(jìn)制字面量包含n + 1位二進(jìn)制數(shù)字。很容易看到,Python的二進(jìn)制字面量只是整數(shù)的一種寫法,例如:
>>>?0b110101
53
>>>?0B01001110
78
>>>
在二進(jìn)制字面量里出現(xiàn)超出0和1的數(shù)字將作為出錯(cuò)。此外,Python標(biāo)準(zhǔn)函數(shù)bin返回與其整數(shù)參數(shù)對(duì)應(yīng)的二進(jìn)制字面量形式(結(jié)果是一個(gè)字符串)。例如:
>>>?bin(78)
'0b1001110'
八進(jìn)制整數(shù)字面量的引導(dǎo)部分用0o或者0O(這兩種形式都很糟糕,0和O太像了),隨后可以寫出任意長(zhǎng)的數(shù)字0到7的序列。其計(jì)值公式是:
例如:
>>>?0O12
10
>>>?0O1234567012345670
45954944846776
與二進(jìn)制類似,表示數(shù)字的部分中不能出現(xiàn)數(shù)字8或9。標(biāo)準(zhǔn)函數(shù)oct返回與其整數(shù)參數(shù)對(duì)應(yīng)的八進(jìn)制字面量形式(是一個(gè)字符串)。
十六進(jìn)制整數(shù)字面量的引導(dǎo)部分用0x或者0X。這里有一點(diǎn)麻煩:表示十六進(jìn)制數(shù)的數(shù)值需要16個(gè)數(shù)字,但阿拉伯?dāng)?shù)字只有10個(gè)。Python采用計(jì)算機(jī)領(lǐng)域的習(xí)慣做法,用最前面6個(gè)英文字母填補(bǔ)空缺:a或A表示10,b或B表示11,c或C表示12,d或D表示13,e或E表示14,f或F表示15。下面是兩個(gè)十六進(jìn)制字面量:
>>>?0X12
18
>>>?0xdeadbeeffeeddeaf
16045690985374408367
``
十六進(jìn)制數(shù)表示的計(jì)值公式與上面類似:

標(biāo)準(zhǔn)函數(shù)hex返回其整數(shù)參數(shù)對(duì)應(yīng)的十六進(jìn)制字面量字符串。
用二進(jìn)制、八進(jìn)制、十六進(jìn)制字面量都可以描述任意大的整數(shù)。
###整數(shù)的位運(yùn)算
計(jì)算機(jī)里的數(shù)據(jù)都用二進(jìn)制編碼的形式表示,位(即二進(jìn)制位,bit)是最基本的編碼單位,也是最小的數(shù)據(jù)表示單位。在實(shí)際問題中,有些對(duì)象的變化情況很簡(jiǎn)單,只用一個(gè)或幾個(gè)位就能表示,如果程序里這種數(shù)據(jù)很多,把它們表示為某類型的對(duì)象,可能造成很大的存儲(chǔ)浪費(fèi)。一種可能辦法是把多個(gè)這類數(shù)據(jù)對(duì)象存入一個(gè)整數(shù)類型的對(duì)象。此外,一些與底層有關(guān)的程序可能需要操作二進(jìn)制位數(shù)據(jù)。例如,硬件工作狀態(tài)信息通常用二進(jìn)制位串表示,操作硬件時(shí)就需要用位串形式發(fā)命令。為適應(yīng)這些情況,Python語(yǔ)言提供了針對(duì)整數(shù)中二進(jìn)制位的操作。有關(guān)的運(yùn)算符稱為按位運(yùn)算符。
先介紹基本的位運(yùn)算,它們是按位運(yùn)算符的基礎(chǔ)。一個(gè)二進(jìn)制位只能取值0或1,位運(yùn)算就是對(duì)二進(jìn)制位的運(yùn)算,從一個(gè)或兩個(gè)0/1值出發(fā),算出0/1結(jié)果。常用位運(yùn)算共有四個(gè),其中“否定”為一元運(yùn)算,其他都是二元運(yùn)算,運(yùn)算規(guī)則很簡(jiǎn)單,見下表:

從這個(gè)表可以看出,否定就是1變0而0變1;只有1和1“與”的結(jié)果是1,其他情況的結(jié)果均為0;0和0“或”的結(jié)果為0,其他情況結(jié)果都是1;“異或”運(yùn)算看兩個(gè)被操作位是否相同,相同時(shí)是1,否則是0。
與上面的位運(yùn)算相對(duì)應(yīng),Python語(yǔ)言定義了四個(gè)按位運(yùn)算符,把它們作用于整型對(duì)象,得到整型結(jié)果。這些按位運(yùn)算符把整數(shù)看成二進(jìn)制位的序列。按位否定運(yùn)算符是一元運(yùn)算符,作用于一個(gè)整數(shù)類型的運(yùn)算對(duì)象,其余三個(gè)都是二元運(yùn)算符,作用于兩個(gè)整數(shù)類型的運(yùn)算對(duì)象。在運(yùn)算時(shí),它們對(duì)運(yùn)算對(duì)象的一個(gè)個(gè)(或一對(duì)對(duì))二進(jìn)制位分別做位運(yùn)算,得到結(jié)果的各位。四個(gè)按位運(yùn)算符是:

看一個(gè)例子,假設(shè)變量x和y都是16位整數(shù),它們值分別是:
x: 0010,1001,0101,0111
y: 1001,1100,1111,1010
對(duì)x和y做各種按位運(yùn)算,得到的結(jié)果如下:
~x 1101,0110,1010,1000
x?&?y 0000,1000,0101,0010
x?|?y 1011,1101,1111,1111
x?^?y 1011,0101,1010,1101
請(qǐng)讀者根據(jù)這個(gè)例子,對(duì)照上面說明,設(shè)法弄清各按位運(yùn)算符的意義。注意,這里整數(shù)表示中的逗號(hào)只是為了閱讀方便。
這些運(yùn)算符可以作用于任意大的整數(shù)對(duì)象,得到任意大的結(jié)果。如果兩個(gè)整數(shù)的長(zhǎng)度不同,Python有默認(rèn)的處理方式,總之不會(huì)丟失信息。
除了上面4個(gè)按位運(yùn)算符外,Python還有兩個(gè)與二進(jìn)制位有關(guān)的整數(shù)運(yùn)算符,分別是左移運(yùn)算符“<>”。它們的左邊是被位移的整數(shù)對(duì)象,右邊的整數(shù)表示希望左移或右移的位數(shù)。舉例說,對(duì)上面的y將有:
y?<
y?>>?3: 0001,0011,1001,1111
可以看到,左移(或右移)空出的二進(jìn)制位全部補(bǔ)0。
另請(qǐng)注意,上面的這六個(gè)運(yùn)算符都是做運(yùn)算,產(chǎn)生新的整數(shù)對(duì)象。例如3 << 3“算出”一個(gè)結(jié)果(一個(gè)新的整數(shù)對(duì)象24)。假設(shè)變量z的值是3,z << 3得到24,但z的值不變。要改變z的值就需要賦值,或者用下面介紹的擴(kuò)充賦值運(yùn)算符。
上述運(yùn)算符的優(yōu)先級(jí)情況有些復(fù)雜:一元否定運(yùn)算符的優(yōu)先級(jí)與一元正負(fù)號(hào)相同,移位運(yùn)算符的優(yōu)先級(jí)低于整數(shù)加減,三個(gè)二元按位運(yùn)算符的優(yōu)先級(jí)互不相同,從高到低依次為 &、|、^,但都低于移位運(yùn)算符。所有二元運(yùn)算符都按從左到右結(jié)合。例如x << 3 >> 5相當(dāng)于(x << 3) >> 5。由于優(yōu)先級(jí)的情況比較復(fù)雜,建議少寫過分復(fù)雜的表達(dá)式,多用括號(hào)顯式描述運(yùn)算的順序。
與上述5個(gè)二元位運(yùn)算符相對(duì)應(yīng),Python有5個(gè)擴(kuò)充賦值運(yùn)算符,它們分別基于賦值符之后的第二個(gè)參數(shù)修改左邊表達(dá)式的對(duì)象(最簡(jiǎn)單情況用變量表示):

例如,x <<= 5效果相當(dāng)于x = x << 5,但書寫方便,通常效率更高。
###有關(guān)浮點(diǎn)數(shù)的進(jìn)一步說明
高級(jí)語(yǔ)言的浮點(diǎn)數(shù)一般都直接映射到語(yǔ)言系統(tǒng)運(yùn)行所在的計(jì)算機(jī)硬件,因此高級(jí)語(yǔ)言中的浮點(diǎn)數(shù)及浮點(diǎn)數(shù)計(jì)算直接反映了硬件的相關(guān)特征。在計(jì)算機(jī)設(shè)計(jì)層面,目前大多數(shù)硬件的浮點(diǎn)數(shù)計(jì)算都采用IEEE 754標(biāo)準(zhǔn)。這里的IEEE是電氣和電子工程師協(xié)會(huì)的簡(jiǎn)寫,它是目前全球最大的一個(gè)非營(yíng)利性專業(yè)技術(shù)學(xué)會(huì)。IEEE 754是IEEE頒布的一個(gè)浮點(diǎn)數(shù)算術(shù)系統(tǒng)標(biāo)準(zhǔn),被大多數(shù)計(jì)算機(jī)硬件廠商采納。Python語(yǔ)言并沒有強(qiáng)制性地規(guī)定采用IEEE 754浮點(diǎn)數(shù)(如果那樣,在不執(zhí)行這個(gè)標(biāo)準(zhǔn)的硬件上將很難實(shí)現(xiàn)Python),但常見環(huán)境中運(yùn)行的Python中的浮點(diǎn)數(shù)應(yīng)該符合這個(gè)標(biāo)準(zhǔn)。下面介紹最常用的浮點(diǎn)數(shù)情況。
在常規(guī)系統(tǒng)上運(yùn)行的CPython都采用IEEE 754的雙精度浮點(diǎn)數(shù)標(biāo)準(zhǔn)作為語(yǔ)言的浮點(diǎn)數(shù)。這種浮點(diǎn)數(shù)用64位二進(jìn)制碼表示,其中指數(shù)部分用11位,可以表示-1023到1023;表示數(shù)值的部分(術(shù)語(yǔ)是尾數(shù)部分)用52位,另有一個(gè)符號(hào)位表示正負(fù)數(shù)。
指數(shù)部分的大小決定了浮點(diǎn)數(shù)的表示范圍,絕對(duì)值最大(最小)大約是±21023的量級(jí)。換算到十進(jìn)制數(shù),表示的范圍(如前面所說)大致為±5×10-324~1.7×10308。尾數(shù)的位數(shù)決定了浮點(diǎn)數(shù)的表示精度,52位二進(jìn)制數(shù)大約相當(dāng)于十進(jìn)制的16到17位。超過上述范圍的實(shí)數(shù)在這里無(wú)法表示。即使在范圍內(nèi),浮點(diǎn)數(shù)表示也受到精度的限制,只能表示數(shù)軸上一個(gè)個(gè)能用二進(jìn)制編碼形式表示的孤立點(diǎn)。
IEEE 754的具體表示方式還有些細(xì)節(jié),但知道上面這些對(duì)于初學(xué)者已經(jīng)夠了。從基本編程的需要看,只需了解這種浮點(diǎn)數(shù)標(biāo)準(zhǔn)的表示范圍和精度。許多其他語(yǔ)言的實(shí)現(xiàn)也采用IEEE 754的雙精度浮點(diǎn),其他Python實(shí)現(xiàn)多半也采用這個(gè)標(biāo)準(zhǔn)。
###浮點(diǎn)數(shù)舍入轉(zhuǎn)換
從浮點(diǎn)數(shù)轉(zhuǎn)換到整數(shù),默認(rèn)轉(zhuǎn)換方式是舍去小數(shù)部分,通常稱為截尾。內(nèi)置函數(shù)round采用另一種轉(zhuǎn)換方式,通過舍入得到與浮點(diǎn)數(shù)最近的整數(shù)。但什么是最近呢?中小學(xué)的算術(shù)里教過“四舍五入”的舍入規(guī)則,但顯然這一規(guī)則偏向于入,從統(tǒng)計(jì)的觀點(diǎn)看,這樣得到的整數(shù)值偏大。銀行總按四舍五入付錢就會(huì)虧本,長(zhǎng)期做下去累積的“入”也會(huì)導(dǎo)致虧本很多。為了防止這種情況,人們提出了另一種更為公平的舍入方式。
Python的round函數(shù)采用所謂“銀行家舍入”方法,可稱為“四舍六入五取偶”舍入,這也是目前常見計(jì)算機(jī)硬件采用的舍入計(jì)算標(biāo)準(zhǔn)(IEEE 754浮點(diǎn)數(shù)標(biāo)準(zhǔn)中的舍入計(jì)算標(biāo)準(zhǔn)方法,目前編程語(yǔ)言和工具大都直接借用這一舍入計(jì)算標(biāo)準(zhǔn))。
具體說,如果需要舍入部分的最高位小于等于4和大于等于6,就直接分別舍去或者進(jìn)位。假設(shè)需要舍入的那段數(shù)字的最高位是5,如果在這個(gè)5之后還有不為0的有效位(也就是說,明確地大于5),轉(zhuǎn)換時(shí)就進(jìn)位。如果5之后都是0位,則根據(jù)5的前一位舍入:前一位是奇數(shù)時(shí)進(jìn)位,前一位是偶數(shù)時(shí)舍去。這里把0也看作偶數(shù)。與簡(jiǎn)單的四舍五入,“銀行家舍入”在概率上更公平。按照這種規(guī)則,可以看到:
round(0.5)
0
round(1.5)
2
round(-0.5)
0
round(-1.5)
-2
### 字符串和換意序列
在寫字符串時(shí)有些字符無(wú)法直接寫出,換行符是這種字符的典型代表。由于有這種情況,Python(與其他一些語(yǔ)言一樣)引入了換意序列的概念,用一種特殊形式的字符序列(包含兩個(gè)或更多字符)表示字符串里的一個(gè)字符。換意序列的第一個(gè)字符總是下劃線符,也就是說,字符串里出現(xiàn)的下劃線符總表示換意序列開始,后面字符(序列)決定換意序列表示的字符。前面介紹過幾個(gè)常用換意字符,下面是它們和另外幾個(gè)及其解釋:


其中,“\換行符”表示反斜線后緊跟換行。“\ooo”表示反斜線后緊跟3位八進(jìn)制數(shù)字,這種形式的換意序列表示編碼為八進(jìn)制為ooo的字符。“\xhh”表示反斜線后有一個(gè)x,后跟2位十六進(jìn)制數(shù)字(包括A/B/C/D/E/F),這種換意序列表示編碼為hh的字符。
除上面這些表示形式外,Python還支持用于寫出所有Unicode字符的換意序列形式。這方面的細(xì)節(jié)這里不進(jìn)一步介紹了。
用一對(duì)三個(gè)引號(hào)的形式,在字符串字面量中可以包含換行,不必再寫換意序列“\n”。此外,采用三個(gè)引號(hào)的形式,多數(shù)時(shí)候也不需要用單引號(hào)和雙引號(hào)的換意序列“\'”和“\"”。但有時(shí)還可能需要,例如下面字面量沒問題:
""""Is?this
the?book
of?you?",?she?asked"""
開頭的連續(xù)四個(gè)引號(hào)被正確解析為一個(gè)連續(xù)三引號(hào)和一個(gè)雙引號(hào)。但
""""Is?this
the?book
of?you?""""
將報(bào)錯(cuò)。開始的連續(xù)四個(gè)雙引號(hào)可以正確解析,但最后的四個(gè)雙引號(hào)不行:解釋器看到前三個(gè)雙引號(hào),認(rèn)為它是字符串的結(jié)束標(biāo)志,字符串到此結(jié)束。又看到一個(gè)雙引號(hào),解釋器認(rèn)為另一個(gè)字符串從這里開始。遇到換行,它認(rèn)為字符串沒完,報(bào)語(yǔ)法錯(cuò)誤。要正確寫出這個(gè)字符串(內(nèi)容是一對(duì)雙引號(hào)括起的一句話),可以寫:
""""Is?this
the?book
of?you?""""
或者更簡(jiǎn)單的,用一對(duì)三個(gè)單引號(hào)作為字符串括號(hào)。
如果在一行里連續(xù)寫出幾個(gè)字符串,解釋器會(huì)自動(dòng)將其連接成一個(gè)字符串:
s?=?'abc'?"123"
s
'abc123'
但是,解釋器只是在處理字符串字面量,才這樣做。例如:
t?=?'456'
s?t
SyntaxError:?invalid?syntax
如果要拼接作為變量值的字符串,必須用拼接運(yùn)算符(加法符號(hào))。
###基本語(yǔ)句
表達(dá)式可以寫在程序中任何應(yīng)該寫語(yǔ)句的位置,這樣的表達(dá)式就構(gòu)成了一個(gè)表達(dá)式語(yǔ)句。在一般程序里,把普通表達(dá)式(例如算術(shù)表達(dá)式1 + 2等)作為語(yǔ)句使用意義不大。運(yùn)行中執(zhí)行這個(gè)語(yǔ)句時(shí)就求值該表達(dá)式,求出值后該語(yǔ)句的執(zhí)行完成,表達(dá)式的值隨后將被丟掉,不產(chǎn)生任何效果(除了表達(dá)式計(jì)算可能耗費(fèi)計(jì)算機(jī)時(shí)間)。
有用的表達(dá)式語(yǔ)句主要是函數(shù)調(diào)用。在Python里,函數(shù)調(diào)用是一類基本表達(dá)式。獨(dú)立寫出的函數(shù)調(diào)用就構(gòu)成了一個(gè)表達(dá)式語(yǔ)句。前面程序里已經(jīng)多次出現(xiàn)這種表達(dá)式語(yǔ)句,例如對(duì)內(nèi)置函數(shù)print的調(diào)用語(yǔ)句。實(shí)際上,任何無(wú)特定返回值的函數(shù)(實(shí)際上返回None),通常都以表達(dá)式語(yǔ)句的方式使用。
Python允許在一行中寫多個(gè)語(yǔ)句,這時(shí)要求語(yǔ)句之間加分號(hào)。例如:
x?=?len;?y?=?x?+?1
這樣一行仍看作一個(gè)語(yǔ)句,在其執(zhí)行時(shí)將順序執(zhí)行其中的成分語(yǔ)句。最后的成分語(yǔ)句執(zhí)行完畢時(shí)整個(gè)語(yǔ)句的執(zhí)行完成。這種語(yǔ)句是順序語(yǔ)句的一種形式。當(dāng)然,這種形式中也可以寫任何語(yǔ)句,不僅是賦值語(yǔ)句。例如在一個(gè)循環(huán)里寫:
x?=?y?+?4;?continue
雖然語(yǔ)言允許上面的形式,有時(shí)也會(huì)看到有人把幾個(gè)簡(jiǎn)單語(yǔ)句寫在一行。但在Python編程實(shí)踐中,人們不大倡導(dǎo)這種形式。在絕大多數(shù)Python程序里,人們堅(jiān)持一行一個(gè)語(yǔ)句的基本規(guī)則。在一些情況下用并行賦值語(yǔ)句同時(shí)給幾個(gè)變量賦值。
###2.11.2 編程技術(shù)
本節(jié)討論幾個(gè)與編程有關(guān)的技術(shù)問題。
###條件語(yǔ)句與條件表達(dá)式
在一些情況下,條件語(yǔ)句和條件表達(dá)式都能使用。例如下面同樣函數(shù)的兩個(gè)定義:
def?abs(x):
if?x?
return?-x
else:
return?x
def?abs(x):
return?-x?if?x?
兩個(gè)函數(shù)功能完全一樣,但后一個(gè)簡(jiǎn)單許多。參考這個(gè)實(shí)例,可以總結(jié)出適合使用條件表達(dá)式的情況:在需要根據(jù)條件,從兩種不同的表達(dá)式計(jì)算中選一個(gè),而且計(jì)算比較簡(jiǎn)單時(shí),采用條件表達(dá)式可以簡(jiǎn)化程序。條件語(yǔ)句適合用于各種賦值情況,其一個(gè)分支中可以包含任意復(fù)雜的操作序列。用來處理上面問題,是大材小用了。
在后面章節(jié)里,還會(huì)看到許多使用條件表達(dá)式的有意思的例子。
###寫表達(dá)式的技術(shù)
如果需要寫的計(jì)算表達(dá)式非常復(fù)雜,應(yīng)該設(shè)法做出安排,使寫出的程序代碼清晰易讀,容易檢查表達(dá)式書寫的正確性。有兩種方法可以參考。
其一是分解表達(dá)式,用一個(gè)或幾個(gè)中間變量記錄表達(dá)式中子部分的結(jié)果,而后用這些變量的值組合出最終的表達(dá)式。適當(dāng)?shù)姆纸庥兄诒WC表達(dá)式的可讀性和正確性。
如果確實(shí)需要或者希望寫很長(zhǎng)的表達(dá)式,那就需要安排好表達(dá)式的多行格式。首先做好準(zhǔn)備,為能把表達(dá)式寫在多個(gè)行里,可以參考前面基于三邊求三角形函數(shù)中條件的寫法,先加入一個(gè)括號(hào)保證解釋器不會(huì)把表達(dá)式截?cái)?#xff0c;而后在每行適當(dāng)?shù)牡胤綌嘈?#xff0c;各行中屬于同層的結(jié)構(gòu)相互對(duì)齊(仿照Python語(yǔ)言的格式)。例如,下面是一個(gè)長(zhǎng)表達(dá)式:
x?=?((a1?a2?-?b1?b2?-?c1?c2?-?d1?d2)?+
(a1?b2?+?a2?b1?+?c1?d2?-?c2?d1)?*?i?+
(a1?c2?+?a2?c1?+?b2?d1?-?b1?d2)?*?j?+
(a1?d2?+?a2?d1?+?b1?c2?-?b2?c1)?*?k)
為能寫跨越多行的長(zhǎng)表達(dá)式,在上面表達(dá)式開始加了一個(gè)括號(hào)。在上述表達(dá)式中,我們把屬于同一層的子表達(dá)式對(duì)齊,分別放在幾行。這樣寫表達(dá)式,很容易檢查,容易發(fā)現(xiàn)錯(cuò)誤。IDLE或其他支持Python的開發(fā)系統(tǒng)都能幫助維持良好的表達(dá)式形式。但如何斷行等,還是需要人做好安排。
###數(shù)值計(jì)算函數(shù)中錯(cuò)誤情況的返回值
有些數(shù)值計(jì)算函數(shù)不是全函數(shù)(相對(duì)于參數(shù)的類型而言),如果被調(diào)用時(shí)得到的參數(shù)不滿足需要,它將無(wú)法返回一個(gè)正確的結(jié)果。在這種情況下可以考慮報(bào)錯(cuò)(后面介紹),也可以考慮讓函數(shù)返回一個(gè)特殊值。不同的處理方式各有優(yōu)缺點(diǎn)。
本章中出現(xiàn)了幾種處理方法:求階乘函數(shù)對(duì)于負(fù)的參數(shù)都返回0;計(jì)算三角形面積的函數(shù),對(duì)于不能構(gòu)成三角形三邊的參數(shù),返回float("nan")表達(dá)式的值。后面還會(huì)看到一些情況,這些做法都可以參考。
###本章介紹的Python關(guān)鍵字
這里列出本章討論過的Python關(guān)鍵字,供讀者參考:from,import,and,or,not,True,False,if,else,elif,for,in,while,break,continue,def,return,None,pass。在總共33個(gè)關(guān)鍵字中,本章已經(jīng)介紹了19個(gè)。包括:
- 3個(gè)特殊字面量,表示邏輯常量的True和False,以及特殊值None;
- 3個(gè)邏輯運(yùn)算符and、or和not(not還有其他使用方式,見后面的介紹);
- 流程控制結(jié)構(gòu)中用6個(gè),if,else,elif、for、in、while;
- 專門語(yǔ)句用4個(gè):break,continue,return,pass;
- 程序包導(dǎo)入語(yǔ)句用from和import;
總結(jié)
以上是生活随笔為你收集整理的python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小森生活碧空鞋怎么制作
- 下一篇: python实现贝叶斯分类器_pytho