版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1單元初識(shí)數(shù)據(jù)與計(jì)算
1.1我們身邊的數(shù)據(jù)
1、數(shù)據(jù)
在我們身邊存在著各種數(shù)據(jù),如刷公交卡時(shí)刷卡機(jī)顯示的本次扣款金額和卡內(nèi)余
額、電子手表上顯示的日期和時(shí)間、教科書封底下端的國際標(biāo)準(zhǔn)書號(hào)(ISBN)、體育課上
測量的各項(xiàng)運(yùn)動(dòng)成績等。這些數(shù)字都是數(shù)據(jù)。除了數(shù)字以外,還有文字、圖形、圖像、
聲音和視頻等形式。
在日常生活中,有些數(shù)據(jù)是固定不變的。例如,不管圓有多大,它的周長與直徑的
比值總是一個(gè)固定的數(shù),也就是我們常說的圓周率n;有些數(shù)據(jù)是不斷變化的,例如家
庭每天的用電量、國際黃金價(jià)格、氣溫等。有理數(shù)據(jù)是隨機(jī)出現(xiàn)的。比如拋硬幣,是正
面向上還是反面向上是隨機(jī)的。
2、信息
單純的數(shù)據(jù)不能表達(dá)具體的含義,例如我們并不清楚像28和90%這樣的數(shù)值在生活
中的具體意義。在對(duì)數(shù)據(jù)進(jìn)行處理或賦予其具體的情境后,這些數(shù)據(jù)就成了有意義的信
息。28和90%可以分別用于表達(dá)今日的最高氣溫28°C,相對(duì)濕度90%,此時(shí)數(shù)據(jù)就成了
有意義的信息。
數(shù)據(jù)是信息的符號(hào)表示;信息是數(shù)據(jù)的內(nèi)涵,是對(duì)數(shù)據(jù)的語義解釋。數(shù)據(jù)處理就是
把原始數(shù)據(jù)轉(zhuǎn)換成人們所需要的信息的過程。完整的數(shù)據(jù)處理過程一般包括數(shù)據(jù)的采
集、加工、傳輸、存儲(chǔ)、檢索和輸出六個(gè)環(huán)節(jié)。數(shù)據(jù)處理的目的是把數(shù)據(jù)轉(zhuǎn)化成有用的
信息以滿足用戶的需求。
一般而言,不管是什么樣的信息,它們通常都具有一些特征,如載體依附性、價(jià)值
性、時(shí)效性、共享性等。
以天氣預(yù)報(bào)信息為例,該信息不能獨(dú)立存在,需要依附于一定的載體,它可以顯示
在網(wǎng)頁上,也可以顯示在報(bào)紙上,體現(xiàn)了信息的載體依附性;人們可以利用天氣預(yù)報(bào)作
為穿衣或出行的參考,體現(xiàn)了信息的價(jià)值性;天氣預(yù)報(bào)只是預(yù)報(bào)了未來某一特定時(shí)段的
天氣狀況,它會(huì)隨著時(shí)間的推移而變化,體現(xiàn)了信息的時(shí)效性;作為一種資源,天氣
預(yù)報(bào)往往可以被多個(gè)信息接收者接收并且多次使用,這就體現(xiàn)了信息的共享性。
3、知識(shí).
知識(shí)是信息經(jīng)過加工提煉后形成的抽象產(chǎn)物。它表述的是事物運(yùn)動(dòng)的狀態(tài)和狀態(tài)變
化的規(guī)律。可以說,知識(shí)是一類高級(jí)的、抽象的,而且具有普遍適應(yīng)性的信息。
知識(shí)是人類求知活動(dòng)的結(jié)晶。例如,人們發(fā)現(xiàn)感冒的發(fā)生除了與病毒感染有關(guān)外,
天氣條件也是一個(gè)重要因素。冷空氣的人侵,造成大幅度降溫,或者冷空氣經(jīng)過后出現(xiàn)
冷高壓天氣,特別是大氣壓高于1030百帕的晴好天氣,就會(huì)有大批人感冒。感冒指數(shù)的
計(jì)算方法,是經(jīng)專家調(diào)查研究和演算歸納出來的。知識(shí)是認(rèn)識(shí)世界的結(jié)果,同時(shí)也是改
造世界的依據(jù)。
數(shù)據(jù)、信息和知識(shí)可以看作人類對(duì)客觀事物感知的三個(gè)不同階段。數(shù)據(jù)是對(duì)事物屬
性的客觀記錄,信息是經(jīng)過組織的有結(jié)構(gòu)的數(shù)據(jù),知識(shí)是經(jīng)過人的思維整理過的信息、
數(shù)據(jù)、形象、價(jià)值標(biāo)準(zhǔn)以及社會(huì)的其他符號(hào)化產(chǎn)物。
4、數(shù)據(jù)的來源
按照獲取數(shù)據(jù)的渠道,可以將數(shù)據(jù)分為兩類:直接數(shù)據(jù)和間接數(shù)據(jù)。統(tǒng)計(jì)調(diào)查或科
學(xué)實(shí)驗(yàn)通常是數(shù)據(jù)的直接來源,由此得到的原始數(shù)據(jù)一般稱為直接數(shù)據(jù)或一手?jǐn)?shù)據(jù);而
通過查閱資料獲得的數(shù)據(jù)或他人對(duì)原始數(shù)據(jù)處理過的數(shù)據(jù),一般稱為間接數(shù)據(jù)或二手?jǐn)?shù)
據(jù)。例如,我們用溫度計(jì)實(shí)際測量得到的氣溫值是直接數(shù)據(jù),而從網(wǎng)上搜索到的氣溫值
是間接數(shù)據(jù)。
5、數(shù)據(jù)的收集方法
直接數(shù)據(jù)的收集方法有很多,如調(diào)查法、訪談法、觀察法、實(shí)驗(yàn)法等。隨著技術(shù)的
發(fā)展,收集數(shù)據(jù)的手段日益豐富。例如,在農(nóng)田中使用傳感器可以實(shí)時(shí)收集農(nóng)田土壤含
水率,用以指導(dǎo)精確灌溉;利用車載尾氣檢測技術(shù)可以獲取實(shí)時(shí)的動(dòng)態(tài)尾氣數(shù)據(jù),用以
協(xié)助調(diào)整交通策略及城市規(guī)劃;利用中國嫦娥四號(hào)探測器收集月球表面成分的第一手資
料。
間接數(shù)據(jù)一般都已經(jīng)過加工處理,使用起來更加方便。收集間接數(shù)據(jù)的方法也有很
多,如查閱文獻(xiàn)資料、關(guān)注媒體資源、瀏覽權(quán)威網(wǎng)站、利用搜索引擎在網(wǎng)絡(luò)中進(jìn)行檢索、
從相關(guān)數(shù)據(jù)公司購買等。在收集這類數(shù)據(jù)時(shí)要綜合考慮數(shù)據(jù)的時(shí)效性、可信度以及經(jīng)濟(jì)
條件等方面的因素。
6、數(shù)據(jù)分析
數(shù)據(jù)分析是指用適當(dāng)?shù)慕y(tǒng)計(jì)分析方法對(duì)收集來的大量數(shù)據(jù)進(jìn)行分析,提取有用信
息,并形成結(jié)論的過程。
針對(duì)調(diào)查問卷收集的數(shù)據(jù),我們可以分析問卷中不同指標(biāo)的分布、所占比例等情況,
也可以進(jìn)一步對(duì)問卷指標(biāo)進(jìn)行交叉分析,如性別不同,穿衣情況比例是不是也有所差異
等,然后在分析的基礎(chǔ)上得出結(jié)論。很多網(wǎng)絡(luò)調(diào)查平臺(tái)為用戶提供了一些分析功能。
1.2數(shù)據(jù)的計(jì)算
1、計(jì)算
"數(shù)據(jù)"在"運(yùn)算符”的操作下,按"規(guī)則”進(jìn)行的數(shù)據(jù)變換,如"3+3=6""3x2=6",這是簡
單計(jì)算中的算術(shù)運(yùn)算。
通過建立分析模型和設(shè)計(jì)有效的步驟、方法,利用自動(dòng)計(jì)算工具來進(jìn)行規(guī)律預(yù)測和
發(fā)現(xiàn),這是計(jì)算機(jī)領(lǐng)域的計(jì)算。
2、數(shù)據(jù)的排序
利用電子表格軟件排序功能可以依據(jù)關(guān)鍵字對(duì)表中的數(shù)據(jù)進(jìn)行升序或降序排列,從
而更清晰地了解各種分類信息。
3、數(shù)據(jù)的篩選
根據(jù)一定的規(guī)則成批篩選數(shù)據(jù),有助于我們發(fā)現(xiàn)某類特定數(shù)據(jù)蘊(yùn)含的信息。篩選會(huì)
依據(jù)條件顯示需要的數(shù)據(jù),其余的內(nèi)容都會(huì)被隱藏起來。
4、公式和函數(shù)
(1)利用公式計(jì)算
公式以"="開始,由運(yùn)算數(shù)和運(yùn)算符組成,運(yùn)篩數(shù)可以是常量、函數(shù)、單元格或單元格
區(qū)域。例如,在D3單元格中輸入公式“=A3+B3+C3”,就可以計(jì)算A3、B3、C3這三個(gè)單元
格中內(nèi)容的和。
(2)利用函數(shù)計(jì)算
例如,上面的例子可以用SUM函數(shù)完成,方法是在D3單元格中輸入“=SUM(A3:C3)”。
常用函數(shù)如下表
函數(shù)SUMAVERAGECOUNTMAXMIN
功能求和求平均值計(jì)數(shù)求最大值求最小值
5、分類匯總
若要進(jìn)行數(shù)據(jù)的分類匯總,首先要按照分類字段排序,以便將要進(jìn)行分類匯總的行
排列在一起,然后依據(jù)匯總方式計(jì)算選定匯總項(xiàng)。常用的匯總方式有求和、計(jì)數(shù)求平均
值、求最大值、求最小值、求乘積等。
第2單元編程計(jì)算
2.1計(jì)算機(jī)解決問題的過程
1.算法概念:解決問題的方法和步驟,
2.算法特征:有窮性、確切性、輸入項(xiàng)(0個(gè)或多個(gè)輸入),輸出項(xiàng)(算法一定要有
輸出)、可行性(或有效性)。
3.算法分析是對(duì)一個(gè)算法需要多少計(jì)算時(shí)間和存儲(chǔ)空間做定量的分析。
4.通常從正確性、易讀性、健壯性和高效性等4個(gè)方面評(píng)價(jià)算法;主要從時(shí)間復(fù)雜
度空間復(fù)雜度兩個(gè)方面來考慮。
3.2算法的表示
1.算法的常用描述方法:自然語言、流程圖和偽代碼。
用自然語言描述算法,通常是我們理解算法的第一步。
流程圖也稱程序框圖,它是算法的一種圖形化的表示方法,與用自然語言描述算法
相比,它更加形象、直觀,更容易理解。
常見的流程圖符號(hào)及其含義如下圖所示。
―"O
起止框輸入編出框處理框判斷框流程線連接符
圖2.1.1流程圖符號(hào)
?起止框:表示一個(gè)算法的開始和結(jié)束。
?輸人/輸出框:表示從外部輸人數(shù)據(jù)到計(jì)算機(jī)內(nèi)部或者從計(jì)算機(jī)內(nèi)部輸出數(shù)據(jù)到
計(jì)算機(jī)外部。
?處理框:表示操作的內(nèi)容。
?判斷框:表示判斷的條件。滿足條件,執(zhí)行標(biāo)識(shí)為"是"的路徑;不滿足條件,則執(zhí)
行標(biāo)識(shí)為"否"的路徑。
?流程線:指向算法運(yùn)行的方向。
2.程序設(shè)計(jì)語言的發(fā)展:從低級(jí)到高級(jí),分別是機(jī)器語言、匯編語言和高級(jí)語言。
機(jī)器語言:由二進(jìn)制的0、1代碼指令構(gòu)成,能被計(jì)算機(jī)直接識(shí)別。
匯編語言:是符號(hào)化的機(jī)器語言,仍屬于低級(jí)語言。
高級(jí)語言:更接近自然語言,程序可讀性強(qiáng),修改、維護(hù)方便。常見的高級(jí)語言有
Java.C/C++以及Python等。
3、三種基本結(jié)構(gòu)的流程圖
算法的三種基本結(jié)構(gòu)是順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
順序結(jié)構(gòu)是一種最簡單的基本結(jié)構(gòu),按照自上而下的先后順序依次執(zhí)行程序語句。
在如圖2.1.2所示的順序結(jié)構(gòu)示意圖中,先執(zhí)行處理框A,再執(zhí)行處理框B。
分支結(jié)構(gòu)也稱為選擇結(jié)構(gòu),是一種根據(jù)給定的條件進(jìn)行判斷的結(jié)構(gòu)。如圖2.1.2所
示的分支結(jié)構(gòu)中必定包括一個(gè)判斷框,若滿足條件則執(zhí)行處理框A,若不滿足條件則執(zhí)
行處理框B。
循環(huán)結(jié)構(gòu)是一種重復(fù)某一部分操作的結(jié)構(gòu)。如圖2.1.2所示的循環(huán)結(jié)構(gòu)中,若滿足
條件則執(zhí)行循環(huán)體(處理框A),若不滿足條件則跳出循環(huán),執(zhí)行循環(huán)結(jié)構(gòu)后面的代碼。
5、Python語言的開發(fā)環(huán)境
Python是一門解釋型的編程語言,而且是現(xiàn)在世界上最流行的編程語言之一。
6、程序設(shè)計(jì)語言的發(fā)展
除Python語言之外,還有很多其他程序設(shè)計(jì)語言。程序設(shè)計(jì)語言經(jīng)歷了從機(jī)器語言、
匯編語言到高級(jí)語言的發(fā)展過程。
機(jī)器語言由二進(jìn)制的0、1代碼指令構(gòu)成,能被計(jì)算機(jī)直接識(shí)別。但理解和記憶機(jī)器
語言非常困難,并且容易出錯(cuò),編程效率極低。
匯編語言是符號(hào)化的機(jī)器語言,采用英文助記符代替機(jī)器指令,比機(jī)器語言容易識(shí)
別和記憶,從而提高了程序的可讀性。但是匯編語言仍然是面向機(jī)器的語言,是為特定
的計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的,它要求軟件工程師對(duì)相應(yīng)的機(jī)器硬件非常熟悉,因而匯編語言屬
于低級(jí)語言。
高級(jí)語言更接近自然語言,并不特指某一個(gè)種語言,也不依賴于特定的計(jì)算機(jī)系統(tǒng),
因而更容易掌握和使用,通用性也更好。比較流行的高級(jí)語言有Java、C/C++以及本書
使用的Python等。用高級(jí)語言編寫的程序可讀性更強(qiáng),也便于修改、維護(hù)。
2.2做出判斷的分支
一、常量與變量
1.常量。
在程序運(yùn)行過程中值始終保持不變的量稱為常量。
所有的常數(shù)都是常量。常量可以是數(shù)字、字符申、布爾值、空值。
2.變量。
在程序運(yùn)行過程中值允許改變的量稱為變量。在Python中。變量的命名規(guī)則為:
(1)第一個(gè)字符必須是字母或下畫線,后面可以是字母、下畫線或數(shù)字;
(2)變量的名字是區(qū)分大小寫的;
(3)不能使用保留字.如int,floatfalse等。
3、運(yùn)算符
常用的算術(shù)運(yùn)算符如下表所示。
表2.2.1運(yùn)算符
運(yùn)算符+—*///%
功能加減乘寐除整除取模
常用的關(guān)系運(yùn)算符如下表所示。
大條詆算符
含義等于大于大于等于小于小于笄于
常用的邏輯運(yùn)算符有與(and)、或(or)、非(not)等。
4、表達(dá)式。
(1)算術(shù)表達(dá)式:由一個(gè)或多個(gè)操作數(shù)通過算術(shù)運(yùn)算符組合而成的式子。
(2)關(guān)系表達(dá)式:用關(guān)系運(yùn)算符連接起來的式子結(jié)果為布爾值。如分支語句中的條
件表達(dá)式,當(dāng)條件成立時(shí)值為真(True),不成立時(shí)值為假(False)。
(3)邏輯表達(dá)式:用邏輯運(yùn)算符連接起來的式子,結(jié)果為布爾值。當(dāng)邏輯表達(dá)式成
立時(shí)值為真(True),不成立時(shí)值為假(False)。如邏輯表達(dá)式"(2〈3)or(3〉4)"的值為
"True"。
5.賦值語句。
將賦值號(hào)右邊表達(dá)式的值賦給左邊變量的語句?;靖袷綖椋鹤兞?表達(dá)式。
2.輸人和輸出語句。
print():在屏幕上輸出數(shù)據(jù)。如有多個(gè)輸出項(xiàng),使用英文逗號(hào)分隔。end參數(shù)默認(rèn)值
是換行符\n,輸出后跳到下一行。我們可以換成其他字符串,如End="",則以空格為結(jié)尾。
input():從鍵盤輸入數(shù)據(jù),返回一個(gè)字符串(string)類型的值。
四、Python的數(shù)據(jù)類型
Python提供了整數(shù)(int)、浮點(diǎn)數(shù)(float)、字符串(str)、布爾(bool)、列表(list)
等常見的數(shù)據(jù)類型。
int():根據(jù)一個(gè)字符串或浮點(diǎn)數(shù)創(chuàng)建一個(gè)新的整數(shù)。
float():根據(jù)一個(gè)字符串或整數(shù)創(chuàng)建一個(gè)新的浮點(diǎn)數(shù)(小數(shù))o
str():根據(jù)一個(gè)數(shù)(也可以是任何其他類型)創(chuàng)建一個(gè)新的字符串。
3.分支語句。
當(dāng)程序中需要根據(jù)不同的條件判斷來決定程序執(zhí)行的走向時(shí),可以使用if分支語句
實(shí)現(xiàn),其基本格式如下。
單分支
if條件:
語句或語句組
雙分支
if條件:
語句或語句組A
else:
語句或語句組B
多分支結(jié)構(gòu)
if表達(dá)式1
語句塊1
elif表達(dá)式2
語句塊2
elif表達(dá)式n
語句塊n
else:
語句塊n+1
執(zhí)行流程:如果表達(dá)式1成立,執(zhí)行語句塊1;如果表達(dá)式2成立,執(zhí)行語句塊2;如
果表達(dá)式n成立,執(zhí)行語句塊n;如果以上語句都不成立,執(zhí)行語句語句塊n+1。
elif是endif的簡寫,else及其后的語句可以省略。
4.代碼的縮進(jìn)。
Python用縮進(jìn)(在相應(yīng)的代碼前加空格)來表示代碼之間的從屬關(guān)系,并且允許多層
嵌套。
2.3周而復(fù)始的循環(huán)
1、列表
列表在Python中的作用非常強(qiáng)大,它可以包含多個(gè)數(shù)據(jù)元素,同時(shí)它是一個(gè)有序的
集合。下面通過一個(gè)簡單的例子來熟悉列表的使用方法。
#創(chuàng)建列表,各元素用逗號(hào)隔開,放在方括號(hào)內(nèi)
#列表可以存儲(chǔ)混合類型的數(shù)據(jù)
object,"石榴香蕉","橙子","梨子"]
#修改列表第1個(gè)元素的值,注意列表索引號(hào)從。開始
object[0]="蘋果"
delobject[l]#刪除列表第2個(gè)元素
#在列表尾部添加一個(gè)數(shù)據(jù)元素"琳猴桃"
object.append("驕猴桃")
print(object)#輸出列表
運(yùn)行結(jié)果:
[‘蘋果香蕉橙子梨子嫌猴桃’]
我們可以通過對(duì)應(yīng)的方法對(duì)列表進(jìn)行操作:pop(0)方法可以刪除列表的首元素,
append方法可以在列表尾部添加一個(gè)數(shù)據(jù)元素。
2、計(jì)數(shù)循環(huán)
循環(huán)重復(fù)次數(shù)一定時(shí),我們通常稱為計(jì)數(shù)循環(huán)。在Python中,使用for語句來創(chuàng)建
這類循環(huán)。for語句的基本格式如下
for循環(huán)變量in列表:
語句或語句組
通常我們將一組重復(fù)執(zhí)行的語句稱為循環(huán)體。Python對(duì)循環(huán)體的定的格式是,循環(huán)
體必須相對(duì)關(guān)鍵詞for有縮進(jìn)。在for語句中,in后也可以是range。函數(shù),它可以生成
某個(gè)范圍內(nèi)的數(shù)字列表。例如:range(6)會(huì)生成[0,1,2,3,4,5]列表range。,6)就會(huì)生
成[1,2,3,4,5]列表,而range。,6,2)會(huì)生成[1,3,5]這樣的列表。
3、條件循環(huán)
條件循環(huán)一般用于循環(huán)次數(shù)未知的情況。只有當(dāng)循環(huán)條件成立時(shí),才執(zhí)行循環(huán)體。
在Python中,使用while語句來創(chuàng)建這類循環(huán)。while語句的基本格式如下。
while關(guān)系表達(dá)式:
語句或語句組
如:
s=0
whiles<=30:
s=s+10#循環(huán)體
print(s)#循環(huán)體
運(yùn)行結(jié)果:
10
20
30
40
在本例中,循環(huán)體是兩條語句,因此這兩條語句相對(duì)于關(guān)鍵詞while均要縮進(jìn)。程
序執(zhí)行過程是:變量s初值為0,判斷"s<=30”是否成立;如果成立則執(zhí)行循環(huán)體(s值增
加10,輸出s的值),不斷重復(fù)直到"s<=30"不成立,退出循環(huán)。
在此我們需要特別關(guān)注語句"s=s+10。在編程時(shí),形如"s=s+x"的語句可以起到累加
的作用,如果x=l,即$=$+1可以起到計(jì)數(shù)的作用。一般在使用累加器或計(jì)數(shù)器時(shí)將變量
賦初值為0。也有一類特殊的關(guān)系表達(dá)式,如數(shù)字0表示假,非0數(shù)字表示真。如果循環(huán)
是以"while1:"開頭,那么在不加干預(yù)的情況下,程序就會(huì)"不知疲倦”地一直執(zhí)行下去。
如果你想停止這個(gè)程序,按快捷鍵Ctrl+C即可。通常情況下,我們不會(huì)讓程序陷人這種
"死循環(huán)"的境地。
2.4可以復(fù)用的代碼
1、函數(shù)
函數(shù)可分為系統(tǒng)函數(shù)和用戶自定義函數(shù)兩種類型。系統(tǒng)函數(shù)即函數(shù)庫中的標(biāo)準(zhǔn)函
數(shù),是程序設(shè)計(jì)語言或操作系統(tǒng)提供給用戶的一系列已經(jīng)編制好的程序。在前面單元使
用過的print()和input()函數(shù)都是系統(tǒng)函數(shù)。
函數(shù)一般包括函數(shù)名、參數(shù)、返回值和函數(shù)體等四部分。其中,函數(shù)名和函數(shù)體是
必不可少的,參數(shù)和返回值可根據(jù)需要進(jìn)行定義。
定義函數(shù)的基本格式如下。
def函數(shù)名(參數(shù)):
#函數(shù)說明
語句或語句組
return返回值
參數(shù)是用來向函數(shù)傳遞值的,當(dāng)有多個(gè)參數(shù)時(shí),各個(gè)參數(shù)之間用逗號(hào)分隔開。函數(shù)
執(zhí)行完成后,由retum語句將表達(dá)式值返回給調(diào)用者,結(jié)束函數(shù)。函數(shù)的調(diào)用采用函數(shù)
名(參數(shù))的方式。
如:用函數(shù)來求n!。
deffactorial(n):
#求(1!
s=l
foriinrange(2,n+l):
s=s*i
returns
#調(diào)用factorial函數(shù)
total=factorial(4)
print(total)
上例中,程序執(zhí)行時(shí)由于def塊中的代碼不是主程序的一部分,因此會(huì)跳過該段代
碼,從主程序的第一行total=factorial(4)開始運(yùn)行。在遇到函數(shù)的調(diào)用語句
factorial(4)時(shí),轉(zhuǎn)到程序中的第一行代碼開始執(zhí)行。函數(shù)運(yùn)行時(shí),變量n會(huì)被賦值為4。
函數(shù)執(zhí)行完成返回變量s的值即24,然后回到語句total=factorial(4),將返回值賦
給變量total,最后輸出。
2、發(fā)布代碼
通過模塊發(fā)布代碼可以讓很多人受益于你的工作。
如:有6根火柴棒,列出所有能擺出的自然數(shù),要求火柴棒正好用完?;鸩駭?shù)字如
圖所示。
在D:創(chuàng)建一個(gè)文件夾mymodule,其中包含mymodule.py和setup,py兩個(gè)文件。
mymodule.py是一個(gè)模塊文件,其內(nèi)容就是match_num函數(shù)。
mymodule.py
defmatch_num(num):
f=[6,2,5,5,4,5,6,3,7,6]#。~9分別需要多少根火柴棒
ifnum==0:#將火柴棒總數(shù)變景賦初值
total=f[0]
else:
total=0
while(num>0):
x=num%10#Wnum除以10的余數(shù),即num的個(gè)位數(shù)
total=total+f[x]#所需火柴棒數(shù)累加
num=num//10#num整除10,即去掉num的個(gè)位數(shù)
returntotal#返回需要多少根火柴棒數(shù)
setup,py
fromdistutils.coreimportsetup
setup(
name='mymodule',#參數(shù)一定要與mymodule.py文件名相同
version=*1.0.0,,#版本號(hào)
#參數(shù)一定要^mymodule.py文件名相同
py_modules=['mymodule'],
author—ydI#作者
author_email='yd@mail.com',#作者郵箱
#代碼功能描述
description='計(jì)第一個(gè)數(shù)字需要多少根火柴棒,,
打開mymodule所在的目錄,構(gòu)建發(fā)布文件。最后將發(fā)布文件安裝到你的Python本地
副本中。安裝完成后,mymodule文件夾包含了如圖2.4.4所示的文件。如果你想讓全世
界都分享你的成果,你可以在互聯(lián)網(wǎng)上發(fā)布你的代碼。
)D:\mymodule
CJ
'myroodule.pysetuppyMANIFEST
圖2.4.4mymodule文件夾內(nèi)容
3、導(dǎo)入模塊并使用
已經(jīng)構(gòu)建發(fā)布的模塊必須先導(dǎo)人程序才能使用。導(dǎo)人時(shí)使用語句"import
mymodu1e”,調(diào)用模塊內(nèi)的函數(shù)時(shí)用“mymodule.match_num()”來實(shí)現(xiàn)。
究占下列程序,導(dǎo)入安裝發(fā)布好的模塊mymodule.實(shí)現(xiàn)火柴棒狂
數(shù)字問題
imDortlymodule/導(dǎo)入模塊
snum-6
print(“你可以拼;I;這些數(shù)字:")
for1inrange(112):
iffodule..tchnua(i)==snum:#例用模塊內(nèi)的match_num()函數(shù)
print(i)
第3單元認(rèn)識(shí)數(shù)據(jù)
3.1數(shù)據(jù)編碼
1、模擬信號(hào)與數(shù)字信號(hào)
按照取值特征,可以將信號(hào)分為模擬信號(hào)和數(shù)字信號(hào)。用傳感器直接獲得的信號(hào)-
般為模擬信號(hào),如聲音、溫度、壓強(qiáng)等。模擬信號(hào)的值是隨時(shí)間連續(xù)變化的,波形光滑。
模擬信號(hào)的值稱為模擬數(shù)據(jù)。
數(shù)字信號(hào)隨時(shí)間的變化是非連續(xù)的,數(shù)字信號(hào)可以由模擬信號(hào)轉(zhuǎn)換得來,數(shù)字信號(hào)
的值即數(shù)字?jǐn)?shù)據(jù),直接用計(jì)算機(jī)所能理解的二進(jìn)制表示,以方便計(jì)算機(jī)對(duì)其進(jìn)行處理。
2、聲音的數(shù)字化
我們不能把連續(xù)的音頻信號(hào)存放在計(jì)算機(jī)中,必須將模擬聲音數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)
據(jù)。將模擬聲音數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)的這一過程,稱為聲音的數(shù)字化。通常先對(duì)模擬聲
音信號(hào)按給定的時(shí)間間隔進(jìn)行采樣,然后對(duì)采樣數(shù)據(jù)進(jìn)行量化,最后將量化后的數(shù)據(jù)用
計(jì)算機(jī)能夠存儲(chǔ)和處理的二進(jìn)制數(shù)值表示,即編碼。
3、進(jìn)制與數(shù)制轉(zhuǎn)換
計(jì)算機(jī)外部的各種形式的數(shù)據(jù)經(jīng)過編碼后,都以二進(jìn)制數(shù)的形式存儲(chǔ)在計(jì)算機(jī)中。
二進(jìn)制數(shù)中只有0和1兩個(gè)數(shù)字符號(hào),其計(jì)數(shù)特點(diǎn)是"逢二進(jìn)一"即1+1=10。計(jì)算機(jī)中存儲(chǔ)
數(shù)據(jù)的最小單位是二進(jìn)制位,用比特(bit)表示,1比特能表示兩種(2')狀態(tài)(即0或1),2
比特可以表示00、01、10、11四種(爐)狀態(tài),3比特可表示八種(2?)狀態(tài)....計(jì)算機(jī)存儲(chǔ)
數(shù)據(jù)的基本單位是字節(jié)(Byte,簡寫為B),8比特構(gòu)成1字節(jié),1字節(jié)二進(jìn)制數(shù)可表示2*(256)
種狀態(tài)。
在二進(jìn)制數(shù)中,每一個(gè)數(shù)字在不同的位置上具有不同的權(quán)值,各位上的權(quán)值是基數(shù)
2的若干次嘉。比如二進(jìn)制數(shù)10010,5個(gè)位置上的權(quán)值從右往左可以表示為:
2\2\2\2\2"將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)時(shí),只要將該二進(jìn)制數(shù)的每個(gè)位置上的
數(shù)字與其對(duì)應(yīng)位置的權(quán)值相乘,然后求和即可。比如,
4:
10010,,,-iX2+0X2'+0X2+1x2'+Ox20=180把十進(jìn)制非負(fù)整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),可
使用短除法,即"除二取余"法。例如,把十進(jìn)制整數(shù)18轉(zhuǎn)換為二進(jìn)制數(shù)的過程如圖3.1.7
所示,結(jié)果為18“,,=1001。
2|18余數(shù)
290低位
241
220
2|I0
0I.高位
圖3.1.7十進(jìn)制整數(shù)轉(zhuǎn)為二進(jìn)制
由于二進(jìn)制數(shù)位數(shù)較多,書寫不便,故常改用十六進(jìn)制數(shù)表示。我國古代曾經(jīng)在重
量單位上使用過十六進(jìn)制,如規(guī)定16兩為1斤。十六進(jìn)制需要使用16個(gè)不同的基本數(shù)字,
除了阿拉伯?dāng)?shù)字0到9外,一般用字母A到F(或a~f)依次表示后續(xù)數(shù)字(相當(dāng)于十進(jìn)制數(shù)中
的10~15)。十六進(jìn)制的基本計(jì)數(shù)規(guī)則是“逢十六進(jìn)1",即F+l=10。一般地,十進(jìn)制非負(fù)
整數(shù)轉(zhuǎn)換成R進(jìn)制數(shù)(R22)采用"除R取余法”,把R進(jìn)制非負(fù)整數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)采用"按
權(quán)展開求和法”。
4.容量單位。
計(jì)算機(jī)中的信息是使用二進(jìn)制數(shù)(即0和D來表示的;計(jì)算機(jī)中存儲(chǔ)數(shù)據(jù)的最小單位
是二進(jìn)制位,用比特(Bit)表示;計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的基本單位為字節(jié)(Byte),8比特構(gòu)成
1個(gè)字節(jié)。
存儲(chǔ)容量單位還有KB、MB、GB、TB等,它們之間的轉(zhuǎn)換關(guān)系如下:
1Byte=8Bits
1KB=1024Bytes
1MB=1024KB
1GB=1024MB
1TB=1024GB
4、文本數(shù)據(jù)的編碼
計(jì)算機(jī)要處理文本,就必須將其轉(zhuǎn)換為計(jì)算機(jī)能識(shí)別的二進(jìn)制數(shù)才能處理,該過程
稱為文本數(shù)據(jù)編碼。常見的文本數(shù)據(jù)的編碼方案有ASCH碼和Unicode碼。
ASCII(AmerionStandedCodefor1normationletetange),即美國信息交換標(biāo)
準(zhǔn)碼.用7位(標(biāo)準(zhǔn)ASCII碼)或8位(擴(kuò)展ASCII碼)的二進(jìn)制數(shù)表示一個(gè)字符,共有128個(gè)字
符,每個(gè)字符用一個(gè)字節(jié)來存儲(chǔ),具體如下表所示。
ASCII碼(十進(jìn)制)表示的字符
0-31控制字符或通信專用字符(不可見)
32空格
48-57數(shù)字0~9
65-90大寫英文字母A-Z
97-122小寫英文字母ay
其他英文標(biāo)點(diǎn)符號(hào)、運(yùn)算符號(hào)、括號(hào)等
Uncode碼是一種編碼方案,它是為了解決傳統(tǒng)字符編碼方案的局限而產(chǎn)生的。它為
每種語言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語言、跨平臺(tái)進(jìn)行
文本轉(zhuǎn)換、處理的要求。Unicode字符集是全球共享的編碼字符集,其中包含74686個(gè)
簡繁漢字。Unicode通常用兩個(gè)字節(jié)表示一個(gè)字符,原有的英文編碼要從單字節(jié)變成雙
字節(jié),只需把高位字節(jié)全部填0即可。
漢字的編碼
(1)輸入碼(外碼):包括音碼、形碼、混合碼(五筆、全拼、智能ABC)等。
(2)機(jī)內(nèi)碼(內(nèi)碼):包括國標(biāo)碼(GB)、BIG5碼(繁體)等。
(3)輸出碼(字形碼):點(diǎn)陣表示,每一個(gè)點(diǎn)用一個(gè)二進(jìn)制位表示,值"0"表示沒有筆
形,值"1"表示有筆形。例如,16X16點(diǎn)陣表示一個(gè)漢字,這個(gè)漢字就需要16X16/8=32
字節(jié)來存故。
(4)漢字在計(jì)算機(jī)中的編碼方式如下圖所示。
鍵盤輸入_________編碼轉(zhuǎn)換________編輯與輸出
(輸入碼或外碼)"(機(jī)內(nèi)碼或內(nèi)碼)"(輸出碼或字形碼)
3.2數(shù)據(jù)與結(jié)構(gòu)
A、數(shù)據(jù)類型
數(shù)據(jù)類型用來定義一系列值及應(yīng)用于這些值的一系列操作。比如,在Python語言中,
有整數(shù)、浮點(diǎn)數(shù)、字符串、布爾等數(shù)據(jù)類型。整數(shù)類型的范圍兒乎僅受內(nèi)存限制,能夠
進(jìn)行加、減、乘、除等多種計(jì)算操作。
大多數(shù)程序設(shè)計(jì)語言都定義了兩類數(shù)據(jù)類型:簡單數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型。簡單
數(shù)據(jù)類型不能分解成更小的數(shù)據(jù)類型,復(fù)合數(shù)據(jù)類型則由簡單數(shù)據(jù)類型或者復(fù)合數(shù)據(jù)類
型組成。在Python語言中,整數(shù)、浮點(diǎn)數(shù)、字符串、布爾屬于簡單數(shù)據(jù)類型,列表、字
典等屬于復(fù)合數(shù)據(jù)類型。
訂單數(shù)據(jù)中的商品名稱可以抽象為字符串類型的數(shù)據(jù),是一個(gè)基本數(shù)據(jù)項(xiàng),商品數(shù)
量可以抽象為整數(shù)類型的數(shù)據(jù),也是一個(gè)基本數(shù)據(jù)項(xiàng)。
每個(gè)訂單數(shù)據(jù)包括商品名稱、單價(jià)、數(shù)量、金額、收貨地址等基本數(shù)據(jù)項(xiàng),所以訂
單數(shù)據(jù)需要抽象為復(fù)合數(shù)據(jù)類型。
201708012374*61814190XXXxxxx?swx
二.安也.又KC為千H2B.MV34.M
aMK*tE*:?6.00[“fll
□E3BB
(a)A網(wǎng)站商品的訂單數(shù)據(jù)
如圖3.2.1(a)所示的訂單數(shù)據(jù)用Python的列表存儲(chǔ),列表名稱為OrderList。
0rderList=["2374761814130XXX","語文:生命的,文學(xué)的,美學(xué)的“,34.66]列表中前
兩個(gè)數(shù)據(jù)是字符串類型,最后一項(xiàng)是浮點(diǎn)數(shù)類型。
B、數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是存在特定關(guān)系的數(shù)據(jù)元素的集合。在解決有些問題時(shí),一些相關(guān)聯(lián)的數(shù)
據(jù)將集中在一起,形成一個(gè)數(shù)據(jù)的集合,這種集合能夠單獨(dú)或作為一個(gè)整體被訪問和處
理。
C、線性數(shù)據(jù)結(jié)構(gòu)
線性數(shù)據(jù)結(jié)構(gòu)又稱為線性表。在線性數(shù)據(jù)結(jié)構(gòu)中,除首元素沒有前趨元素、尾元素
沒有后繼元素外,其他元素都只有一個(gè)前趨元素和一個(gè)后繼元素,如圖3.2.2所示。線
性表中數(shù)據(jù)元素之間是一對(duì)一的關(guān)系。
首元京尾元素
CWD……-0.0-……CWD
GGG
前趨元素當(dāng)前元素后繼元素
圖3.2.2線性數(shù)據(jù)結(jié)構(gòu)
D、隊(duì)列
隊(duì)列是一種有限制(先進(jìn)先出、FIFO)的線性結(jié)構(gòu)。隊(duì)列只允許在后端進(jìn)行數(shù)據(jù)元索
的添加操作(進(jìn)隊(duì)),在前端進(jìn)行數(shù)據(jù)元素的刪除操作(出隊(duì))。也就是說,新來的成員總
是加入隊(duì)尾,離開的成員總是隊(duì)列頭部的(不允許中途離隊(duì)),即當(dāng)前"最老的"成員離隊(duì)。
例如.超市里排隊(duì)付款的隊(duì)伍。
在Python語言中,對(duì)列表的操作通常有以下方法:pop(0)可以刪除列表的首元素;
append可以在列表尾部添加一個(gè)數(shù)據(jù)元素;insert可以用于在中間插入元素;count可
以統(tǒng)計(jì)元素出現(xiàn)的次數(shù);len可以獲取列表的長度。
數(shù)據(jù)結(jié)構(gòu)中的“棧"是一種先進(jìn)后出的線性結(jié)構(gòu)。例如,物流裝車時(shí),先裝的后出,
后裝車的先出。
E、樹結(jié)構(gòu)
樹結(jié)構(gòu)是一種具有層次關(guān)系的非線性結(jié)構(gòu)。樹結(jié)構(gòu)是種具有層次美系的非線性結(jié)
構(gòu)。在樹結(jié)構(gòu)中,每一個(gè)節(jié)點(diǎn)只有一個(gè)前趨節(jié)點(diǎn),稱為父節(jié)點(diǎn)。沒有前趨節(jié)點(diǎn)只有一個(gè),
稱為樹的根節(jié)點(diǎn)。每一個(gè)節(jié)點(diǎn)可以有多個(gè)后繼節(jié)點(diǎn),它們稱為該節(jié)點(diǎn)的子節(jié)點(diǎn)。沒有后
繼的節(jié)點(diǎn)稱為葉子節(jié)點(diǎn)。
在圖3.2.3中,節(jié)點(diǎn)A為根節(jié)點(diǎn),B、C、D為A的子樹的根節(jié)點(diǎn)。同理,E、F、G是B的
子樹的根節(jié)點(diǎn),B是E、F、G的父節(jié)點(diǎn)。在樹結(jié)構(gòu)中,數(shù)據(jù)元素之間是一對(duì)多的關(guān)系。
圖3.2.4城市物流配送送路
例:快遞到達(dá)目的地城市后,物流圖的結(jié)構(gòu)呈樹狀。
F、圖結(jié)構(gòu)
圖結(jié)構(gòu)是由一組節(jié)點(diǎn)(稱為頂點(diǎn))和一組節(jié)點(diǎn)間的連線(稱為邊或弧)構(gòu)成的一種數(shù)
據(jù)結(jié)構(gòu)。圖結(jié)構(gòu)中的每個(gè)頂點(diǎn)都可以與其他頂點(diǎn)有邊相連,圖結(jié)構(gòu)中數(shù)據(jù)元素之間是多
對(duì)多的關(guān)系。圖3.2.7也是一個(gè)圖結(jié)構(gòu),其中,標(biāo)為"1"的頂點(diǎn)與兩條邊相連,頂點(diǎn)"4"與
在物流網(wǎng)絡(luò)中,分撥中心、配送中心、貨物需求點(diǎn)等可以抽象為圖的頂點(diǎn),城市道
路、各級(jí)鐵路等可以抽象為圖的邊,如城市以及城市之間的運(yùn)輸?shù)缆肪褪菆D結(jié)構(gòu)。利用
圖結(jié)構(gòu),我們還可以解決物流中的許多問題,如道路網(wǎng)絡(luò)分析、車輛運(yùn)營安排等。
隊(duì)列、樹結(jié)構(gòu)和圖結(jié)構(gòu)的關(guān)系如下表所示。、
結(jié)構(gòu)類型數(shù)型(節(jié)點(diǎn))之間的關(guān)系生活中相應(yīng)結(jié)構(gòu)應(yīng)用舉例
隊(duì)列(線上車、過馬路、付款時(shí)排的隊(duì)、醫(yī)院就診時(shí)電子牌上
一對(duì)一
性)的就診隊(duì)列
行政區(qū)劃、書的目錄結(jié)構(gòu)、磁道盤文件存儲(chǔ)結(jié)構(gòu)、注
樹結(jié)構(gòu)一對(duì)多
冊表
圖結(jié)構(gòu)多對(duì)多全國骯運(yùn)圖、鐵路運(yùn)輸圖、高速公路圖
3.3數(shù)據(jù)與系統(tǒng)
1>圖形用戶界面
圖形用戶界面(GraphicalUserInterface,GUI)又稱圖形用戶接口,是指采用圖
形方式顯示的計(jì)算機(jī)操作用戶界面。在Python語言中,tkinter是實(shí)現(xiàn)圖形用戶界面的
模塊,可以快速創(chuàng)建GUI應(yīng)用程序。我們需要先導(dǎo)入模塊,上面所示的代碼用"from
tkinterimport*"導(dǎo)入tkinter模塊,然后就可以運(yùn)用相應(yīng)代碼創(chuàng)建矩形容器(Frame)、
文本框(Entry)、命令按鈕(Button)、文本標(biāo)簽(Label)等交互對(duì)象。
在現(xiàn)代程序設(shè)計(jì)中,我們用"對(duì)象"建立計(jì)算機(jī)世界的實(shí)體與客觀世界的實(shí)體相一致
的映射關(guān)系,問題的解決方案可以用一些彼此交互的對(duì)象來形象化表示。比如在“旅行
線路"例子中,我們利用Python提供的按鈕類創(chuàng)建按鈕對(duì)象,通過單擊按鈕的交互方式
完成代碼的執(zhí)行過程。示例:將以下旅行線路"桂林市區(qū)一龍脊梯田一漓江漂流一騎行
之旅一遇龍河漂流。"添加至"旅行線路.txt”文本中
fromtkinterimport*
root=Tk()#創(chuàng)建一個(gè)窗口
root.title("添加線路")#設(shè)置窗口標(biāo)題
root.geometryC600x100*)#設(shè)置窗口大小
root.resizable(030)★禁止調(diào)整窗口大小
var=StringVar()#定義StnngVar。類型
defintomap():*Birtton按鈕激發(fā)困數(shù)
c=open("旅行線路.txt"'a+')衣以追加模式打開文件
c.write(var.get()+“\n")律在文件末尾添加十ext里的內(nèi)容
c.close*關(guān)閉文件
#在窗口上建一個(gè)文本標(biāo)筌.
Label(root,text=’清輸入線路',font=CArial,,10)).pack()
#在窗口上建一個(gè)文本框
Entry(root,textvariab1e=var,width=550).pack()
#在囪口上建一個(gè)But'gn按包_
Button(root,taxt=”添力口線路"command=intomap,relief='vsolid',,width=10).pack()
root,mainloop()
在面向過程的程序設(shè)計(jì)中,我們關(guān)注的是各種類型的數(shù)據(jù)及其操作;而在面向?qū)ο?/p>
的程序設(shè)計(jì)中,我們將數(shù)據(jù)及其操作隱藏細(xì)節(jié)后封裝為類,函數(shù)調(diào)用式的計(jì)算演變?yōu)閷?duì)
象之間的交互。
2、文件
在解決問題的過程中,我們可以根據(jù)需要將數(shù)據(jù)組織在一起形成隊(duì)列、樹或圖等
邏輯結(jié)構(gòu),這時(shí)的數(shù)據(jù)一般存儲(chǔ)在內(nèi)存中,當(dāng)退出程序時(shí),相關(guān)數(shù)據(jù)也將丟失。如果需
要更持久地存儲(chǔ)數(shù)據(jù),我們可以將數(shù)據(jù)以文件的形式存儲(chǔ)到外存儲(chǔ)設(shè)備中。"線路數(shù)據(jù)"
是用文件的形式存儲(chǔ)在計(jì)算機(jī)的磁盤里的。
文件是存儲(chǔ)在外存儲(chǔ)設(shè)備中的相關(guān)數(shù)據(jù)的集合。
3、Python讀寫文本文件
在Python語言中,用open函數(shù)把外存儲(chǔ)器里的文本文件(.txt)打開,用write方法
將內(nèi)存中的數(shù)據(jù)存儲(chǔ)到外存儲(chǔ)器的文件中,文件操作結(jié)束時(shí)一定要用close方法關(guān)閉文
件。
4、數(shù)據(jù)庫
在日常生活中,我們通常用電子表格軟件來管理數(shù)據(jù)。但電子表格軟件中的表是有
行數(shù)限制的,而且在多人共享和聯(lián)表查詢方面也存在不足,因此當(dāng)數(shù)據(jù)量比較大,且管
理比較復(fù)雜時(shí)便需要采用更科學(xué)的數(shù)據(jù)管理方法。數(shù)據(jù)庫是以一定的組織方式存儲(chǔ)在計(jì)
算機(jī)中的相互關(guān)聯(lián)的數(shù)據(jù)集合。
5、數(shù)據(jù)表
在數(shù)據(jù)庫中,數(shù)據(jù)是以二維表的形式組織存儲(chǔ)的稱為表。表中的一列稱為一個(gè)字段,
一個(gè)字段對(duì)應(yīng)車次實(shí)體的一個(gè)屬性,每個(gè)字段都有一個(gè)名字,稱為字段名,如車次編號(hào)、
出發(fā)站等。表中的一行稱為一條記錄,一條記錄對(duì)應(yīng)于一個(gè)車次實(shí)體,保存有關(guān)實(shí)體屬
性的數(shù)據(jù)??梢晕ㄒ淮_定一條記錄的字段稱為主鍵,如車次編號(hào)。若干個(gè)車次數(shù)據(jù)的集
合就組成了"武漢至成都車次"表。我們可以對(duì)數(shù)據(jù)表進(jìn)行插入、刪除、更新等操作。
需要指出的是,數(shù)據(jù)庫中的表與表之間也可以是相互關(guān)聯(lián)的。為不同表中的兩個(gè)字
段建立關(guān)聯(lián)后,兩表中的記錄就可以通過這個(gè)關(guān)系聯(lián)系在一起。比如換乘站既是前段車
程的到達(dá)站,又是下段車程的出發(fā)站,可以通過這一點(diǎn)建立關(guān)系。
6、數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,DBMS),是數(shù)據(jù)庫技術(shù)中-一種用來
科學(xué)地組織和存儲(chǔ)數(shù)據(jù)、高效地獲取和維護(hù)數(shù)據(jù)的系統(tǒng)軟件。簡言之,數(shù)據(jù)庫管理系統(tǒng)
是定義、創(chuàng)建、維護(hù)數(shù)據(jù)庫的一種工具,它允許用戶管理和控制數(shù)據(jù)庫中的數(shù)據(jù)。常見
的數(shù)據(jù)庫管理系統(tǒng)有Sybase、Oracle、MySQL、Access等。
4.數(shù)據(jù)庫管理員。
數(shù)據(jù)庫的建立、使用和維護(hù)等工作僅靠數(shù)據(jù)庫管理系統(tǒng)還遠(yuǎn)遠(yuǎn)不夠,還要有專門的
人員來完成,這些人被稱為數(shù)據(jù)庫管理員。數(shù)據(jù)庫管理員可以通過數(shù)據(jù)庫管理系統(tǒng)(DBMS)
對(duì)數(shù)據(jù)庫進(jìn)行操作和維護(hù)。
5.數(shù)據(jù)庫系統(tǒng)。
數(shù)據(jù)庫系統(tǒng)是由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(及其應(yīng)用開發(fā)工具)、數(shù)據(jù)庫應(yīng)用系統(tǒng)、
數(shù)據(jù)庫管理員和用戶組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng)。
數(shù)據(jù)庫系統(tǒng)包括硬件平臺(tái)系統(tǒng)和軟件平臺(tái)系統(tǒng)。如數(shù)據(jù)庫主要用于存儲(chǔ)數(shù)據(jù),需要
足夠大的內(nèi)存儲(chǔ)器和外存儲(chǔ)器等硬件平臺(tái)支持;軟件平臺(tái)系統(tǒng)除了操作系統(tǒng)(OS)和數(shù)據(jù)
庫管理系統(tǒng)(DBMS)外,還包括支持特定應(yīng)用環(huán)境開發(fā)的軟件工具以及開發(fā)完成的數(shù)據(jù)庫
應(yīng)用系統(tǒng)。如12306網(wǎng)站就是一個(gè)大型的數(shù)據(jù)庫應(yīng)用系統(tǒng),各類財(cái)務(wù)管理系統(tǒng)、人事管
理系統(tǒng)、圖書管理系統(tǒng)等軟件也都屬于數(shù)據(jù)庫應(yīng)用系統(tǒng)。
數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計(jì)一般包括系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)?、代碼設(shè)計(jì)、數(shù)據(jù)庫(文件)設(shè)計(jì)、
輸人/輸出(I/O)設(shè)計(jì)、模塊功能與處理過程設(shè)計(jì)等步驟。
利用Python訪問Access數(shù)據(jù)庫一般可分為以下5個(gè)步驟:
(1)建立與數(shù)據(jù)庫的連接;
(2)根據(jù)需要產(chǎn)生記錄集;
(3)訪問記錄集,處理數(shù)據(jù);
(4)根據(jù)需要把處理好的數(shù)據(jù)更新到數(shù)據(jù)庫中;
(5)斷開與數(shù)據(jù)庫的連接。
3.4加密與解密
1、密碼:密碼是指用來核對(duì)用戶ID以驗(yàn)證用戶就是本人的一組字符。
2、創(chuàng)建安全密碼的一般技巧
使用長度不少于8個(gè)字符的密碼。密碼長度越長越不容易被破解。
在可能的情況下,盡量使用字母、數(shù)字和特殊字符(如$、#)相結(jié)合的密碼。
不要使用電話號(hào)碼、身份證號(hào)碼或生日等信息作為密碼。
不要使用整個(gè)用戶ID或用戶ID的一部分作為密碼。
不要使用字典中能找到的詞語作為密碼,即使是字母次序顛倒過來的常用詞語也不
可以。
?加密的概念
加密:即將原始信息(數(shù)據(jù))隱匿起來,使之在缺少特殊信息(數(shù)據(jù))時(shí)不可讀。
明文:加密前的原始信息(或數(shù)據(jù))稱為明文。
密文:加密后的信息(或數(shù)據(jù))稱為密文。
解密:將密文還原成原文的過程稱為解密(或解碼)。
?加法密碼
加法密碼又被稱為移位密碼。在加法密碼算法中,明文中的所有字母都在字母表上
向后(或向前)按照一個(gè)固定數(shù)目進(jìn)行偏移后被替換成密文。例如,當(dāng)偏移量是3的時(shí)候,
所有的字母A將被替換成D,B變成E,以此類推,X將變成A,Y變成B,Z變成C。
愷撒密碼作為一種最為古老的對(duì)稱加密體制,在古羅馬的時(shí)候已經(jīng)很流行,它是加
法密碼的典型代表。
用Python語言實(shí)現(xiàn)加密算法時(shí),明文和密文都被抽象為字符串類型的數(shù)據(jù),Python
中的字符串由一串字符組成,用引號(hào)引起來表示,比如"abCEd"。類似于列表的操作,
我們可以指向或操作字符串中的某一個(gè)字符,比如c[0]表示字符串中的第一個(gè)字符。我
們還可以用Python系統(tǒng)函數(shù)對(duì)數(shù)據(jù)進(jìn)行特定的操作,len函數(shù)可以獲取字符串中字符的
個(gè)數(shù),0rd函數(shù)可以將字符類型的參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的整數(shù)值,chr函數(shù)可以將整數(shù)類型的
參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的字符。
了解密碼安全與加密、解密的技術(shù)能夠幫助我們保護(hù)個(gè)人隱私。同時(shí),我們也要從
自己做起,遵守相關(guān)法律和必要的道德規(guī)范,共同維護(hù)健康、良好的數(shù)據(jù)環(huán)境。
第4單元計(jì)算與問題解決
4.1算法及其特征
1、算法的重要特征
有窮性。算法必須能在執(zhí)行有限個(gè)步驟之后終止。
確切性。算法中的每一次運(yùn)算都有明確的定義,具有無二義性,并且可以通過計(jì)算
得到唯一的結(jié)果。
輸人項(xiàng)。一個(gè)算法有0個(gè)或多個(gè)輸人,以刻畫運(yùn)算對(duì)象的初始情況,所謂0個(gè)輸人是
指算法本身給出了初始條件。
輸出項(xiàng)。算法一定要有輸出。任何算法都不能"無功而返"可行性。算法中執(zhí)行的任
何計(jì)算都可以在有限時(shí)間內(nèi)完成(也稱為有效性)。算法中的運(yùn)算都必須是可以實(shí)現(xiàn)的。
從某種意義上說,算法也是一種數(shù)學(xué)模型。一般而言,問題求解的第一步是數(shù)學(xué)建
模。用數(shù)學(xué)語言描述實(shí)際現(xiàn)象,將現(xiàn)實(shí)世界的問題抽象成數(shù)學(xué)模型,就可能發(fā)現(xiàn)問題的
本質(zhì)并判定其能否求解,繼而找到求解該問題的方法和算法。
2、枚舉
我們常利用計(jì)算機(jī)運(yùn)算速度快、精確度高的特點(diǎn)解決實(shí)際問題。在設(shè)計(jì)算法時(shí),最
簡單的方法就是"直譯"我們的思維過程。有一種算法是把所有可能的答案一一列舉,合
適就保留,不合適就丟棄。這種方法稱作"枚舉〃或"窮舉"
4.2數(shù)值計(jì)算
1、numpy模塊簡介
numpy是一個(gè)科學(xué)計(jì)算包,其中包含很多數(shù)學(xué)函數(shù),如三角函數(shù)、矩陣計(jì)算方法等。
通過該模塊中的arange函數(shù)可以創(chuàng)建一個(gè)等差數(shù)列。如在0~2n之間每隔0.01取個(gè)值,
則可以用arange(0,2*numpy.pi,0.01)來表示,其中numpy.pi表示n。下列代碼可以產(chǎn)
生sin(x)的若干個(gè)關(guān)鍵點(diǎn)
#加載numpy模塊并取一個(gè)簡潔的別名為np.便于后續(xù)引用
importnumpyasnp
#xdE0到2n之間,每隔取一個(gè)點(diǎn)
x=np.arange(0,2*np.pi0.01)
y=np.sin(x)#通過解析式計(jì)算列表x對(duì)應(yīng)的列表y的值
2、matplotlib模塊簡介
matplotlib模塊是Python中最出色的繪圖庫,功能很完善。調(diào)用
matplotlib.pyplot時(shí),坐標(biāo)系可以根據(jù)數(shù)值范圍自動(dòng)生成。
matplotlib的繪圖原理很簡單,利用plot畫線函數(shù)就可以在直角平面內(nèi)輕松地將
(x,y)坐標(biāo)點(diǎn)對(duì)連接成平滑曲線。例如:在上述代碼的適當(dāng)位置增加下列語句,就可以
將剛才生成的關(guān)鍵點(diǎn)連接起來。
#)j|l^matplotlib.pyplot并取別名為pit
importmatplotlib.pyplotaspit
plt.plot(x,y)#將點(diǎn)對(duì)連線
pit.show()#將繪制的圖像窗口顯示出來
參考上述代碼,讓我們一起來完善以下Python程序,嘗試?yán)L出"sin(x)"“sin(-x)"
和"sin(2x)/2”的圖像。
importnumpyasnp#加載numpy模塊并取名為np
importmatplotlib.pyplotpit#加載matplotlib.pyplot并取名為pit
x=np.arange(0,2*np.pi,0.01)極在。到2匹之間,每隰0.01取一個(gè)點(diǎn)
yl=np.sin(x)#求sin(x)對(duì)應(yīng)的值
y2=np.sin(-x)#求5正(-:<)對(duì)應(yīng)的y2值
y3=np.sin(2*x)/2#求sin(2x)/2對(duì)應(yīng)的y3值
pit.plot(x,yl)#繪制sin(x)圖像
pit.plot(x,y2)#繪制sin(-x)圖像
pit.plot(x,y3)#繪制sin(2*x),2圖像
pit.titleCsin(x),)#設(shè)置圖融標(biāo)題
plt.xlabelCX')殳置X軸標(biāo)題
plt.ylabelCY')*設(shè)置Y軸標(biāo)題
pit.show()#將繪制的函數(shù)圖像窗口顯示出來
input("運(yùn)行完畢,清按回車鍵退出...")
斐波那契在《計(jì)算之書》中提出了一個(gè)有趣的兔子問題:假設(shè)一對(duì)兔子每個(gè)月可以
生一對(duì)小兔子,一對(duì)兔子出生后第2個(gè)月就開始生小兔子。則一對(duì)兔子一年內(nèi)能繁殖成
多少對(duì)?10年呢?
第1個(gè)月和第2個(gè)月的兔子對(duì)數(shù)之和為第3個(gè)月的兔子對(duì)數(shù),第2個(gè)月和第3個(gè)月的兔
子對(duì)數(shù)之和為第4個(gè)月的兔子對(duì)數(shù)...,每個(gè)月的兔子對(duì)數(shù)是前兩個(gè)月的兔子對(duì)數(shù)之和,
又同時(shí)作為下一個(gè)月兔子對(duì)數(shù)的加數(shù)。這種重復(fù)反饋的過程稱為迭代。
迭代法也稱輾轉(zhuǎn)法,是用計(jì)算機(jī)解決問題的一種基本方法。迭代通常是為了接近并
到達(dá)所需的目標(biāo)或結(jié)果。每一次對(duì)過程的重復(fù)被稱為一次“迭代",而每一次迭代得到的
結(jié)果會(huì)被用來作為下一次迭代的初始值。
f1
圖4.2.6計(jì)算的迭代示意圖
由于在迭代系列中的每個(gè)月份兔子對(duì)數(shù)只跟前兩個(gè)月有關(guān),因此在編寫程序時(shí),只
需兩個(gè)變量fl和f2分別記錄上上月和上月的數(shù)據(jù)。
deffib(n):
#利用迭代求斐波那契數(shù)列的第n個(gè)數(shù)
f2=f1=1
foriinrange(3,n+l):
fl,f2=f2,fl+f2
returnf2
n=int(input「輸入需要:計(jì)算的月份數(shù):,))
print('兔子總對(duì)數(shù)為:',fib(n))
程序運(yùn)行結(jié)果如下:
輸入需要計(jì)算的月份數(shù):74
兔子總對(duì)數(shù)為:1304969544928657
"fl,f2=f2,fl+f2”中右邊的值全是這個(gè)式子計(jì)算以前的初始值,可折為下面代碼
deffib(n):
#迭代求Fibonacci數(shù)列
f3=f2=fl=l
foriinrange(3,n+1):
f3=fl+f2
fl=f2
f2=f3
returnf2
n=int(input('輸入需要計(jì)算的月份數(shù):‘))
print(兔子總討數(shù)為:*jfib(n))
工nputC運(yùn)行完畢,清按回車鍵退出???")
利用迭代算法解決問題,有三個(gè)關(guān)鍵步驟:(1)確定迭代變量,如上例中的的fl、
f2;(2)建立迭代關(guān)系式;(3)對(duì)迭代過程進(jìn)行控制,這是編寫迭代程序必須考慮的問
題,不能讓迭代過程無休止地重復(fù)執(zhí)行下去。
現(xiàn)代自然科學(xué)和工程電子技術(shù)的研究過程中,都離不開大規(guī)模的數(shù)學(xué)計(jì)算問題。例
如:數(shù)學(xué)類課程中的線性方程求解、微分方程求解、概率統(tǒng)計(jì)等,實(shí)用性和實(shí)驗(yàn)性技術(shù)
應(yīng)用中的模擬核試驗(yàn)、油田開發(fā)、飛機(jī)設(shè)計(jì)等。
4.3非數(shù)值計(jì)算
1、分治策略
分治的設(shè)計(jì)思想,是將一個(gè)難以直接解決的大問題,分割成一些較小的同類問題,
各個(gè)擊破,最終達(dá)到解決問題的目的。二分查找實(shí)際上就是分治策略的i種典型運(yùn)用。
2、二分查找.
二分查找又叫折半查找,該方法主要將數(shù)列有序排列,采用跳躍式的方式查找數(shù)據(jù)。
以遞增數(shù)列為例,先以中點(diǎn)位置的元素作為比較對(duì)象,如果要找的元素值小于該中點(diǎn)元
素,則將待查序列縮小為左半部分,否則為右半部分。每一次比較后都可以將查找區(qū)間
縮小一半。
二分查找是一種高效的查找方法。它可以明顯減少比較次數(shù),提高查找效率。在一
個(gè)有n個(gè)元素的有序序列中,利用二分查找大約需要kg/次。但是,二分法查找的前
提條件是被查找的數(shù)據(jù)必須是有序的。
例程:假設(shè)一本字典大約1000頁,目標(biāo)信息在第328頁。翻頁過程,看誰翻的次數(shù)
最少。
在翻頁過程中借助兩個(gè)書簽,劃定目標(biāo)所屬范圍,然后翻到兩個(gè)書簽的中間位置。
每次目標(biāo)區(qū)域都更新為原來的"二分之一",當(dāng)數(shù)據(jù)范圍縮小到只有1個(gè)數(shù)的時(shí)候肯定能
得到問題的解。1000以內(nèi)的頁碼,最多翻10次肯定能找到解。
(input(”請輸入要直技的1000以內(nèi)的整數(shù):
step=0#記錄查找次數(shù)
flag1=1#目標(biāo)區(qū)域左邊界
flag2=1000#目標(biāo)區(qū)域右邊界
while(flag1<=flag2):#區(qū)間數(shù)據(jù)范困小于1則結(jié)束循環(huán)
mid二(flagl+flag2)//2*中間值
step=step+1#查找次數(shù)加1
ifmid>x:
flag2=mid-l#右邊界前移
elifmid<x:
flagl=mid+l*左邊界后移
else:
break
print('查找次數(shù)為:\step)
input(“運(yùn)行完畢,清軟回車鍵退出??.")
2,遞歸
遞歸是計(jì)算科學(xué)領(lǐng)域中一種重要的計(jì)算思維模式。它既是一種抽象表達(dá)的手段,也
是一種問題求解的重要方法。
直接或間接地調(diào)用自身的方法稱為遞歸??梢詫⑦f歸簡單類比為具有自相似性重復(fù)
的事物。圖4.3.3所示就是遞歸的一種形象表示。
圖4.3.3遞歸圖像
在數(shù)學(xué)與計(jì)算機(jī)領(lǐng)域中,遞歸函數(shù)是指用函數(shù)自身來定義該函數(shù)的方法。如著名的
斐波那契數(shù)列"1,1,2,3,5,8,13,可以遞歸定義為
C("=1或"=2)
尸(〃)={
[尸(〃-1)+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- CY7-Dextran-MW-4000-生命科學(xué)試劑-MCE
- Chlorthalidone-Impurity-G-Chlorthalidone-EP-Impurity-G-生命科學(xué)試劑-MCE
- 青海柴達(dá)木職業(yè)技術(shù)學(xué)院《科技論文撰寫》2023-2024學(xué)年第一學(xué)期期末試卷
- 視頻剪輯動(dòng)畫效果設(shè)計(jì)與運(yùn)用技巧
- 圖文搭配與排版技巧
- 中國古代文學(xué)名著的跨文化傳播
- 青島農(nóng)業(yè)大學(xué)海都學(xué)院《管理學(xué)全英》2023-2024學(xué)年第一學(xué)期期末試卷
- 青島農(nóng)業(yè)大學(xué)《生物體的結(jié)構(gòu)與功能及生物多樣性》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國古代地質(zhì)學(xué)史及成就介紹
- 智能制造成功案例分享
- 人教版(2024新版)七年級(jí)上冊生物期末復(fù)習(xí)課件
- 2021年四川省眉山市公開招聘警務(wù)輔助人員(輔警)筆試專項(xiàng)訓(xùn)練題試卷(2)含答案
- 2024新版(北京版)三年級(jí)英語上冊單詞帶音標(biāo)
- 2023醫(yī)療質(zhì)量安全核心制度要點(diǎn)釋義(第二版)對(duì)比版
- 四川宜賓五糧液股份有限公司招聘筆試題庫2024
- “非遺”之首-昆曲經(jīng)典藝術(shù)欣賞智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 中藥貼敷療法
- (高清版)JTG D50-2017 公路瀝青路面設(shè)計(jì)規(guī)范
- MOOC 基礎(chǔ)手語-南京特殊教育師范學(xué)院 中國大學(xué)慕課答案
- 2023年秋季國家開放大學(xué)-00721-機(jī)械制圖期末考試題帶答案
- 外科學(xué)(1)智慧樹知到課后章節(jié)答案2023年下溫州醫(yī)科大學(xué)
評(píng)論
0/150
提交評(píng)論