国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python做微信小程序開發(fā),python怎么開發(fā)小程序

這篇具有很好參考價(jià)值的文章主要介紹了python做微信小程序開發(fā),python怎么開發(fā)小程序。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

大家好,小編來為大家解答以下問題,python做微信小程序開發(fā),python怎么開發(fā)小程序,今天讓我們一起來看看吧!

python做微信小程序開發(fā),python怎么開發(fā)小程序,notepad++,人工智能

大家好,小編為大家解答用python編寫一個(gè)小程序的問題。很多人還不知道如何用python做小軟件,現(xiàn)在讓我們一起來看看吧!

python做微信小程序開發(fā),python怎么開發(fā)小程序,notepad++,人工智能

大家好,小編來為大家解答以下問題,如何用python做軟件開發(fā),用python開發(fā)軟件的步驟,今天讓我們一起來看看吧!

python做微信小程序開發(fā),python怎么開發(fā)小程序,notepad++,人工智能

參與文末每日話題討論,贈(zèng)送異步新書

異步圖書君

學(xué)習(xí)目標(biāo)

知道有序的軟件開發(fā)過程的步驟python弧形7段數(shù)碼管繪制。

了解遵循輸入、處理、輸出(IPO)模式的程序,并能夠以簡單的方式修改它們神碼ai偽原創(chuàng)不會(huì)c語言直接學(xué)python。

了解構(gòu)成有效Python標(biāo)識符和表達(dá)式的規(guī)則。

能夠理解和編寫Python語句,將信息輸出到屏幕,為變量賦值,獲取通過鍵盤輸入的信息,并執(zhí)行計(jì)數(shù)循環(huán)。

軟件開發(fā)過程

運(yùn)行已經(jīng)編寫的程序很容易。較難的部分實(shí)際上是先得到一個(gè)程序。計(jì)算機(jī)是非常實(shí)在的,必須告訴它們要做什么,直至最后的細(xì)節(jié)。編寫大型程序是一項(xiàng)艱巨的挑戰(zhàn)。如果沒有系統(tǒng)的方法,幾乎是不可能的。

創(chuàng)建程序的過程通常被分成幾個(gè)階段,依據(jù)是每個(gè)階段中產(chǎn)生的信息。簡而言之,你應(yīng)該做以下工作。

分析問題確定要解決的問題是什么。嘗試盡可能多地了解它。除非真的知道問題是什么,否則就不能開始解決它。

確定規(guī)格說明準(zhǔn)確描述程序?qū)⒆鍪裁础4藭r(shí),你不必?fù)?dān)心程序"怎么做”,而是要確定它"做什么”。對于簡單程序,這包括仔細(xì)描述程序的輸入和輸出是什么以及它們的相互關(guān)系。

創(chuàng)建設(shè)計(jì)規(guī)劃程序的總體結(jié)構(gòu)。這是描述程序怎么做的地方。主要任務(wù)是設(shè)計(jì)算法來滿足規(guī)格說明。

實(shí)現(xiàn)設(shè)計(jì)將設(shè)計(jì)翻譯成計(jì)算機(jī)語言并放入計(jì)算機(jī)。在本書中,我們將算法實(shí)現(xiàn)為Python程序。

測試/調(diào)試程序試用你的程序,看看它是否按預(yù)期工作。如果有任何錯(cuò)誤(通常稱為"缺陷”),那么你應(yīng)該回去修復(fù)它們。定位和修復(fù)錯(cuò)誤的過程稱為"調(diào)試”程序。在調(diào)試階段,你的目標(biāo)是找到錯(cuò)誤,所以應(yīng)該嘗試你能想到的"打破”程序的一切可能。記住這句老格言:"沒有什么能防住人犯傻,因?yàn)樯底犹斆髁??!?/p>

維護(hù)程序繼續(xù)根據(jù)用戶的需求開發(fā)該程序。大多數(shù)程序從來沒有真正完成,它們在多年的使用中不斷演進(jìn)。

示例程序:溫度轉(zhuǎn)換器

讓我們通過一個(gè)真實(shí)世界的簡單例子,來體驗(yàn)軟件開發(fā)過程的步驟,其中涉及一個(gè)虛構(gòu)的計(jì)算機(jī)科學(xué)學(xué)生Susan Computewell。

Susan正在德國學(xué)習(xí)一年。她對語言沒有任何問題,因?yàn)樗芰骼厥褂迷S多語言(包括Python)。她的問題是,很難在早上弄清楚溫度從而知道當(dāng)天該穿什么衣服。Susan每天早上聽天氣報(bào)告,但溫度以攝氏度給出,她習(xí)慣了華氏度。

幸運(yùn)的是,Susan有辦法解決這個(gè)問題。作為計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生,她去任何地方總是帶著她的筆記本計(jì)算機(jī)。她認(rèn)為計(jì)算機(jī)程序可能會(huì)幫助她。

Susan開始分析她的問題。在這個(gè)例子中,問題很清楚:無線電廣播員用攝氏度報(bào)氣溫,但Susan只能理解華氏溫度。

接下來,Susan考慮可能幫助她的程序的規(guī)格說明。輸入應(yīng)該是什么?她決定程序?qū)⒃试S她輸入攝氏溫度。輸出呢?程序?qū)@示轉(zhuǎn)換后的華氏溫度?,F(xiàn)在她需要指定輸出與輸入的確切關(guān)系。

蘇珊快速估算了一下。她知道0攝氏度(冰點(diǎn))等于32華氏度,100攝氏度(沸點(diǎn))等于212華氏度。有了這個(gè)信息,她計(jì)算出華氏度與攝氏度的比率為(212?32)/(100?0) = (180/100) = 9/5。使用F表示華氏溫度,C表示攝氏溫度,轉(zhuǎn)換公式的形式為F= (9/5)C+k,其中k為某個(gè)常數(shù)。代入0和32分別作為C和F,Susan立即得到k= 32。所以最后的關(guān)系公式是F= (9/5)C+ 32。這作為規(guī)格說明似乎足夠了。

請注意,這描述了能夠解決這個(gè)問題的許多可能程序中的一個(gè)。如果Susan有人工智能(AI)領(lǐng)域的背景,她可能會(huì)考慮寫一個(gè)程序,用語音識別算法實(shí)際收聽收音機(jī)播音員,獲得當(dāng)前的溫度。對于輸出,她可以讓計(jì)算機(jī)控制機(jī)器人進(jìn)入她的衣柜,并根據(jù)轉(zhuǎn)換后的溫度選擇適當(dāng)?shù)姆b。這將是一個(gè)更有野心的項(xiàng)目,一點(diǎn)也不夸張!

當(dāng)然,機(jī)器人程序也會(huì)解決問題分析中識別的問題。規(guī)格說明的目的,是準(zhǔn)確地決定這個(gè)特定的程序要做什么,從而解決一個(gè)問題。Susan知道,最好是先弄清楚她希望構(gòu)建什么,而不是一頭鉆進(jìn)去開始編程。

Susan現(xiàn)在準(zhǔn)備為她的問題設(shè)計(jì)一個(gè)算法。她馬上意識到這是一個(gè)簡單算法,遵循標(biāo)準(zhǔn)模式"輸入、處理、輸出”(IPO)。她的程序?qū)⑻崾居脩糨斎胍恍┬畔ⅲ〝z氏溫度),處理它,產(chǎn)生華氏溫度,然后在計(jì)算機(jī)屏幕上顯示結(jié)果,作為輸出。

Susan可以用一種計(jì)算機(jī)語言來寫她的算法。然而,正式將它寫出來需要相當(dāng)?shù)木?,這常常會(huì)扼殺開發(fā)算法的創(chuàng)造性過程。作為替代,她用"偽代碼”編寫算法。偽代碼只是精確的英語,描述了程序做的事。這意味著既可以交流算法,又不必讓大腦承擔(dān)額外的開銷,正確寫出某種特定編程語言的細(xì)節(jié)。

下面是Susan的完整算法:

輸入攝氏度溫度(稱為celsius)

計(jì)算華氏度為(9/5)celsius + 32

輸出華氏度

下一步是將此設(shè)計(jì)轉(zhuǎn)換為Python程序。這很直接,因?yàn)樗惴ǖ拿恳恍卸甲兂闪讼鄳?yīng)的Python代碼行。

# convert.py

# A program to convert Celsius temps to Fahrenheit

# by: Susan Computewell

defmain():

celsius = eval(input("What is the Celsius temperature? "))

fahrenheit =9/5* celsius +32

print("The temperature is", fahrenheit,"degrees Fahrenheit.")

main()

看看你是否能弄清楚這個(gè)程序的每一行做了什么。如果一些部分不是很清楚,也不要擔(dān)心,下一節(jié)將詳細(xì)討論。

完成程序后,Susan測試它,看看它工作得如何。她使用她知道正確答案的輸入。下面是兩個(gè)測試的輸出:

Whatisthe Celsius temperature?

The temperatureis32.0degrees Fahrenheit.

Whatisthe Celsius temperature?100

The temperatureis212.0degrees Fahrenheit.

你可以看到,Susan用值0和100來測試她的程序??雌饋聿诲e(cuò),她對解決方案感到滿意。她特別高興的是,似乎沒有必要調(diào)試(這很不尋常)。

程序要素

既然已經(jīng)知道了編程過程,你就"幾乎”準(zhǔn)備好開始自己編寫程序了。在此之前,你需要更完整的基礎(chǔ),了解Python的基本知識。接下來的幾節(jié)將討論一些技術(shù)細(xì)節(jié),這對編寫正確程序至關(guān)重要。這種材料看起來有點(diǎn)乏味,但你必須掌握這些基礎(chǔ),然后再進(jìn)入更有趣的領(lǐng)域。

1 名稱

你已經(jīng)看到,名稱是編程的重要組成部分。我們?yōu)槟K命名(例如convert),也為模塊中的函數(shù)命名(例如main)。變量用于為值命名(例如celsius和fahrenheit)。從技術(shù)上講,所有這些名稱都稱為"標(biāo)識符”。Python對標(biāo)識符的構(gòu)成有一些規(guī)則。每個(gè)標(biāo)識符必須以字母或下劃線("_”字符)開頭,后跟字母、數(shù)字或下劃線的任意序列。這意味著單個(gè)標(biāo)識符不能包含任何空格。

根據(jù)上述規(guī)則,以下都是Python中的合法名稱:

x

celsius

spam

spam2

SpamAndEggs

Spam_and_Eggs

標(biāo)識符區(qū)分大小寫,因此對Python來說,spam、Spam、sPam和SPAM是不同的名稱。在大多數(shù)情況下,程序員可以自由選擇符合這些規(guī)則的任何名稱。好的程序員總是試圖選擇一些名字,它們能描述被命名的東西。

需要注意一件重要的事情:一些標(biāo)識符是Python本身的一部分。這些名稱稱為"保留字”或"關(guān)鍵字”,不能用作普通標(biāo)識符。Python關(guān)鍵字的完整列表如表1所列。

表1  Python關(guān)鍵字

False

class

finally

is

return

Python還包括相當(dāng)多的內(nèi)置函數(shù),例如我們用過的print函數(shù)。雖然在技術(shù)上可以將內(nèi)置的函數(shù)名稱標(biāo)識符用于其他目的,但這通常是一個(gè)"非常糟糕”的主意。例如,如果你重新定義print的含義,那么就無法再打印信息。你也會(huì)讓所有閱讀程序的Python程序員感到非常困惑,他們預(yù)期print指的是內(nèi)置函數(shù)。內(nèi)置函數(shù)的完整列表可在附錄A中找到。

2 表達(dá)式

程序操作數(shù)據(jù)。到目前為止,我們已經(jīng)在示例程序中看到了數(shù)字和文本兩種不同類型的數(shù)據(jù)。我們將在后面的節(jié)中詳細(xì)討論這些不同的數(shù)據(jù)類型?,F(xiàn)在,你只需要記住,所有的數(shù)據(jù)必須以一些數(shù)字格式存儲(chǔ)在計(jì)算機(jī)上,不同類型的數(shù)據(jù)以不同的方式存儲(chǔ)。

產(chǎn)生或計(jì)算新數(shù)據(jù)值的程序代碼片段稱為"表達(dá)式”。最簡單的表達(dá)式是字面量。字面量用于表示特定值。在chaos.py中,你可以找到數(shù)字3.9和1。convert.py程序包含9、5和32。這些都是數(shù)字字面量的例子,它們的含義顯而易見:32就是代表32(數(shù)字32)。

我們的程序還以一些簡單的方式處理文本數(shù)據(jù)。計(jì)算機(jī)科學(xué)家將文本數(shù)據(jù)稱為"字符串”。你可以將字符串視為可打印字符的序列。Python中通過將字符括在引號("")中來表示字符串字面量。如果你回頭看看我們的示例程序,可以發(fā)現(xiàn)一些字符串字面量,例如"Hello"和"Enter a number between 0 and 1:"。這些字面量產(chǎn)生的字符串包含引號內(nèi)的字符。請注意,引號本身不是字符串的一部分。它們只是告訴Python創(chuàng)建一個(gè)字符串的機(jī)制。

將表達(dá)式轉(zhuǎn)換為基礎(chǔ)數(shù)據(jù)類型的過程稱為"求值”。在Python shell中鍵入表達(dá)式時(shí),shell會(huì)計(jì)算表達(dá)式并打印出結(jié)果的文本表示。請考慮以下簡短的交互:

>>>32

32

>>>"Hello"

'Hello'

>>>"32"

'32'

請注意,當(dāng)shell顯示字符串的值時(shí),它將字符序列放在單引號中。這樣讓我們知道該值實(shí)際上是文本而不是數(shù)字(或其他數(shù)據(jù)類型)。在最后一次交互中,我們看到表達(dá)式"32"產(chǎn)生一個(gè)字符串,而不是一個(gè)數(shù)字。在這種情況下,Python實(shí)際上是存儲(chǔ)字符"3”和"2”,而不是數(shù)字32的表示。如果你現(xiàn)在不太明白,不要太擔(dān)心。我們在后面的節(jié)中討論這些數(shù)據(jù)類型時(shí),你的理解就會(huì)變得更加清晰。

一個(gè)簡單的標(biāo)識符也可以是一個(gè)表達(dá)式。我們使用標(biāo)識符作為變量來給名字賦值。當(dāng)標(biāo)識符作為表達(dá)式出現(xiàn)時(shí),它的值會(huì)被取出,作為表達(dá)式的結(jié)果。下面是與Python解釋器的交互,展示了變量作為表達(dá)式:

>>> x =5

>>> x

5

>>> print(x)

5

>>> print(spam)

Traceback (most recent call last):

File"", line1,in

NameError:name'spam'isnotdefined

首先,變量x被賦值為5(使用數(shù)字字面量5)。在第二行交互中,我們要求Python對表達(dá)式x求值。作為響應(yīng),Python shell打印出5,這是剛才賦給x的值。當(dāng)然,如果我們明確要求Python用print語句打印x,也會(huì)得到相同的結(jié)果。最后一個(gè)交互展示了如果嘗試使用未賦值的變量,會(huì)發(fā)生什么。Python找不到值,所以它報(bào)告NameError。這說明沒有該名稱的值。這里的要點(diǎn)是,變量總是必須賦一個(gè)值,然后才能在表達(dá)式中使用。

較復(fù)雜、較有趣的表達(dá)式可以通過組合較簡單的表達(dá)式和操作符來構(gòu)造。對于數(shù)字,Python提供了一組標(biāo)準(zhǔn)的數(shù)學(xué)運(yùn)算:加法、減法、乘法、除法和乘方。相應(yīng)的Python運(yùn)算符為"+”"-”"*”"/”和"**”。下面是一些來自chaos.py和convert.py的復(fù)雜表達(dá)式的例子:

3.9* x *(1 - x)

9/5 * celsius + 32

空格在表達(dá)式中沒有作用。最后一個(gè)表達(dá)式如果寫成9/5*celsius+32,結(jié)果完全相同。通常,在表達(dá)式中加一些空格讓它更容易閱讀,是個(gè)好方法。

Python的數(shù)學(xué)運(yùn)算符遵循的優(yōu)先級和結(jié)合律,與你在數(shù)學(xué)課上學(xué)到的相同,包括使用括號來改變求值的順序。在自己的程序中構(gòu)建復(fù)雜表達(dá)式應(yīng)該沒什么困難。請記住,只有圓括號在數(shù)字表達(dá)式中是允許的。如果需要,可以嵌套使用它們,創(chuàng)建如下的表達(dá)式:

((x1 - x2) / 2*n) + (spam / k**3)

順便說一句,Python還提供了字符串的運(yùn)算符。例如,可以"加”字符串。

>>>"Bat"+"man"

'Batman'

這被稱為"連接”。如你所見,效果是創(chuàng)建一個(gè)新的字符串,把兩個(gè)字符串"粘”在一起。

3 輸出語句

既然有了基本的構(gòu)建塊(標(biāo)識符和表達(dá)式),你就可以更完整地描述各種Python語句。 你已經(jīng)知道信息可以使用Python的內(nèi)置函數(shù)print在屏幕上顯示。到目前為止,我們已經(jīng)看了幾個(gè)例子,但我還沒有詳細(xì)解釋打印功能。像所有的編程語言一樣,Python對每個(gè)語句的語法(形式)和語義(意義)有一套精確的規(guī)則。計(jì)算機(jī)科學(xué)家已經(jīng)開發(fā)了復(fù)雜的符號表示法,稱為"元語言”,用于描述編程語言。在本書中,我們將依靠一個(gè)簡單的模板符號表示法來說明各種語句的語法。

因?yàn)閜rint是一個(gè)內(nèi)置函數(shù),所以print語句與任何其他函數(shù)調(diào)用具有相同的一般形式。我們鍵入函數(shù)名print,后面帶上括號中列出的參數(shù)。下面是用我們的模板符號時(shí)print語句看起來的樣子:

print(,, ...,)

print()

這兩個(gè)模板展示了兩種形式的print語句。第一個(gè)表示print語句可以包含函數(shù)名print,后面帶上帶括號的表達(dá)式序列,用逗號分隔。模板中的尖括號符號()用于表示由Python代碼的其他片段填充的"槽”。括號內(nèi)的名稱表示缺少什么,expr表示一個(gè)表達(dá)式。省略號("...”)表示不確定的序列(在這個(gè)例子中是表達(dá)式)。你實(shí)際上不會(huì)輸入圓點(diǎn)。第二個(gè)版本的print語句表明,不打印任何表達(dá)式的print也是合法的。

就語義而言,print語句以文本形式顯示信息。所有提供的表達(dá)式都從左到右求值,結(jié)果值以從左到右的方式顯示在輸出行上。默認(rèn)情況下,在顯示的值之間放置一個(gè)空格字符。作為示例,下面print語句的序列:

print(3+4)

print(3, 4, 3 + 4)

print()

print("The answer is", 3 + 4)

產(chǎn)生的輸出為:

7

347

The answeris7

最后一個(gè)語句說明了,字符串字面量表達(dá)式如何經(jīng)常在print語句使用,作為標(biāo)記輸出的方便方法。

注意,連續(xù)的print語句通常顯示在屏幕的不同行上??誴rint(無參數(shù))生成空行輸出。在背后,真正發(fā)生的是,在打印所有提供的表達(dá)式之后,print函數(shù)自動(dòng)附加某種結(jié)束文本。默認(rèn)情況下,結(jié)束文本是表示行結(jié)束的特殊標(biāo)記字符(表示為" ”)。我們可以通過包含一個(gè)附加參數(shù)顯式地覆蓋這個(gè)默認(rèn)值,從而改變這種行為。這里使用命名參數(shù)的特殊語法,或稱為"關(guān)鍵字”參數(shù)。

包含指定結(jié)束文本的關(guān)鍵字參數(shù)的print語句的模板如下:

print(,, ...,, end=" ")

命名參數(shù)的關(guān)鍵字是end,它使用"=”符號賦值,類似于變量賦值。注意,在模板中我已經(jīng)顯示其默認(rèn)值,即行末字符。這是一種標(biāo)準(zhǔn)方式,用于顯示在未明確指定某個(gè)其他值時(shí),關(guān)鍵字參數(shù)具有的值。

print語句中的end參數(shù)有一個(gè)常見用法,即允許多個(gè)print構(gòu)建單行輸出。例如:

print("The answer is", end=" ")

print(3 + 4)

產(chǎn)生單行輸出:

The answeris7

注意,第一個(gè)print語句的輸出如何以空格(" ")而不是行末字符結(jié)束,第二個(gè)語句的輸出緊跟在空格之后。

4 賦值語句

Python中最重要的語句之一是賦值語句。我們在前面的例子中已經(jīng)看到了一些。

簡單賦值

基本賦值語句具有以下形式:

=

這里variable是一個(gè)標(biāo)識符,expr是一個(gè)表達(dá)式。賦值的語義是,右側(cè)的表達(dá)式被求值,然后產(chǎn)生的值與左側(cè)命名的變量相關(guān)聯(lián)。

下面是我們已經(jīng)看到的一些賦值:

x=3.9* x * (1- x)

fahrenheit=9/5* celsius +32

x=5

變量可以多次賦值。它總是保留最新賦的值。下面的交互式Python會(huì)話展示了這一點(diǎn):

>>> myVar =

>>> myVar

>>> myVar =7

>>> myVar

7

>>> myVar = myVar +1

>>> myVar

8

最后一個(gè)賦值語句展示了如何使用變量的當(dāng)前值來更新它的值。在這個(gè)例子中,我只是對以前的值加1。記住,變量的值可以改變,這就是為什么它們被稱為變量的原因。

有時(shí),將變量看作計(jì)算機(jī)內(nèi)存中的一種命名的存儲(chǔ)位置是有幫助的,我們可以在其中放入一個(gè)值。當(dāng)變量更改時(shí),舊值將被刪除,并寫入一個(gè)新值。圖1展示了用這個(gè)模型來描繪x=x+ 1的效果。這正是賦值在某些計(jì)算機(jī)語言中工作的方式。這也是查看賦值效果的一種非常簡單的方式,你會(huì)在整本書中看到類似這樣的圖片。

圖1x=x+ 1的視圖,變量就像盒子

Python賦值語句實(shí)際上與"變量盒子”模型略有不同。在Python中,值可能最終放在內(nèi)存中的任何位置,而變量用于引用它們。對變量賦值就像把一個(gè)黃色小粘貼便簽放在值上,并說"這是x”。圖2給出了一個(gè)更準(zhǔn)確的Python賦值的效果。箭頭用于顯示變量引用的值。請注意,舊值不會(huì)被新值擦除,變量只需切換到引用新值。效果就像將粘貼便簽從一個(gè)對象移動(dòng)到另一個(gè)對象一樣。這是賦值在Python中實(shí)際工作的方式,所以你會(huì)看到這樣一些粘貼便簽樣式的圖片散布在本書中。

圖2

x=x+ 1的(Python)視圖,變量就像便簽

順便說一句,即使賦值語句不直接導(dǎo)致變量的舊值被擦除和覆蓋,你也不必?fù)?dān)心計(jì)算機(jī)內(nèi)存中充滿"被丟棄”的值。如果一個(gè)值不再被任何變量引用,它就不再有用。Python將自動(dòng)從內(nèi)存中清除這些值,以便空間可以用于存放新值。這就像檢查你的衣柜,拋出沒有粘貼便簽標(biāo)記的東西。實(shí)際上,這個(gè)自動(dòng)內(nèi)存管理的過程確實(shí)被稱為"垃圾收集”。

賦值輸入

輸入語句的目的是從程序的用戶那里獲取一些信息,并存儲(chǔ)到變量中。一些編程語言有一個(gè)特殊的語句來做到這一點(diǎn)。在Python中,輸入是用一個(gè)賦值語句結(jié)合一個(gè)內(nèi)置函數(shù)input實(shí)現(xiàn)的。輸入語句的確切形式,取決于你希望從用戶那里獲取的數(shù)據(jù)類型。對于文本輸入,語句如下所示:

= input(

)

這里的

是一個(gè)字符串表達(dá)式,用于提示用戶輸入。提示幾乎總是一個(gè)字符串字面量(即引號內(nèi)的一些文本)。

當(dāng)Python遇到對input的調(diào)用時(shí),它在屏幕上打印提示。然后,Python暫停并等待用戶鍵入一些文本,鍵入完成后按鍵。用戶輸入的任何東西都會(huì)存儲(chǔ)為字符串。請考慮以下簡單的交互:

>>> name = input("Enter your name: ")

Enter yourname:John Yaya

>>> name

'John Yaya'

執(zhí)行input語句導(dǎo)致Python打印輸出提示"Enter your name:”,然后解釋器暫停,等待用戶輸入。在這個(gè)例子中,我鍵入John Yaya。結(jié)果,字符串"John Yaya”被記在變量name中。對name求值將返回我鍵入的字符串。

如果用戶輸入是一個(gè)數(shù)字,我們需要形式稍復(fù)雜一點(diǎn)的input語句:

=eval(input(

))

這里我添加了另一個(gè)內(nèi)置的Python函數(shù)eval,它"包裹”了input函數(shù)。你可能會(huì)猜到,eval是"evaluate(求值)”的縮寫。在這種形式中,用戶鍵入的文本被求值為一個(gè)表達(dá)式,以產(chǎn)生存儲(chǔ)到變量中的值。舉例來說,字符串"32”就變成數(shù)字32。如果回頭看看示例程序,到目前為止,你會(huì)看到幾個(gè)例子,我們像這樣從用戶那里得到了數(shù)字。

x= eval(input("Please enter a number between 0 and 1: "))

celsius= eval(input("What is the Celsius temperature? "))

重要的是要記住,如果希望得到一個(gè)數(shù)字,而不是一些原始文本(字符串),需要對input進(jìn)行eval。

如果你仔細(xì)閱讀示例程序,可能會(huì)注意到所有這些提示結(jié)尾處的引號內(nèi)的空格。我通常在提示的末尾放置一個(gè)空格,以便用戶輸入的內(nèi)容不會(huì)緊接著提示開始。放上空格可以讓交互更容易閱讀和理解。

雖然我們的數(shù)字示例特別提示用戶輸入數(shù)字,但在這個(gè)例子中,用戶鍵入的只是一個(gè)數(shù)字字面量,即一個(gè)簡單的Python表達(dá)式。事實(shí)上,任何有效的表達(dá)式都是可接受的。請考慮下面與Python解釋器的交互:

>>> ans = eval(input("Enter an expression: "))

Enter anexpression:3+4*5

>>> print(ans)

23

>>>

這里,提示輸入表達(dá)式時(shí),用戶鍵入"3 + 4 * 5”。Python對此表達(dá)式求值(通過eval),并將值賦給變量ans。打印時(shí),我們看到ans的值為23,與預(yù)期一樣。在某種意義上,input-eval組合就像一個(gè)延遲的表達(dá)式。示例交互產(chǎn)生完全相同的結(jié)果,就像我們簡單地寫成ans = 3 + 4 * 5一樣。不同的是,表達(dá)式由用戶在語句執(zhí)行時(shí)提供,而不是由程序員在編程時(shí)輸入。

注意:eval函數(shù)功能非常強(qiáng)大,也有"潛在的危險(xiǎn)”。如本例所示,當(dāng)我們對用戶輸入求值時(shí),本質(zhì)上是允許用戶輸入一部分程序。Python將盡職盡責(zé)地對他們輸入的任何內(nèi)容求值。了解Python的人可以利用這種能力輸入惡意指令。例如,用戶可以鍵入記錄計(jì)算機(jī)上的私人信息或刪除文件的表達(dá)式。在計(jì)算機(jī)安全中,這被稱為"代碼注入”攻擊,因?yàn)楣粽邔阂獯a注入正在運(yùn)行的程序中。

作為一名新程序員,編程給自己個(gè)人使用,計(jì)算機(jī)安全不是很大的問題。如果你坐在一臺(tái)運(yùn)行Python程序的計(jì)算機(jī)前面,你可能擁有對系統(tǒng)的完全訪問權(quán)限,并且可以找到更簡單的方法來刪除所有文件。然而,如果一個(gè)程序的輸入來自不受信任的來源,例如來自互聯(lián)網(wǎng)上的用戶,使用eval可能是災(zāi)難性的。

同時(shí)賦值

有一個(gè)賦值語句的替代形式,允許我們同時(shí)計(jì)算幾個(gè)值。它看起來像這樣:

,, ...,=,, ...,

這稱為"同時(shí)賦值”。語義上,這告訴Python對右側(cè)所有表達(dá)式求值,然后將這些值賦給左側(cè)命名的相應(yīng)變量。下面是一個(gè)例子:

sum, diff = x+y, x-y

這里,sum得到x和y的和,diff得到x和y的差。

這種形式的賦值初看很奇怪,但實(shí)際上非常有用。這里有一個(gè)例子:假設(shè)有兩個(gè)變量x和y,你希望交換它們的值。也就是說,你希望將當(dāng)前存儲(chǔ)在x中的值存儲(chǔ)在y中,將當(dāng)前存儲(chǔ)在y中的值存儲(chǔ)在x中。首先,你可能認(rèn)為這可以通過兩個(gè)簡單的賦值來完成:

x= y

y= x

這不行。我們可以一步一步地跟蹤這些語句的執(zhí)行,看看為什么。

假設(shè)x和y開始的值是2和4。讓我們檢查程序的邏輯,看看變量是如何變化的。以下序列用注釋描述了在執(zhí)行這兩個(gè)語句時(shí)變量會(huì)發(fā)生什么:

# 變量 x y

# 初始值 2 4

x= y

# 現(xiàn)在是 4 4

y= x

# 最后是 4 4

看到第一個(gè)語句將y的值賦給x,從而修改了x的原始值嗎?當(dāng)我們在第二步將x的值賦給y時(shí),最終得到了原始y值的兩個(gè)副本。

完成交換的一種方法是引入一個(gè)附加變量,它暫時(shí)記住x的原始值。

temp= x

x= y

y= temp

讓我們來看看這個(gè)序列是如何工作的。

# 變量 x y temp

# 初始值 2 4 暫時(shí)無值

temp= x

# 2 4 2

x= y

# 4 4 2

y= temp

# 4 2 2

從x和y的最終值可以看出,在這個(gè)例子中,交換成功。

這種三變量交換的方式在其他編程語言中很常見。在Python中,同時(shí)賦值語句提供了一種優(yōu)雅的選擇。下面是更簡單的Python等價(jià)寫法:

x, y = y, x

因?yàn)橘x值是同時(shí)的,所以它避免了擦除一個(gè)原始值。

同時(shí)賦值也可以用單個(gè)input從用戶那里獲取多個(gè)數(shù)字。請考慮下面的程序,它求出考試平均分:

# avg2.py

# A simple program to average two exam scores

# Illustrates use of multiple input

defmain():

print("This program computes the average of two exam scores.")

score1, score2 = eval(input("Enter two scores separated by a comma: "))

average = (score1 + score2) /2

print("The average of the scores is:", average)

main()

該程序提示用逗號分隔兩個(gè)分?jǐn)?shù)。假設(shè)用戶鍵入86,92。input語句的效果就像進(jìn)行以下賦值:

score1, score2 = 86, 92

我們已經(jīng)為每個(gè)變量獲得了一個(gè)值。這個(gè)例子只用了兩個(gè)值,但可以擴(kuò)展到任意數(shù)量的輸入。

當(dāng)然,我們也可以通過單獨(dú)的input語句獲得用戶的輸入:

score1= eval(input("Enter the first score: "))

score2= eval(input("Enter the second score: "))

某種程度上,這可能更好,因?yàn)閱为?dú)的提示對用戶來說信息更準(zhǔn)確。在這個(gè)例子中,決定采用哪種方法在很大程度上是品位問題。有時(shí)在單個(gè)input中獲取多個(gè)值提供了更直觀的用戶接口,因此在你的工具包中,這是一項(xiàng)好技術(shù)。但要記住,多個(gè)值的技巧不適用于字符串(非求值)輸入,如果用戶鍵入逗號,它只是輸入字符串中的一個(gè)字符。逗號僅在隨后對字符串求值時(shí),才成為分隔符。

確定循環(huán)

你已經(jīng)知道,程序員用循環(huán)連續(xù)多次執(zhí)行一系列語句。最簡單的循環(huán)稱為"確定循環(huán)”。這是會(huì)執(zhí)行一定次數(shù)的循環(huán)。也就是說,在程序中循環(huán)開始時(shí),Python就知道循環(huán)(或"迭代”)的次數(shù)。例如,前面介紹的chaos程序用了一個(gè)總是執(zhí)行10次的循環(huán):

foriinrange(10):

x = 3.9 * x * (1 - x)

print(x)

這個(gè)特定的循環(huán)模式稱為"計(jì)數(shù)循環(huán)”,它用Python的for語句構(gòu)建。在詳細(xì)分析這個(gè)例子之前,讓我們來看看什么是for循環(huán)。

Python的for循環(huán)具有以下一般形式:

forin:

循環(huán)體可以是任意Python語句序列。循環(huán)體的范圍通過它在循環(huán)頭(for in :部分)下面的縮進(jìn)來表示。

關(guān)鍵字for后面的變量稱為"循環(huán)索引”。它依次取sequence中的每個(gè)值,并針對每個(gè)值都執(zhí)行一次循環(huán)體中的語句。通常,sequence部分由值"列表”構(gòu)成。列表是Python中一個(gè)非常重要的概念,你將在后續(xù)節(jié)中了解更多?,F(xiàn)在只要知道,可以在方括號中放置一系列表達(dá)式,從而創(chuàng)建一個(gè)簡單的列表。下列交互示例有助于說明這一點(diǎn):

你能看到這兩個(gè)例子做了什么嗎?依次使用列表中的每個(gè)值執(zhí)行了循環(huán)體。列表的長度決定了循環(huán)執(zhí)行的次數(shù)。在第一個(gè)例子中,列表包含4個(gè)值,即0至3,并且簡單地打印了這些連續(xù)的i值。在第二個(gè)例子中,odd取前5個(gè)奇數(shù)的值,循環(huán)體打印了這些數(shù)字的平方。

現(xiàn)在,讓我們回到這一節(jié)開始的例子(來自chaos.py)再看一下循環(huán)頭:

foriinrange(10):

將它與for循環(huán)的模板進(jìn)行比較可以看出,最后一個(gè)部分range(10)必定是某種序列。事實(shí)上,range是一個(gè)內(nèi)置的Python函數(shù),用于"當(dāng)場”生成一個(gè)數(shù)字序列。你可以認(rèn)為range是一種數(shù)字序列的隱性描述。要明白range實(shí)際上做了什么,我們可以要求Python用另一個(gè)內(nèi)置函數(shù)list,將range轉(zhuǎn)換為一個(gè)簡單的舊式列表:

>>> list(range(10))# turns range(10) into an explicit list

[,1,2,3,4,5,6,7,8,9]

你看到這里發(fā)生了什么嗎?表達(dá)式range(10)產(chǎn)生數(shù)字0到9的序列。使用range(10)的循環(huán)等價(jià)于使用那些數(shù)字的列表的循環(huán)。

foriin[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:

一般來說,range()將產(chǎn)生一個(gè)數(shù)字序列,從0開始,但不包括的值。如果你想一想,就會(huì)發(fā)現(xiàn)表達(dá)式的值確定了結(jié)果序列中的項(xiàng)數(shù)。在chaos.py中,我們甚至不關(guān)心循環(huán)索引變量使用了什么值(因?yàn)閕沒有在循環(huán)體中的任何位置引用)。我們只需要一個(gè)長度為10的序列,讓循環(huán)體執(zhí)行10次。

正如前面提到的,這種模式稱為"計(jì)數(shù)循環(huán)”,它是使用確定循環(huán)的一種很常見的方式。如果你希望在程序中做一定次數(shù)的某些事,請用一個(gè)帶有合適range的for循環(huán)。下面一個(gè)反復(fù)出現(xiàn)的Python編程習(xí)語,你需要記?。?/p>

forinrange():

表達(dá)式的值確定了循環(huán)執(zhí)行的次數(shù)。索引變量的名稱實(shí)際上并不重要,程序員經(jīng)常使用i或j作為計(jì)數(shù)循環(huán)的循環(huán)索引變量。只要確保使用的標(biāo)識符沒有用于任何其他目的,否則你可能會(huì)不小心清除稍后需要的值。

循環(huán)的有趣和有用之處在于,它們改變程序"控制流”的方式。通常我們認(rèn)為計(jì)算機(jī)是嚴(yán)格按順序執(zhí)行一系列指令。引入循環(huán)會(huì)導(dǎo)致Python退回去并重復(fù)執(zhí)行一些語句。類似for循環(huán)的語句稱為"控制結(jié)構(gòu)”,因?yàn)樗鼈兛刂瞥绦蚱渌糠值膱?zhí)行。

一些程序員發(fā)現(xiàn),用圖片的方式來思考控制結(jié)構(gòu)是有幫助的,即所謂的"流程圖”。流程圖用一些框來表示程序的不同部分,并用框之間的箭頭表示程序運(yùn)行時(shí)的事件序列。圖3用流程圖描述了for循環(huán)的語義。

圖3 for循環(huán)的流程圖

如果你在理解for循環(huán)時(shí)遇到困難,可能會(huì)發(fā)現(xiàn)學(xué)習(xí)流程圖很有用。流程圖中的菱形框表示程序中的決定。當(dāng)Python遇到循環(huán)頭時(shí),它檢查序列中是否有項(xiàng)。如果答案為"是”,則循環(huán)索引變量被賦予序列中的下一項(xiàng),然后執(zhí)行循環(huán)體。一旦循環(huán)體完成,程序返回到循環(huán)頭并檢查序列中的下一個(gè)值。如果沒有更多的項(xiàng),循環(huán)就退出,程序移動(dòng)到循環(huán)之后的語句。

示例程序:終值

我們用另一個(gè)編程過程的例子來結(jié)束本文。我們希望開發(fā)一個(gè)程序來確定投資的終值。我們將從對問題的分析開始。你知道存入銀行賬戶的錢會(huì)賺取利息,這個(gè)利息隨著時(shí)間的推移而累積。從現(xiàn)在起10年后,一個(gè)賬戶將有多少錢?顯然,這取決于我們開始有多少錢(本金)以及賬戶賺多少利息。給定本金和利率,程序應(yīng)該能夠計(jì)算未來10年投資的終值。

我們繼續(xù)制定程序的確切規(guī)格說明。記住,這是程序做什么的描述。輸入應(yīng)該是什么?我們需要用戶輸入初始投資金額,即本金。我們還需要說明賬戶賺多少利息。這取決于利率和計(jì)復(fù)利的頻率。處理此問題的一種簡單方法是讓用戶輸入年度百分比率。無論實(shí)際利率和復(fù)利頻率如何,年利率告訴我們一年內(nèi)的投資收益。如果年利率為3%,那么100美元的投資將在一年的時(shí)間內(nèi)增長到103美元。用戶應(yīng)如何表示年利率3%?有一些合理的選擇。讓我們假設(shè)用戶提供一個(gè)小數(shù),因此利率將輸入為0.03。

這樣就得到以下規(guī)格說明:

程序 終值

輸入

principal 投資于美元的金額。

APR 以十進(jìn)制數(shù)表示的年度百分比利率。

輸出 投資10年后的終值。

關(guān)系 一年后的價(jià)值由principal(1 + apr)給出。該公式需要應(yīng)用10次。

接下來為程序設(shè)計(jì)一個(gè)算法。我們將使用偽代碼,這樣就可以闡明我們的想法而又不必?fù)?dān)心Python的所有規(guī)則。對于我們的規(guī)格說明,算法看起來很簡單。

打印介紹

輸入本金的金額(principal)

輸入年度百分比利率(apr)

重復(fù)10次:

principal = principal *(1 + apr)

輸出principal的值

如果你知道一些金融數(shù)學(xué)(或者只是一些基本代數(shù))的知識,可能會(huì)意識到,在這個(gè)設(shè)計(jì)中并不一定要用循環(huán)。有一個(gè)公式可以利用乘冪一步算出終值。我在這里用了一個(gè)循環(huán)來展示另一個(gè)計(jì)數(shù)循環(huán),另一個(gè)原因是這個(gè)版本適合進(jìn)行一些修改,在本文末尾的編程練習(xí)中將討論。無論如何,這個(gè)設(shè)計(jì)說明有時(shí)算法的計(jì)算方式可以讓數(shù)學(xué)更容易。知道如何計(jì)算一年的利息,就讓我們能計(jì)算未來任意年數(shù)的利息。

既然我們已經(jīng)在偽代碼中想明白了這個(gè)問題,現(xiàn)在該利用我們的Python新知識開發(fā)一個(gè)程序了。算法的每一行都轉(zhuǎn)換為一條Python語句:

打印介紹(print語句,第2.4節(jié))

print("This program calculates the future value")

print("of a 10-year investment.")

輸入本金的金額(數(shù)值input,第2.5.2節(jié))

principal =eval(input("Enter the initial principal: "))

輸入年度百分比利率(數(shù)值input,第2.5.2節(jié))

apr =eval(input("Enter the annual interest rate: "))

重復(fù)10次:(計(jì)數(shù)循環(huán),第2.6節(jié))

foriinrange(10):

計(jì)算principal = principal * (1 + apr)(簡單賦值,第2.5.1節(jié))

principal = principal * (1 + apr)

輸出principal的值(print語句,第2.4節(jié))

print("The value in 10 years is:", principal)

該程序中的所有語句類型都已在本文中詳細(xì)討論過。如果有任何問題,請回頭查看相關(guān)說明。特別要注意的是,計(jì)數(shù)循環(huán)模式用于應(yīng)用10次利息公式。

就到這里了。下面是完成的程序:

# futval.py

# A program to compute the value of an investment

# carried 10 years into the future

defmain():

print("This program calculates the future value")

print("of a 10-year investment.")

principal = eval(input("Enter the initial principal: "))

apr = eval(input("Enter the annual interest rate: "))

foriinrange(10):

principal = principal * (1+ apr)

print("The value in 10 years is:", principal)

main()

注意,我添加了幾個(gè)空行來分隔程序的輸入、處理和輸出部分。策略性地放置"空行”能讓程序更具有可讀性。

這就是我所舉的例子,測試和調(diào)試是留給你的練習(xí)。

小結(jié)

本文介紹了開發(fā)程序的過程,以及實(shí)現(xiàn)簡單程序所需的許多Python細(xì)節(jié)。下面是一些要點(diǎn)的快速小結(jié)。

編寫程序需要一種系統(tǒng)的方法來解決問題,包括以下步驟。

1.問題分析:研究需要解決的問題。

2.程序規(guī)格說明:確定程序要做什么。

3.設(shè)計(jì):用偽代碼編寫算法。

4.實(shí)現(xiàn):將設(shè)計(jì)翻譯成編程語言。

5.測試/調(diào)試:查找和修復(fù)程序中的錯(cuò)誤。

6.維護(hù):讓程序保持最新,滿足不斷變化的需求。

許多簡單的程序遵循輸入、處理、輸出(IPO)的模式。

程序由標(biāo)識符和表達(dá)式構(gòu)成的語句組成。

標(biāo)識符是一些名稱,它們以下劃線或字母開頭,后跟字母、數(shù)字或下劃線字符的組合。Python中的標(biāo)識符區(qū)分大小寫。

表達(dá)式是產(chǎn)生數(shù)據(jù)的程序片段。表達(dá)式可以由以下部件組成:

字面量字面量是特定值的表示。例如,3是數(shù)字3的字面量表示。

變量變量是存儲(chǔ)值的標(biāo)識符。

運(yùn)算符運(yùn)算符用于將表達(dá)式組合為更復(fù)雜的表達(dá)式。例如,在x+ 3 *y中,使用了運(yùn)算符+和*。

數(shù)字的Python運(yùn)算符包括加法(+)、減法(-)、乘法(*)、除法(/)和乘冪(**)等常見的算術(shù)運(yùn)算。

Python輸出語句print將一系列表達(dá)式的值顯示在屏幕上。

在Python中,使用等號(=)表示將值賦給變量。利用賦值,程序可以從鍵盤獲得輸入。Python還允許同時(shí)賦值,這對于利用單個(gè)提示獲取多個(gè)輸入值很有作用。

eval函數(shù)可用來對用戶輸入求值,但它是一種安全風(fēng)險(xiǎn),不應(yīng)該用于未知或不可信來源的輸入。

確定循環(huán)是執(zhí)行次數(shù)已知的循環(huán)。Python的for語句是一個(gè)循環(huán)遍歷一系列值的確定循環(huán)。Python列表通常在for循環(huán)中用于為循環(huán)提供一系列值。

for語句的一個(gè)重要用途是實(shí)現(xiàn)計(jì)數(shù)循環(huán),這是專門設(shè)計(jì)的循環(huán),以便將程序的某些部分重復(fù)特定的次數(shù)。Python中的計(jì)數(shù)循環(huán)通過使用內(nèi)置的range函數(shù),來產(chǎn)生適當(dāng)大小的數(shù)字序列。

判斷對錯(cuò)

1.編寫程序的最好方法是立即鍵入一些代碼,然后調(diào)試它,直到它工作。

2.可以在不使用編程語言的情況下編寫算法。

3.程序在寫入和調(diào)試后不再需要修改。

4.Python標(biāo)識符必須以字母或下劃線開頭。

5.關(guān)鍵詞是好的變量名。

6.表達(dá)式由文字、變量和運(yùn)算符構(gòu)成。

7.在Python中,x=x+ 1是一個(gè)合法的語句。

8.Python不允許使用單個(gè)語句輸入多個(gè)值。

9.計(jì)數(shù)循環(huán)被設(shè)計(jì)為迭代特定次數(shù)。

10.在流程圖中,菱形用于展示語句序列,矩形用于判斷點(diǎn)。

多項(xiàng)選擇

1.以下項(xiàng)不是軟件開發(fā)過程中的一個(gè)步驟。

a.規(guī)格說明     b.測試/調(diào)試    c.決定費(fèi)用     d.維護(hù)

2.將攝氏度轉(zhuǎn)換為華氏度的正確公式是。

a.F= 9/5(C) + 32         b.F= 5/9(C) ? 32

c.F=B2? 4ACd.F= (212 – 32)/(100 – 0)

3.準(zhǔn)確描述計(jì)算機(jī)程序?qū)⒆鍪裁磥斫鉀Q問題的過程稱為。

a.設(shè)計(jì)       b.實(shí)現(xiàn)     c.編程       d.規(guī)格說明

4.以下項(xiàng)不是合法的標(biāo)識符。

a.     b.     c.     d.

5.下列不在表達(dá)式中使用。

a.變量      b.語句      c.操作符    d.字面量

6.生成或計(jì)算新數(shù)據(jù)值的代碼片段被稱為。

a.標(biāo)識符     b.表達(dá)式    c.生成子句     d.賦值語句

7.以下項(xiàng)不是IPO模式的一部分。

a.輸入       b.程序      c.處理       d.輸出

8.模板描述了。

a.一般循環(huán)         b.賦值語句

c.流程圖             d.計(jì)數(shù)循環(huán)

9.以下項(xiàng)是最準(zhǔn)確的Python賦值模型。

a.粘貼便簽     b.變量盒子    c.同時(shí)       d.塑料尺

10.在Python中,獲取用戶輸入通過一個(gè)特殊的表達(dá)式來實(shí)現(xiàn),稱為。

a.       b.     c.同時(shí)賦值     d.

討論

1.列出并用你自己的語言描述軟件開發(fā)過程中的六個(gè)步驟。

2.寫出chaos.py程序(第1.6節(jié)),并識別程序的各部分如下:

圈出每個(gè)標(biāo)識符。

為每個(gè)表達(dá)式加下劃線。

在每一行的末尾添加注釋,指示該行上的語句類型(輸出、賦值、輸入、循環(huán)等)。

3.解釋確定循環(huán)、for循環(huán)和計(jì)數(shù)循環(huán)幾個(gè)概念之間的關(guān)系。

4.顯示以下片段的輸出:

a.

b.

c.

d.

5.先寫出一個(gè)算法的偽代碼而不是立即投入Python代碼,為什么是一個(gè)好主意?

6.除end之外,Python的函數(shù)還支持其他關(guān)鍵字參數(shù)。其中一個(gè)關(guān)鍵字參數(shù)是。你認(rèn)為參數(shù)是什么?(提示:是分隔符的縮寫。通過交互式執(zhí)行或通過查閱Python文檔來檢驗(yàn)?zāi)愕南敕ǎ?/p>

7.如果執(zhí)行下面的代碼,你認(rèn)為會(huì)發(fā)生什么?

print("start")

foriinrange(0):

print("Hello")

print("end")

看看本文的for語句的流程圖,幫助你弄明白。然后在程序中嘗試這些代碼,檢驗(yàn)?zāi)愕念A(yù)測。

編程練習(xí)

1.一個(gè)用戶友好的程序應(yīng)該打印一個(gè)介紹,告訴用戶程序做什么。修改convert.py程序(第2.2節(jié)),打印介紹。

2.在許多使用Python的系統(tǒng)上,可以通過簡單地點(diǎn)擊(或雙擊)程序文件的圖標(biāo)來運(yùn)行程序。如果你能夠以這種方式運(yùn)行convert.py程序,你可能會(huì)發(fā)現(xiàn)另一個(gè)可用性問題。 程序在新窗口中開始運(yùn)行,但程序一完成,窗口就會(huì)消失,因此你無法讀取結(jié)果。在程序結(jié)束時(shí)添加一個(gè)輸入語句,讓它暫停,給用戶一個(gè)讀取結(jié)果的機(jī)會(huì)。下面這樣的代碼應(yīng)該有效:

input("Press the key to quit.")

3.修改程序(第2.5.3節(jié)),找出三個(gè)考試成績的平均值。

4.使用循環(huán)修改程序(第2.2節(jié)),讓它在退出前執(zhí)行5次。每次通過循環(huán),程序應(yīng)該從用戶獲得另一個(gè)溫度,并打印轉(zhuǎn)換的值。

5.修改程序(第2.2節(jié)),讓它計(jì)算并打印一個(gè)攝氏溫度和華氏度的對應(yīng)表,從0℃到100℃,每隔10℃一個(gè)值。

6.修改程序(第2.7節(jié)),讓投資的年數(shù)也由用戶輸入。確保更改最后的消息,以反映正確的年數(shù)。

7.假設(shè)你有一個(gè)投資計(jì)劃,每年投資一定的固定金額。修改,計(jì)算你的投資的總累積值。該程序的輸入將是每年投資的金額、利率和投資的年數(shù)。

8.作為APR的替代方案,賬戶所產(chǎn)生的利息通常通過名義利率和復(fù)利期數(shù)來描述。例如,如果利率為3%,利息按季度計(jì)算復(fù)利,則該賬戶實(shí)際上每3個(gè)月賺取0.75%的利息。請修改程序,用此方法輸入利率。程序應(yīng)提示用戶每年的利率(rate)和利息每年復(fù)利的次數(shù)(periods)。要計(jì)算10年的價(jià)值,程序?qū)⒀h(huán)10 * periods次,并在每次迭代中累積rate/period的利息。

9.編寫一個(gè)程序,將溫度從華氏溫度轉(zhuǎn)換為攝氏溫度。

10.編寫一個(gè)程序,將以千米為單位的距離轉(zhuǎn)換為英里。1千米約為0.62英里。

11.編寫一個(gè)程序以執(zhí)行你自己選擇的單位轉(zhuǎn)換。確保程序打印介紹,解釋它的作用。

12.編寫一個(gè)交互式Python計(jì)算器程序。程序應(yīng)該允許用戶鍵入數(shù)學(xué)表達(dá)式,然后打印表達(dá)式的值。加入循環(huán),以便用戶可以執(zhí)行許多計(jì)算(例如,最多100個(gè))。注意:要提前退出,用戶可以通過鍵入一個(gè)錯(cuò)誤的表達(dá)式,或簡單地關(guān)閉計(jì)算器程序運(yùn)行的窗口,讓程序崩潰。在后續(xù)圖書節(jié)中,你將學(xué)習(xí)終止交互式程序的更好方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-838728.html

大家好,小編為大家解答用python編寫一個(gè)小程序的問題。很多人還不知道如何用python做小軟件,現(xiàn)在讓我們一起來看看吧!

python做微信小程序開發(fā),python怎么開發(fā)小程序,notepad++,人工智能

大家好,小編來為大家解答以下問題,如何用python做軟件開發(fā),用python開發(fā)軟件的步驟,今天讓我們一起來看看吧!

python做微信小程序開發(fā),python怎么開發(fā)小程序,notepad++,人工智能

參與文末每日話題討論,贈(zèng)送異步新書

異步圖書君

學(xué)習(xí)目標(biāo)

知道有序的軟件開發(fā)過程的步驟python弧形7段數(shù)碼管繪制。

了解遵循輸入、處理、輸出(IPO)模式的程序,并能夠以簡單的方式修改它們神碼ai偽原創(chuàng)不會(huì)c語言直接學(xué)python。

了解構(gòu)成有效Python標(biāo)識符和表達(dá)式的規(guī)則。

能夠理解和編寫Python語句,將信息輸出到屏幕,為變量賦值,獲取通過鍵盤輸入的信息,并執(zhí)行計(jì)數(shù)循環(huán)。

軟件開發(fā)過程

運(yùn)行已經(jīng)編寫的程序很容易。較難的部分實(shí)際上是先得到一個(gè)程序。計(jì)算機(jī)是非常實(shí)在的,必須告訴它們要做什么,直至最后的細(xì)節(jié)。編寫大型程序是一項(xiàng)艱巨的挑戰(zhàn)。如果沒有系統(tǒng)的方法,幾乎是不可能的。

創(chuàng)建程序的過程通常被分成幾個(gè)階段,依據(jù)是每個(gè)階段中產(chǎn)生的信息。簡而言之,你應(yīng)該做以下工作。

分析問題確定要解決的問題是什么。嘗試盡可能多地了解它。除非真的知道問題是什么,否則就不能開始解決它。

確定規(guī)格說明準(zhǔn)確描述程序?qū)⒆鍪裁?。此時(shí),你不必?fù)?dān)心程序"怎么做”,而是要確定它"做什么”。對于簡單程序,這包括仔細(xì)描述程序的輸入和輸出是什么以及它們的相互關(guān)系。

創(chuàng)建設(shè)計(jì)規(guī)劃程序的總體結(jié)構(gòu)。這是描述程序怎么做的地方。主要任務(wù)是設(shè)計(jì)算法來滿足規(guī)格說明。

實(shí)現(xiàn)設(shè)計(jì)將設(shè)計(jì)翻譯成計(jì)算機(jī)語言并放入計(jì)算機(jī)。在本書中,我們將算法實(shí)現(xiàn)為Python程序。

測試/調(diào)試程序試用你的程序,看看它是否按預(yù)期工作。如果有任何錯(cuò)誤(通常稱為"缺陷”),那么你應(yīng)該回去修復(fù)它們。定位和修復(fù)錯(cuò)誤的過程稱為"調(diào)試”程序。在調(diào)試階段,你的目標(biāo)是找到錯(cuò)誤,所以應(yīng)該嘗試你能想到的"打破”程序的一切可能。記住這句老格言:"沒有什么能防住人犯傻,因?yàn)樯底犹斆髁??!?/p>

維護(hù)程序繼續(xù)根據(jù)用戶的需求開發(fā)該程序。大多數(shù)程序從來沒有真正完成,它們在多年的使用中不斷演進(jìn)。

示例程序:溫度轉(zhuǎn)換器

讓我們通過一個(gè)真實(shí)世界的簡單例子,來體驗(yàn)軟件開發(fā)過程的步驟,其中涉及一個(gè)虛構(gòu)的計(jì)算機(jī)科學(xué)學(xué)生Susan Computewell。

Susan正在德國學(xué)習(xí)一年。她對語言沒有任何問題,因?yàn)樗芰骼厥褂迷S多語言(包括Python)。她的問題是,很難在早上弄清楚溫度從而知道當(dāng)天該穿什么衣服。Susan每天早上聽天氣報(bào)告,但溫度以攝氏度給出,她習(xí)慣了華氏度。

幸運(yùn)的是,Susan有辦法解決這個(gè)問題。作為計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生,她去任何地方總是帶著她的筆記本計(jì)算機(jī)。她認(rèn)為計(jì)算機(jī)程序可能會(huì)幫助她。

Susan開始分析她的問題。在這個(gè)例子中,問題很清楚:無線電廣播員用攝氏度報(bào)氣溫,但Susan只能理解華氏溫度。

接下來,Susan考慮可能幫助她的程序的規(guī)格說明。輸入應(yīng)該是什么?她決定程序?qū)⒃试S她輸入攝氏溫度。輸出呢?程序?qū)@示轉(zhuǎn)換后的華氏溫度。現(xiàn)在她需要指定輸出與輸入的確切關(guān)系。

蘇珊快速估算了一下。她知道0攝氏度(冰點(diǎn))等于32華氏度,100攝氏度(沸點(diǎn))等于212華氏度。有了這個(gè)信息,她計(jì)算出華氏度與攝氏度的比率為(212?32)/(100?0) = (180/100) = 9/5。使用F表示華氏溫度,C表示攝氏溫度,轉(zhuǎn)換公式的形式為F= (9/5)C+k,其中k為某個(gè)常數(shù)。代入0和32分別作為C和F,Susan立即得到k= 32。所以最后的關(guān)系公式是F= (9/5)C+ 32。這作為規(guī)格說明似乎足夠了。

請注意,這描述了能夠解決這個(gè)問題的許多可能程序中的一個(gè)。如果Susan有人工智能(AI)領(lǐng)域的背景,她可能會(huì)考慮寫一個(gè)程序,用語音識別算法實(shí)際收聽收音機(jī)播音員,獲得當(dāng)前的溫度。對于輸出,她可以讓計(jì)算機(jī)控制機(jī)器人進(jìn)入她的衣柜,并根據(jù)轉(zhuǎn)換后的溫度選擇適當(dāng)?shù)姆b。這將是一個(gè)更有野心的項(xiàng)目,一點(diǎn)也不夸張!

當(dāng)然,機(jī)器人程序也會(huì)解決問題分析中識別的問題。規(guī)格說明的目的,是準(zhǔn)確地決定這個(gè)特定的程序要做什么,從而解決一個(gè)問題。Susan知道,最好是先弄清楚她希望構(gòu)建什么,而不是一頭鉆進(jìn)去開始編程。

Susan現(xiàn)在準(zhǔn)備為她的問題設(shè)計(jì)一個(gè)算法。她馬上意識到這是一個(gè)簡單算法,遵循標(biāo)準(zhǔn)模式"輸入、處理、輸出”(IPO)。她的程序?qū)⑻崾居脩糨斎胍恍┬畔ⅲ〝z氏溫度),處理它,產(chǎn)生華氏溫度,然后在計(jì)算機(jī)屏幕上顯示結(jié)果,作為輸出。

Susan可以用一種計(jì)算機(jī)語言來寫她的算法。然而,正式將它寫出來需要相當(dāng)?shù)木?,這常常會(huì)扼殺開發(fā)算法的創(chuàng)造性過程。作為替代,她用"偽代碼”編寫算法。偽代碼只是精確的英語,描述了程序做的事。這意味著既可以交流算法,又不必讓大腦承擔(dān)額外的開銷,正確寫出某種特定編程語言的細(xì)節(jié)。

下面是Susan的完整算法:

輸入攝氏度溫度(稱為celsius)

計(jì)算華氏度為(9/5)celsius + 32

輸出華氏度

下一步是將此設(shè)計(jì)轉(zhuǎn)換為Python程序。這很直接,因?yàn)樗惴ǖ拿恳恍卸甲兂闪讼鄳?yīng)的Python代碼行。

# convert.py

# A program to convert Celsius temps to Fahrenheit

# by: Susan Computewell

defmain():

celsius = eval(input("What is the Celsius temperature? "))

fahrenheit =9/5* celsius +32

print("The temperature is", fahrenheit,"degrees Fahrenheit.")

main()

看看你是否能弄清楚這個(gè)程序的每一行做了什么。如果一些部分不是很清楚,也不要擔(dān)心,下一節(jié)將詳細(xì)討論。

完成程序后,Susan測試它,看看它工作得如何。她使用她知道正確答案的輸入。下面是兩個(gè)測試的輸出:

Whatisthe Celsius temperature?

The temperatureis32.0degrees Fahrenheit.

Whatisthe Celsius temperature?100

The temperatureis212.0degrees Fahrenheit.

你可以看到,Susan用值0和100來測試她的程序。看起來不錯(cuò),她對解決方案感到滿意。她特別高興的是,似乎沒有必要調(diào)試(這很不尋常)。

程序要素

既然已經(jīng)知道了編程過程,你就"幾乎”準(zhǔn)備好開始自己編寫程序了。在此之前,你需要更完整的基礎(chǔ),了解Python的基本知識。接下來的幾節(jié)將討論一些技術(shù)細(xì)節(jié),這對編寫正確程序至關(guān)重要。這種材料看起來有點(diǎn)乏味,但你必須掌握這些基礎(chǔ),然后再進(jìn)入更有趣的領(lǐng)域。

1 名稱

你已經(jīng)看到,名稱是編程的重要組成部分。我們?yōu)槟K命名(例如convert),也為模塊中的函數(shù)命名(例如main)。變量用于為值命名(例如celsius和fahrenheit)。從技術(shù)上講,所有這些名稱都稱為"標(biāo)識符”。Python對標(biāo)識符的構(gòu)成有一些規(guī)則。每個(gè)標(biāo)識符必須以字母或下劃線("_”字符)開頭,后跟字母、數(shù)字或下劃線的任意序列。這意味著單個(gè)標(biāo)識符不能包含任何空格。

根據(jù)上述規(guī)則,以下都是Python中的合法名稱:

x

celsius

spam

spam2

SpamAndEggs

Spam_and_Eggs

標(biāo)識符區(qū)分大小寫,因此對Python來說,spam、Spam、sPam和SPAM是不同的名稱。在大多數(shù)情況下,程序員可以自由選擇符合這些規(guī)則的任何名稱。好的程序員總是試圖選擇一些名字,它們能描述被命名的東西。

需要注意一件重要的事情:一些標(biāo)識符是Python本身的一部分。這些名稱稱為"保留字”或"關(guān)鍵字”,不能用作普通標(biāo)識符。Python關(guān)鍵字的完整列表如表1所列。

表1  Python關(guān)鍵字

False

class

finally

is

return

Python還包括相當(dāng)多的內(nèi)置函數(shù),例如我們用過的print函數(shù)。雖然在技術(shù)上可以將內(nèi)置的函數(shù)名稱標(biāo)識符用于其他目的,但這通常是一個(gè)"非常糟糕”的主意。例如,如果你重新定義print的含義,那么就無法再打印信息。你也會(huì)讓所有閱讀程序的Python程序員感到非常困惑,他們預(yù)期print指的是內(nèi)置函數(shù)。內(nèi)置函數(shù)的完整列表可在附錄A中找到。

2 表達(dá)式

程序操作數(shù)據(jù)。到目前為止,我們已經(jīng)在示例程序中看到了數(shù)字和文本兩種不同類型的數(shù)據(jù)。我們將在后面的節(jié)中詳細(xì)討論這些不同的數(shù)據(jù)類型。現(xiàn)在,你只需要記住,所有的數(shù)據(jù)必須以一些數(shù)字格式存儲(chǔ)在計(jì)算機(jī)上,不同類型的數(shù)據(jù)以不同的方式存儲(chǔ)。

產(chǎn)生或計(jì)算新數(shù)據(jù)值的程序代碼片段稱為"表達(dá)式”。最簡單的表達(dá)式是字面量。字面量用于表示特定值。在chaos.py中,你可以找到數(shù)字3.9和1。convert.py程序包含9、5和32。這些都是數(shù)字字面量的例子,它們的含義顯而易見:32就是代表32(數(shù)字32)。

我們的程序還以一些簡單的方式處理文本數(shù)據(jù)。計(jì)算機(jī)科學(xué)家將文本數(shù)據(jù)稱為"字符串”。你可以將字符串視為可打印字符的序列。Python中通過將字符括在引號("")中來表示字符串字面量。如果你回頭看看我們的示例程序,可以發(fā)現(xiàn)一些字符串字面量,例如"Hello"和"Enter a number between 0 and 1:"。這些字面量產(chǎn)生的字符串包含引號內(nèi)的字符。請注意,引號本身不是字符串的一部分。它們只是告訴Python創(chuàng)建一個(gè)字符串的機(jī)制。

將表達(dá)式轉(zhuǎn)換為基礎(chǔ)數(shù)據(jù)類型的過程稱為"求值”。在Python shell中鍵入表達(dá)式時(shí),shell會(huì)計(jì)算表達(dá)式并打印出結(jié)果的文本表示。請考慮以下簡短的交互:

>>>32

32

>>>"Hello"

'Hello'

>>>"32"

'32'

請注意,當(dāng)shell顯示字符串的值時(shí),它將字符序列放在單引號中。這樣讓我們知道該值實(shí)際上是文本而不是數(shù)字(或其他數(shù)據(jù)類型)。在最后一次交互中,我們看到表達(dá)式"32"產(chǎn)生一個(gè)字符串,而不是一個(gè)數(shù)字。在這種情況下,Python實(shí)際上是存儲(chǔ)字符"3”和"2”,而不是數(shù)字32的表示。如果你現(xiàn)在不太明白,不要太擔(dān)心。我們在后面的節(jié)中討論這些數(shù)據(jù)類型時(shí),你的理解就會(huì)變得更加清晰。

一個(gè)簡單的標(biāo)識符也可以是一個(gè)表達(dá)式。我們使用標(biāo)識符作為變量來給名字賦值。當(dāng)標(biāo)識符作為表達(dá)式出現(xiàn)時(shí),它的值會(huì)被取出,作為表達(dá)式的結(jié)果。下面是與Python解釋器的交互,展示了變量作為表達(dá)式:

>>> x =5

>>> x

5

>>> print(x)

5

>>> print(spam)

Traceback (most recent call last):

File"", line1,in

NameError:name'spam'isnotdefined

首先,變量x被賦值為5(使用數(shù)字字面量5)。在第二行交互中,我們要求Python對表達(dá)式x求值。作為響應(yīng),Python shell打印出5,這是剛才賦給x的值。當(dāng)然,如果我們明確要求Python用print語句打印x,也會(huì)得到相同的結(jié)果。最后一個(gè)交互展示了如果嘗試使用未賦值的變量,會(huì)發(fā)生什么。Python找不到值,所以它報(bào)告NameError。這說明沒有該名稱的值。這里的要點(diǎn)是,變量總是必須賦一個(gè)值,然后才能在表達(dá)式中使用。

較復(fù)雜、較有趣的表達(dá)式可以通過組合較簡單的表達(dá)式和操作符來構(gòu)造。對于數(shù)字,Python提供了一組標(biāo)準(zhǔn)的數(shù)學(xué)運(yùn)算:加法、減法、乘法、除法和乘方。相應(yīng)的Python運(yùn)算符為"+”"-”"*”"/”和"**”。下面是一些來自chaos.py和convert.py的復(fù)雜表達(dá)式的例子:

3.9* x *(1 - x)

9/5 * celsius + 32

空格在表達(dá)式中沒有作用。最后一個(gè)表達(dá)式如果寫成9/5*celsius+32,結(jié)果完全相同。通常,在表達(dá)式中加一些空格讓它更容易閱讀,是個(gè)好方法。

Python的數(shù)學(xué)運(yùn)算符遵循的優(yōu)先級和結(jié)合律,與你在數(shù)學(xué)課上學(xué)到的相同,包括使用括號來改變求值的順序。在自己的程序中構(gòu)建復(fù)雜表達(dá)式應(yīng)該沒什么困難。請記住,只有圓括號在數(shù)字表達(dá)式中是允許的。如果需要,可以嵌套使用它們,創(chuàng)建如下的表達(dá)式:

((x1 - x2) / 2*n) + (spam / k**3)

順便說一句,Python還提供了字符串的運(yùn)算符。例如,可以"加”字符串。

>>>"Bat"+"man"

'Batman'

這被稱為"連接”。如你所見,效果是創(chuàng)建一個(gè)新的字符串,把兩個(gè)字符串"粘”在一起。

3 輸出語句

既然有了基本的構(gòu)建塊(標(biāo)識符和表達(dá)式),你就可以更完整地描述各種Python語句。 你已經(jīng)知道信息可以使用Python的內(nèi)置函數(shù)print在屏幕上顯示。到目前為止,我們已經(jīng)看了幾個(gè)例子,但我還沒有詳細(xì)解釋打印功能。像所有的編程語言一樣,Python對每個(gè)語句的語法(形式)和語義(意義)有一套精確的規(guī)則。計(jì)算機(jī)科學(xué)家已經(jīng)開發(fā)了復(fù)雜的符號表示法,稱為"元語言”,用于描述編程語言。在本書中,我們將依靠一個(gè)簡單的模板符號表示法來說明各種語句的語法。

因?yàn)閜rint是一個(gè)內(nèi)置函數(shù),所以print語句與任何其他函數(shù)調(diào)用具有相同的一般形式。我們鍵入函數(shù)名print,后面帶上括號中列出的參數(shù)。下面是用我們的模板符號時(shí)print語句看起來的樣子:

print(,, ...,)

print()

這兩個(gè)模板展示了兩種形式的print語句。第一個(gè)表示print語句可以包含函數(shù)名print,后面帶上帶括號的表達(dá)式序列,用逗號分隔。模板中的尖括號符號()用于表示由Python代碼的其他片段填充的"槽”。括號內(nèi)的名稱表示缺少什么,expr表示一個(gè)表達(dá)式。省略號("...”)表示不確定的序列(在這個(gè)例子中是表達(dá)式)。你實(shí)際上不會(huì)輸入圓點(diǎn)。第二個(gè)版本的print語句表明,不打印任何表達(dá)式的print也是合法的。

就語義而言,print語句以文本形式顯示信息。所有提供的表達(dá)式都從左到右求值,結(jié)果值以從左到右的方式顯示在輸出行上。默認(rèn)情況下,在顯示的值之間放置一個(gè)空格字符。作為示例,下面print語句的序列:

print(3+4)

print(3, 4, 3 + 4)

print()

print("The answer is", 3 + 4)

產(chǎn)生的輸出為:

7

347

The answeris7

最后一個(gè)語句說明了,字符串字面量表達(dá)式如何經(jīng)常在print語句使用,作為標(biāo)記輸出的方便方法。

注意,連續(xù)的print語句通常顯示在屏幕的不同行上??誴rint(無參數(shù))生成空行輸出。在背后,真正發(fā)生的是,在打印所有提供的表達(dá)式之后,print函數(shù)自動(dòng)附加某種結(jié)束文本。默認(rèn)情況下,結(jié)束文本是表示行結(jié)束的特殊標(biāo)記字符(表示為" ”)。我們可以通過包含一個(gè)附加參數(shù)顯式地覆蓋這個(gè)默認(rèn)值,從而改變這種行為。這里使用命名參數(shù)的特殊語法,或稱為"關(guān)鍵字”參數(shù)。

包含指定結(jié)束文本的關(guān)鍵字參數(shù)的print語句的模板如下:

print(,, ...,, end=" ")

命名參數(shù)的關(guān)鍵字是end,它使用"=”符號賦值,類似于變量賦值。注意,在模板中我已經(jīng)顯示其默認(rèn)值,即行末字符。這是一種標(biāo)準(zhǔn)方式,用于顯示在未明確指定某個(gè)其他值時(shí),關(guān)鍵字參數(shù)具有的值。

print語句中的end參數(shù)有一個(gè)常見用法,即允許多個(gè)print構(gòu)建單行輸出。例如:

print("The answer is", end=" ")

print(3 + 4)

產(chǎn)生單行輸出:

The answeris7

注意,第一個(gè)print語句的輸出如何以空格(" ")而不是行末字符結(jié)束,第二個(gè)語句的輸出緊跟在空格之后。

4 賦值語句

Python中最重要的語句之一是賦值語句。我們在前面的例子中已經(jīng)看到了一些。

簡單賦值

基本賦值語句具有以下形式:

=

這里variable是一個(gè)標(biāo)識符,expr是一個(gè)表達(dá)式。賦值的語義是,右側(cè)的表達(dá)式被求值,然后產(chǎn)生的值與左側(cè)命名的變量相關(guān)聯(lián)。

下面是我們已經(jīng)看到的一些賦值:

x=3.9* x * (1- x)

fahrenheit=9/5* celsius +32

x=5

變量可以多次賦值。它總是保留最新賦的值。下面的交互式Python會(huì)話展示了這一點(diǎn):

>>> myVar =

>>> myVar

>>> myVar =7

>>> myVar

7

>>> myVar = myVar +1

>>> myVar

8

最后一個(gè)賦值語句展示了如何使用變量的當(dāng)前值來更新它的值。在這個(gè)例子中,我只是對以前的值加1。記住,變量的值可以改變,這就是為什么它們被稱為變量的原因。

有時(shí),將變量看作計(jì)算機(jī)內(nèi)存中的一種命名的存儲(chǔ)位置是有幫助的,我們可以在其中放入一個(gè)值。當(dāng)變量更改時(shí),舊值將被刪除,并寫入一個(gè)新值。圖1展示了用這個(gè)模型來描繪x=x+ 1的效果。這正是賦值在某些計(jì)算機(jī)語言中工作的方式。這也是查看賦值效果的一種非常簡單的方式,你會(huì)在整本書中看到類似這樣的圖片。

圖1x=x+ 1的視圖,變量就像盒子

Python賦值語句實(shí)際上與"變量盒子”模型略有不同。在Python中,值可能最終放在內(nèi)存中的任何位置,而變量用于引用它們。對變量賦值就像把一個(gè)黃色小粘貼便簽放在值上,并說"這是x”。圖2給出了一個(gè)更準(zhǔn)確的Python賦值的效果。箭頭用于顯示變量引用的值。請注意,舊值不會(huì)被新值擦除,變量只需切換到引用新值。效果就像將粘貼便簽從一個(gè)對象移動(dòng)到另一個(gè)對象一樣。這是賦值在Python中實(shí)際工作的方式,所以你會(huì)看到這樣一些粘貼便簽樣式的圖片散布在本書中。

圖2

x=x+ 1的(Python)視圖,變量就像便簽

順便說一句,即使賦值語句不直接導(dǎo)致變量的舊值被擦除和覆蓋,你也不必?fù)?dān)心計(jì)算機(jī)內(nèi)存中充滿"被丟棄”的值。如果一個(gè)值不再被任何變量引用,它就不再有用。Python將自動(dòng)從內(nèi)存中清除這些值,以便空間可以用于存放新值。這就像檢查你的衣柜,拋出沒有粘貼便簽標(biāo)記的東西。實(shí)際上,這個(gè)自動(dòng)內(nèi)存管理的過程確實(shí)被稱為"垃圾收集”。

賦值輸入

輸入語句的目的是從程序的用戶那里獲取一些信息,并存儲(chǔ)到變量中。一些編程語言有一個(gè)特殊的語句來做到這一點(diǎn)。在Python中,輸入是用一個(gè)賦值語句結(jié)合一個(gè)內(nèi)置函數(shù)input實(shí)現(xiàn)的。輸入語句的確切形式,取決于你希望從用戶那里獲取的數(shù)據(jù)類型。對于文本輸入,語句如下所示:

= input(

)

這里的

是一個(gè)字符串表達(dá)式,用于提示用戶輸入。提示幾乎總是一個(gè)字符串字面量(即引號內(nèi)的一些文本)。

當(dāng)Python遇到對input的調(diào)用時(shí),它在屏幕上打印提示。然后,Python暫停并等待用戶鍵入一些文本,鍵入完成后按鍵。用戶輸入的任何東西都會(huì)存儲(chǔ)為字符串。請考慮以下簡單的交互:

>>> name = input("Enter your name: ")

Enter yourname:John Yaya

>>> name

'John Yaya'

執(zhí)行input語句導(dǎo)致Python打印輸出提示"Enter your name:”,然后解釋器暫停,等待用戶輸入。在這個(gè)例子中,我鍵入John Yaya。結(jié)果,字符串"John Yaya”被記在變量name中。對name求值將返回我鍵入的字符串。

如果用戶輸入是一個(gè)數(shù)字,我們需要形式稍復(fù)雜一點(diǎn)的input語句:

=eval(input(

))

這里我添加了另一個(gè)內(nèi)置的Python函數(shù)eval,它"包裹”了input函數(shù)。你可能會(huì)猜到,eval是"evaluate(求值)”的縮寫。在這種形式中,用戶鍵入的文本被求值為一個(gè)表達(dá)式,以產(chǎn)生存儲(chǔ)到變量中的值。舉例來說,字符串"32”就變成數(shù)字32。如果回頭看看示例程序,到目前為止,你會(huì)看到幾個(gè)例子,我們像這樣從用戶那里得到了數(shù)字。

x= eval(input("Please enter a number between 0 and 1: "))

celsius= eval(input("What is the Celsius temperature? "))

重要的是要記住,如果希望得到一個(gè)數(shù)字,而不是一些原始文本(字符串),需要對input進(jìn)行eval。

如果你仔細(xì)閱讀示例程序,可能會(huì)注意到所有這些提示結(jié)尾處的引號內(nèi)的空格。我通常在提示的末尾放置一個(gè)空格,以便用戶輸入的內(nèi)容不會(huì)緊接著提示開始。放上空格可以讓交互更容易閱讀和理解。

雖然我們的數(shù)字示例特別提示用戶輸入數(shù)字,但在這個(gè)例子中,用戶鍵入的只是一個(gè)數(shù)字字面量,即一個(gè)簡單的Python表達(dá)式。事實(shí)上,任何有效的表達(dá)式都是可接受的。請考慮下面與Python解釋器的交互:

>>> ans = eval(input("Enter an expression: "))

Enter anexpression:3+4*5

>>> print(ans)

23

>>>

這里,提示輸入表達(dá)式時(shí),用戶鍵入"3 + 4 * 5”。Python對此表達(dá)式求值(通過eval),并將值賦給變量ans。打印時(shí),我們看到ans的值為23,與預(yù)期一樣。在某種意義上,input-eval組合就像一個(gè)延遲的表達(dá)式。示例交互產(chǎn)生完全相同的結(jié)果,就像我們簡單地寫成ans = 3 + 4 * 5一樣。不同的是,表達(dá)式由用戶在語句執(zhí)行時(shí)提供,而不是由程序員在編程時(shí)輸入。

注意:eval函數(shù)功能非常強(qiáng)大,也有"潛在的危險(xiǎn)”。如本例所示,當(dāng)我們對用戶輸入求值時(shí),本質(zhì)上是允許用戶輸入一部分程序。Python將盡職盡責(zé)地對他們輸入的任何內(nèi)容求值。了解Python的人可以利用這種能力輸入惡意指令。例如,用戶可以鍵入記錄計(jì)算機(jī)上的私人信息或刪除文件的表達(dá)式。在計(jì)算機(jī)安全中,這被稱為"代碼注入”攻擊,因?yàn)楣粽邔阂獯a注入正在運(yùn)行的程序中。

作為一名新程序員,編程給自己個(gè)人使用,計(jì)算機(jī)安全不是很大的問題。如果你坐在一臺(tái)運(yùn)行Python程序的計(jì)算機(jī)前面,你可能擁有對系統(tǒng)的完全訪問權(quán)限,并且可以找到更簡單的方法來刪除所有文件。然而,如果一個(gè)程序的輸入來自不受信任的來源,例如來自互聯(lián)網(wǎng)上的用戶,使用eval可能是災(zāi)難性的。

同時(shí)賦值

有一個(gè)賦值語句的替代形式,允許我們同時(shí)計(jì)算幾個(gè)值。它看起來像這樣:

,, ...,=,, ...,

這稱為"同時(shí)賦值”。語義上,這告訴Python對右側(cè)所有表達(dá)式求值,然后將這些值賦給左側(cè)命名的相應(yīng)變量。下面是一個(gè)例子:

sum, diff = x+y, x-y

這里,sum得到x和y的和,diff得到x和y的差。

這種形式的賦值初看很奇怪,但實(shí)際上非常有用。這里有一個(gè)例子:假設(shè)有兩個(gè)變量x和y,你希望交換它們的值。也就是說,你希望將當(dāng)前存儲(chǔ)在x中的值存儲(chǔ)在y中,將當(dāng)前存儲(chǔ)在y中的值存儲(chǔ)在x中。首先,你可能認(rèn)為這可以通過兩個(gè)簡單的賦值來完成:

x= y

y= x

這不行。我們可以一步一步地跟蹤這些語句的執(zhí)行,看看為什么。

假設(shè)x和y開始的值是2和4。讓我們檢查程序的邏輯,看看變量是如何變化的。以下序列用注釋描述了在執(zhí)行這兩個(gè)語句時(shí)變量會(huì)發(fā)生什么:

# 變量 x y

# 初始值 2 4

x= y

# 現(xiàn)在是 4 4

y= x

# 最后是 4 4

看到第一個(gè)語句將y的值賦給x,從而修改了x的原始值嗎?當(dāng)我們在第二步將x的值賦給y時(shí),最終得到了原始y值的兩個(gè)副本。

完成交換的一種方法是引入一個(gè)附加變量,它暫時(shí)記住x的原始值。

temp= x

x= y

y= temp

讓我們來看看這個(gè)序列是如何工作的。

# 變量 x y temp

# 初始值 2 4 暫時(shí)無值

temp= x

# 2 4 2

x= y

# 4 4 2

y= temp

# 4 2 2

從x和y的最終值可以看出,在這個(gè)例子中,交換成功。

這種三變量交換的方式在其他編程語言中很常見。在Python中,同時(shí)賦值語句提供了一種優(yōu)雅的選擇。下面是更簡單的Python等價(jià)寫法:

x, y = y, x

因?yàn)橘x值是同時(shí)的,所以它避免了擦除一個(gè)原始值。

同時(shí)賦值也可以用單個(gè)input從用戶那里獲取多個(gè)數(shù)字。請考慮下面的程序,它求出考試平均分:

# avg2.py

# A simple program to average two exam scores

# Illustrates use of multiple input

defmain():

print("This program computes the average of two exam scores.")

score1, score2 = eval(input("Enter two scores separated by a comma: "))

average = (score1 + score2) /2

print("The average of the scores is:", average)

main()

該程序提示用逗號分隔兩個(gè)分?jǐn)?shù)。假設(shè)用戶鍵入86,92。input語句的效果就像進(jìn)行以下賦值:

score1, score2 = 86, 92

我們已經(jīng)為每個(gè)變量獲得了一個(gè)值。這個(gè)例子只用了兩個(gè)值,但可以擴(kuò)展到任意數(shù)量的輸入。

當(dāng)然,我們也可以通過單獨(dú)的input語句獲得用戶的輸入:

score1= eval(input("Enter the first score: "))

score2= eval(input("Enter the second score: "))

某種程度上,這可能更好,因?yàn)閱为?dú)的提示對用戶來說信息更準(zhǔn)確。在這個(gè)例子中,決定采用哪種方法在很大程度上是品位問題。有時(shí)在單個(gè)input中獲取多個(gè)值提供了更直觀的用戶接口,因此在你的工具包中,這是一項(xiàng)好技術(shù)。但要記住,多個(gè)值的技巧不適用于字符串(非求值)輸入,如果用戶鍵入逗號,它只是輸入字符串中的一個(gè)字符。逗號僅在隨后對字符串求值時(shí),才成為分隔符。

確定循環(huán)

你已經(jīng)知道,程序員用循環(huán)連續(xù)多次執(zhí)行一系列語句。最簡單的循環(huán)稱為"確定循環(huán)”。這是會(huì)執(zhí)行一定次數(shù)的循環(huán)。也就是說,在程序中循環(huán)開始時(shí),Python就知道循環(huán)(或"迭代”)的次數(shù)。例如,前面介紹的chaos程序用了一個(gè)總是執(zhí)行10次的循環(huán):

foriinrange(10):

x = 3.9 * x * (1 - x)

print(x)

這個(gè)特定的循環(huán)模式稱為"計(jì)數(shù)循環(huán)”,它用Python的for語句構(gòu)建。在詳細(xì)分析這個(gè)例子之前,讓我們來看看什么是for循環(huán)。

Python的for循環(huán)具有以下一般形式:

forin:

循環(huán)體可以是任意Python語句序列。循環(huán)體的范圍通過它在循環(huán)頭(for in :部分)下面的縮進(jìn)來表示。

關(guān)鍵字for后面的變量稱為"循環(huán)索引”。它依次取sequence中的每個(gè)值,并針對每個(gè)值都執(zhí)行一次循環(huán)體中的語句。通常,sequence部分由值"列表”構(gòu)成。列表是Python中一個(gè)非常重要的概念,你將在后續(xù)節(jié)中了解更多。現(xiàn)在只要知道,可以在方括號中放置一系列表達(dá)式,從而創(chuàng)建一個(gè)簡單的列表。下列交互示例有助于說明這一點(diǎn):

你能看到這兩個(gè)例子做了什么嗎?依次使用列表中的每個(gè)值執(zhí)行了循環(huán)體。列表的長度決定了循環(huán)執(zhí)行的次數(shù)。在第一個(gè)例子中,列表包含4個(gè)值,即0至3,并且簡單地打印了這些連續(xù)的i值。在第二個(gè)例子中,odd取前5個(gè)奇數(shù)的值,循環(huán)體打印了這些數(shù)字的平方。

現(xiàn)在,讓我們回到這一節(jié)開始的例子(來自chaos.py)再看一下循環(huán)頭:

foriinrange(10):

將它與for循環(huán)的模板進(jìn)行比較可以看出,最后一個(gè)部分range(10)必定是某種序列。事實(shí)上,range是一個(gè)內(nèi)置的Python函數(shù),用于"當(dāng)場”生成一個(gè)數(shù)字序列。你可以認(rèn)為range是一種數(shù)字序列的隱性描述。要明白range實(shí)際上做了什么,我們可以要求Python用另一個(gè)內(nèi)置函數(shù)list,將range轉(zhuǎn)換為一個(gè)簡單的舊式列表:

>>> list(range(10))# turns range(10) into an explicit list

[,1,2,3,4,5,6,7,8,9]

你看到這里發(fā)生了什么嗎?表達(dá)式range(10)產(chǎn)生數(shù)字0到9的序列。使用range(10)的循環(huán)等價(jià)于使用那些數(shù)字的列表的循環(huán)。

foriin[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:

一般來說,range()將產(chǎn)生一個(gè)數(shù)字序列,從0開始,但不包括的值。如果你想一想,就會(huì)發(fā)現(xiàn)表達(dá)式的值確定了結(jié)果序列中的項(xiàng)數(shù)。在chaos.py中,我們甚至不關(guān)心循環(huán)索引變量使用了什么值(因?yàn)閕沒有在循環(huán)體中的任何位置引用)。我們只需要一個(gè)長度為10的序列,讓循環(huán)體執(zhí)行10次。

正如前面提到的,這種模式稱為"計(jì)數(shù)循環(huán)”,它是使用確定循環(huán)的一種很常見的方式。如果你希望在程序中做一定次數(shù)的某些事,請用一個(gè)帶有合適range的for循環(huán)。下面一個(gè)反復(fù)出現(xiàn)的Python編程習(xí)語,你需要記?。?/p>

forinrange():

表達(dá)式的值確定了循環(huán)執(zhí)行的次數(shù)。索引變量的名稱實(shí)際上并不重要,程序員經(jīng)常使用i或j作為計(jì)數(shù)循環(huán)的循環(huán)索引變量。只要確保使用的標(biāo)識符沒有用于任何其他目的,否則你可能會(huì)不小心清除稍后需要的值。

循環(huán)的有趣和有用之處在于,它們改變程序"控制流”的方式。通常我們認(rèn)為計(jì)算機(jī)是嚴(yán)格按順序執(zhí)行一系列指令。引入循環(huán)會(huì)導(dǎo)致Python退回去并重復(fù)執(zhí)行一些語句。類似for循環(huán)的語句稱為"控制結(jié)構(gòu)”,因?yàn)樗鼈兛刂瞥绦蚱渌糠值膱?zhí)行。

一些程序員發(fā)現(xiàn),用圖片的方式來思考控制結(jié)構(gòu)是有幫助的,即所謂的"流程圖”。流程圖用一些框來表示程序的不同部分,并用框之間的箭頭表示程序運(yùn)行時(shí)的事件序列。圖3用流程圖描述了for循環(huán)的語義。

圖3 for循環(huán)的流程圖

如果你在理解for循環(huán)時(shí)遇到困難,可能會(huì)發(fā)現(xiàn)學(xué)習(xí)流程圖很有用。流程圖中的菱形框表示程序中的決定。當(dāng)Python遇到循環(huán)頭時(shí),它檢查序列中是否有項(xiàng)。如果答案為"是”,則循環(huán)索引變量被賦予序列中的下一項(xiàng),然后執(zhí)行循環(huán)體。一旦循環(huán)體完成,程序返回到循環(huán)頭并檢查序列中的下一個(gè)值。如果沒有更多的項(xiàng),循環(huán)就退出,程序移動(dòng)到循環(huán)之后的語句。

示例程序:終值

我們用另一個(gè)編程過程的例子來結(jié)束本文。我們希望開發(fā)一個(gè)程序來確定投資的終值。我們將從對問題的分析開始。你知道存入銀行賬戶的錢會(huì)賺取利息,這個(gè)利息隨著時(shí)間的推移而累積。從現(xiàn)在起10年后,一個(gè)賬戶將有多少錢?顯然,這取決于我們開始有多少錢(本金)以及賬戶賺多少利息。給定本金和利率,程序應(yīng)該能夠計(jì)算未來10年投資的終值。

我們繼續(xù)制定程序的確切規(guī)格說明。記住,這是程序做什么的描述。輸入應(yīng)該是什么?我們需要用戶輸入初始投資金額,即本金。我們還需要說明賬戶賺多少利息。這取決于利率和計(jì)復(fù)利的頻率。處理此問題的一種簡單方法是讓用戶輸入年度百分比率。無論實(shí)際利率和復(fù)利頻率如何,年利率告訴我們一年內(nèi)的投資收益。如果年利率為3%,那么100美元的投資將在一年的時(shí)間內(nèi)增長到103美元。用戶應(yīng)如何表示年利率3%?有一些合理的選擇。讓我們假設(shè)用戶提供一個(gè)小數(shù),因此利率將輸入為0.03。

這樣就得到以下規(guī)格說明:

程序 終值

輸入

principal 投資于美元的金額。

APR 以十進(jìn)制數(shù)表示的年度百分比利率。

輸出 投資10年后的終值。

關(guān)系 一年后的價(jià)值由principal(1 + apr)給出。該公式需要應(yīng)用10次。

接下來為程序設(shè)計(jì)一個(gè)算法。我們將使用偽代碼,這樣就可以闡明我們的想法而又不必?fù)?dān)心Python的所有規(guī)則。對于我們的規(guī)格說明,算法看起來很簡單。

打印介紹

輸入本金的金額(principal)

輸入年度百分比利率(apr)

重復(fù)10次:

principal = principal *(1 + apr)

輸出principal的值

如果你知道一些金融數(shù)學(xué)(或者只是一些基本代數(shù))的知識,可能會(huì)意識到,在這個(gè)設(shè)計(jì)中并不一定要用循環(huán)。有一個(gè)公式可以利用乘冪一步算出終值。我在這里用了一個(gè)循環(huán)來展示另一個(gè)計(jì)數(shù)循環(huán),另一個(gè)原因是這個(gè)版本適合進(jìn)行一些修改,在本文末尾的編程練習(xí)中將討論。無論如何,這個(gè)設(shè)計(jì)說明有時(shí)算法的計(jì)算方式可以讓數(shù)學(xué)更容易。知道如何計(jì)算一年的利息,就讓我們能計(jì)算未來任意年數(shù)的利息。

既然我們已經(jīng)在偽代碼中想明白了這個(gè)問題,現(xiàn)在該利用我們的Python新知識開發(fā)一個(gè)程序了。算法的每一行都轉(zhuǎn)換為一條Python語句:

打印介紹(print語句,第2.4節(jié))

print("This program calculates the future value")

print("of a 10-year investment.")

輸入本金的金額(數(shù)值input,第2.5.2節(jié))

principal =eval(input("Enter the initial principal: "))

輸入年度百分比利率(數(shù)值input,第2.5.2節(jié))

apr =eval(input("Enter the annual interest rate: "))

重復(fù)10次:(計(jì)數(shù)循環(huán),第2.6節(jié))

foriinrange(10):

計(jì)算principal = principal * (1 + apr)(簡單賦值,第2.5.1節(jié))

principal = principal * (1 + apr)

輸出principal的值(print語句,第2.4節(jié))

print("The value in 10 years is:", principal)

該程序中的所有語句類型都已在本文中詳細(xì)討論過。如果有任何問題,請回頭查看相關(guān)說明。特別要注意的是,計(jì)數(shù)循環(huán)模式用于應(yīng)用10次利息公式。

就到這里了。下面是完成的程序:

# futval.py

# A program to compute the value of an investment

# carried 10 years into the future

defmain():

print("This program calculates the future value")

print("of a 10-year investment.")

principal = eval(input("Enter the initial principal: "))

apr = eval(input("Enter the annual interest rate: "))

foriinrange(10):

principal = principal * (1+ apr)

print("The value in 10 years is:", principal)

main()

注意,我添加了幾個(gè)空行來分隔程序的輸入、處理和輸出部分。策略性地放置"空行”能讓程序更具有可讀性。

這就是我所舉的例子,測試和調(diào)試是留給你的練習(xí)。

小結(jié)

本文介紹了開發(fā)程序的過程,以及實(shí)現(xiàn)簡單程序所需的許多Python細(xì)節(jié)。下面是一些要點(diǎn)的快速小結(jié)。

編寫程序需要一種系統(tǒng)的方法來解決問題,包括以下步驟。

1.問題分析:研究需要解決的問題。

2.程序規(guī)格說明:確定程序要做什么。

3.設(shè)計(jì):用偽代碼編寫算法。

4.實(shí)現(xiàn):將設(shè)計(jì)翻譯成編程語言。

5.測試/調(diào)試:查找和修復(fù)程序中的錯(cuò)誤。

6.維護(hù):讓程序保持最新,滿足不斷變化的需求。

許多簡單的程序遵循輸入、處理、輸出(IPO)的模式。

程序由標(biāo)識符和表達(dá)式構(gòu)成的語句組成。

標(biāo)識符是一些名稱,它們以下劃線或字母開頭,后跟字母、數(shù)字或下劃線字符的組合。Python中的標(biāo)識符區(qū)分大小寫。

表達(dá)式是產(chǎn)生數(shù)據(jù)的程序片段。表達(dá)式可以由以下部件組成:

字面量字面量是特定值的表示。例如,3是數(shù)字3的字面量表示。

變量變量是存儲(chǔ)值的標(biāo)識符。

運(yùn)算符運(yùn)算符用于將表達(dá)式組合為更復(fù)雜的表達(dá)式。例如,在x+ 3 *y中,使用了運(yùn)算符+和*。

數(shù)字的Python運(yùn)算符包括加法(+)、減法(-)、乘法(*)、除法(/)和乘冪(**)等常見的算術(shù)運(yùn)算。

Python輸出語句print將一系列表達(dá)式的值顯示在屏幕上。

在Python中,使用等號(=)表示將值賦給變量。利用賦值,程序可以從鍵盤獲得輸入。Python還允許同時(shí)賦值,這對于利用單個(gè)提示獲取多個(gè)輸入值很有作用。

eval函數(shù)可用來對用戶輸入求值,但它是一種安全風(fēng)險(xiǎn),不應(yīng)該用于未知或不可信來源的輸入。

確定循環(huán)是執(zhí)行次數(shù)已知的循環(huán)。Python的for語句是一個(gè)循環(huán)遍歷一系列值的確定循環(huán)。Python列表通常在for循環(huán)中用于為循環(huán)提供一系列值。

for語句的一個(gè)重要用途是實(shí)現(xiàn)計(jì)數(shù)循環(huán),這是專門設(shè)計(jì)的循環(huán),以便將程序的某些部分重復(fù)特定的次數(shù)。Python中的計(jì)數(shù)循環(huán)通過使用內(nèi)置的range函數(shù),來產(chǎn)生適當(dāng)大小的數(shù)字序列。

判斷對錯(cuò)

1.編寫程序的最好方法是立即鍵入一些代碼,然后調(diào)試它,直到它工作。

2.可以在不使用編程語言的情況下編寫算法。

3.程序在寫入和調(diào)試后不再需要修改。

4.Python標(biāo)識符必須以字母或下劃線開頭。

5.關(guān)鍵詞是好的變量名。

6.表達(dá)式由文字、變量和運(yùn)算符構(gòu)成。

7.在Python中,x=x+ 1是一個(gè)合法的語句。

8.Python不允許使用單個(gè)語句輸入多個(gè)值。

9.計(jì)數(shù)循環(huán)被設(shè)計(jì)為迭代特定次數(shù)。

10.在流程圖中,菱形用于展示語句序列,矩形用于判斷點(diǎn)。

多項(xiàng)選擇

1.以下項(xiàng)不是軟件開發(fā)過程中的一個(gè)步驟。

a.規(guī)格說明     b.測試/調(diào)試    c.決定費(fèi)用     d.維護(hù)

2.將攝氏度轉(zhuǎn)換為華氏度的正確公式是。

a.F= 9/5(C) + 32         b.F= 5/9(C) ? 32

c.F=B2? 4ACd.F= (212 – 32)/(100 – 0)

3.準(zhǔn)確描述計(jì)算機(jī)程序?qū)⒆鍪裁磥斫鉀Q問題的過程稱為。

a.設(shè)計(jì)       b.實(shí)現(xiàn)     c.編程       d.規(guī)格說明

4.以下項(xiàng)不是合法的標(biāo)識符。

a.     b.     c.     d.

5.下列不在表達(dá)式中使用。

a.變量      b.語句      c.操作符    d.字面量

6.生成或計(jì)算新數(shù)據(jù)值的代碼片段被稱為。

a.標(biāo)識符     b.表達(dá)式    c.生成子句     d.賦值語句

7.以下項(xiàng)不是IPO模式的一部分。

a.輸入       b.程序      c.處理       d.輸出

8.模板描述了。

a.一般循環(huán)         b.賦值語句

c.流程圖             d.計(jì)數(shù)循環(huán)

9.以下項(xiàng)是最準(zhǔn)確的Python賦值模型。

a.粘貼便簽     b.變量盒子    c.同時(shí)       d.塑料尺

10.在Python中,獲取用戶輸入通過一個(gè)特殊的表達(dá)式來實(shí)現(xiàn),稱為。

a.       b.     c.同時(shí)賦值     d.

討論

1.列出并用你自己的語言描述軟件開發(fā)過程中的六個(gè)步驟。

2.寫出chaos.py程序(第1.6節(jié)),并識別程序的各部分如下:

圈出每個(gè)標(biāo)識符。

為每個(gè)表達(dá)式加下劃線。

在每一行的末尾添加注釋,指示該行上的語句類型(輸出、賦值、輸入、循環(huán)等)。

3.解釋確定循環(huán)、for循環(huán)和計(jì)數(shù)循環(huán)幾個(gè)概念之間的關(guān)系。

4.顯示以下片段的輸出:

a.

b.

c.

d.

5.先寫出一個(gè)算法的偽代碼而不是立即投入Python代碼,為什么是一個(gè)好主意?

6.除end之外,Python的函數(shù)還支持其他關(guān)鍵字參數(shù)。其中一個(gè)關(guān)鍵字參數(shù)是。你認(rèn)為參數(shù)是什么?(提示:是分隔符的縮寫。通過交互式執(zhí)行或通過查閱Python文檔來檢驗(yàn)?zāi)愕南敕ǎ?/p>

7.如果執(zhí)行下面的代碼,你認(rèn)為會(huì)發(fā)生什么?

print("start")

foriinrange(0):

print("Hello")

print("end")

看看本文的for語句的流程圖,幫助你弄明白。然后在程序中嘗試這些代碼,檢驗(yàn)?zāi)愕念A(yù)測。

編程練習(xí)

1.一個(gè)用戶友好的程序應(yīng)該打印一個(gè)介紹,告訴用戶程序做什么。修改convert.py程序(第2.2節(jié)),打印介紹。

2.在許多使用Python的系統(tǒng)上,可以通過簡單地點(diǎn)擊(或雙擊)程序文件的圖標(biāo)來運(yùn)行程序。如果你能夠以這種方式運(yùn)行convert.py程序,你可能會(huì)發(fā)現(xiàn)另一個(gè)可用性問題。 程序在新窗口中開始運(yùn)行,但程序一完成,窗口就會(huì)消失,因此你無法讀取結(jié)果。在程序結(jié)束時(shí)添加一個(gè)輸入語句,讓它暫停,給用戶一個(gè)讀取結(jié)果的機(jī)會(huì)。下面這樣的代碼應(yīng)該有效:

input("Press the key to quit.")

3.修改程序(第2.5.3節(jié)),找出三個(gè)考試成績的平均值。

4.使用循環(huán)修改程序(第2.2節(jié)),讓它在退出前執(zhí)行5次。每次通過循環(huán),程序應(yīng)該從用戶獲得另一個(gè)溫度,并打印轉(zhuǎn)換的值。

5.修改程序(第2.2節(jié)),讓它計(jì)算并打印一個(gè)攝氏溫度和華氏度的對應(yīng)表,從0℃到100℃,每隔10℃一個(gè)值。

6.修改程序(第2.7節(jié)),讓投資的年數(shù)也由用戶輸入。確保更改最后的消息,以反映正確的年數(shù)。

7.假設(shè)你有一個(gè)投資計(jì)劃,每年投資一定的固定金額。修改,計(jì)算你的投資的總累積值。該程序的輸入將是每年投資的金額、利率和投資的年數(shù)。

8.作為APR的替代方案,賬戶所產(chǎn)生的利息通常通過名義利率和復(fù)利期數(shù)來描述。例如,如果利率為3%,利息按季度計(jì)算復(fù)利,則該賬戶實(shí)際上每3個(gè)月賺取0.75%的利息。請修改程序,用此方法輸入利率。程序應(yīng)提示用戶每年的利率(rate)和利息每年復(fù)利的次數(shù)(periods)。要計(jì)算10年的價(jià)值,程序?qū)⒀h(huán)10 * periods次,并在每次迭代中累積rate/period的利息。

9.編寫一個(gè)程序,將溫度從華氏溫度轉(zhuǎn)換為攝氏溫度。

10.編寫一個(gè)程序,將以千米為單位的距離轉(zhuǎn)換為英里。1千米約為0.62英里。

11.編寫一個(gè)程序以執(zhí)行你自己選擇的單位轉(zhuǎn)換。確保程序打印介紹,解釋它的作用。

12.編寫一個(gè)交互式Python計(jì)算器程序。程序應(yīng)該允許用戶鍵入數(shù)學(xué)表達(dá)式,然后打印表達(dá)式的值。加入循環(huán),以便用戶可以執(zhí)行許多計(jì)算(例如,最多100個(gè))。注意:要提前退出,用戶可以通過鍵入一個(gè)錯(cuò)誤的表達(dá)式,或簡單地關(guān)閉計(jì)算器程序運(yùn)行的窗口,讓程序崩潰。在后續(xù)圖書節(jié)中,你將學(xué)習(xí)終止交互式程序的更好方法。

到了這里,關(guān)于python做微信小程序開發(fā),python怎么開發(fā)小程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序 | 小程序開發(fā)

    微信小程序 | 小程序開發(fā)

    ??? 微信小程序?qū)冢盒〕绦蜷_發(fā) 初級知識 ????? 個(gè)人簡介:一個(gè)不甘平庸的平凡人?? ? 個(gè)人主頁:CoderHing的個(gè)人主頁 ?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索?? ?? 你的一鍵三連是我更新的最大動(dòng)力?? 目錄 一、認(rèn)識小程序開發(fā) 什么是小程序? 各個(gè)平臺(tái)小

    2024年01月24日
    瀏覽(61)
  • 微信小程序開發(fā)之微信小程序交互

    微信小程序開發(fā)之微信小程序交互

    目錄 一、小程序交互 前端: 1、先在登陸界面中編寫代碼 2、在前端中編寫js代碼 后端: ? ? ? ? ? 1、先導(dǎo)入依賴: ? ? ? ? ? 2、定義好配置文件 ? ? ? ? ? 3、編寫好實(shí)體類 ? ? ? ? ? 4、將幫助類進(jìn)行配置 ? ? ? ? ? 5、編寫mapper類 ? ? ? ? ? 6、定義service層以及對應(yīng)的

    2024年02月09日
    瀏覽(21)
  • 【微信小程序開發(fā)零基礎(chǔ)入門】——微信小程序入門

    【微信小程序開發(fā)零基礎(chǔ)入門】——微信小程序入門

    學(xué)習(xí)小程序跟學(xué)習(xí)網(wǎng)頁開發(fā)有什么不同 1.如何創(chuàng)建微信小程序項(xiàng)目 1.1 注冊、登錄、復(fù)制appId 注冊:在 https://mp.weixin.qq.com/cgi-bin/wx 進(jìn)行注冊微信小程序開發(fā)賬號 登錄:在 https://mp.weixin.qq.com 登錄小程序賬號 復(fù)制appId: 在 \\\"開發(fā)\\\" 的 \\\"開發(fā)管理\\\" 的 \\\"開發(fā)設(shè)置\\\" 的 \\\"開發(fā)者ID\\\"中 1.2 下

    2024年02月03日
    瀏覽(31)
  • 微信小程序 -- 小程序開發(fā)能力與拓展

    微信小程序 -- 小程序開發(fā)能力與拓展

    1. 獲取用戶頭像 當(dāng)小程序需要讓用戶完善個(gè)人資料時(shí),我們可以通過微信提供的頭像、昵稱填寫能力快速完善。如圖: 想使用微信提供的頭像填寫能力,需要兩步: 將 button 組件 open-type 的值設(shè)置為 chooseAvatar 當(dāng)用戶選擇需要使用的頭像之后,可以通過 bindchooseavatar 事件回調(diào)

    2024年04月15日
    瀏覽(29)
  • 微信小程序開發(fā)---小程序的頁面配置

    目錄 一、小程序頁面配置的作用 二、頁面配置和全局配置的關(guān)系 三、頁面配置中常用的配置項(xiàng) 在每個(gè)小程序中,每個(gè)頁面都有自己的.json配置文件,用來對當(dāng)前頁面的窗口外觀,頁面效果進(jìn)行配置。 小程序中,app.json中的windows節(jié)點(diǎn),可以全局配置小程序中每個(gè)頁面的窗口表

    2024年02月09日
    瀏覽(19)
  • 微信小程序開發(fā)教程(二)--上傳小程序

    微信小程序開發(fā)教程(二)--上傳小程序

    接上文,我們已經(jīng)有一個(gè)小例子了。 在模擬器的位置,點(diǎn)擊頭像,會(huì)登錄。 此時(shí)我們可以第一次嘗試將我們的小程序進(jìn)行上傳。 點(diǎn)擊下圖箭頭所指位置: 點(diǎn)擊確定: 填寫版本號和備注信息,選擇上傳: 在網(wǎng)頁管理小程序上,選擇上傳,以下都選擇紅框所在位置: 填寫相關(guān)

    2023年04月25日
    瀏覽(25)
  • uni-app做微信小程序的分包處理

    uni-app做微信小程序的分包處理

    我們的都知道微信小程序有隨即隨用,用完即走的優(yōu)點(diǎn),并且它開發(fā)門檻低,但是它也有一個(gè)致命的缺點(diǎn),就是代碼包體積的限制,這一缺點(diǎn)讓小程序的開發(fā)有了一定的限制,現(xiàn)在有一方法可以減少代碼包的體積,能夠讓小程序的功能得到一定的擴(kuò)展,這一方法就是——分包

    2023年04月08日
    瀏覽(90)
  • 【微信小程序開發(fā)】微信小程序集成騰訊位置項(xiàng)目配置

    【微信小程序開發(fā)】微信小程序集成騰訊位置項(xiàng)目配置

    騰訊位置服務(wù)官網(wǎng) 當(dāng)然沒賬號的要先注冊一個(gè)賬號 在我的應(yīng)用里創(chuàng)建一個(gè)新的應(yīng)用,印象中需要小程序ID,去微信開發(fā)者工具里面找到自己的小程序ID填入即可 添加 key 中勾選勾選 WebServiceAPI 從官網(wǎng)里下載,我這里下載的是 v1.2 打開微信開發(fā)者工具 在查找小程序ID的地方下滑

    2024年02月02日
    瀏覽(39)
  • 【微信小程序開發(fā)】第 1 節(jié) - 小程序簡介

    ???????? 歡迎來到博主 Apeiron?的博客,祝您旅程愉快 !?時(shí)止則止,時(shí)行則行。動(dòng)靜不失其時(shí),其道光明。 目錄 1、緣起 2、小程序與普通網(wǎng)頁開發(fā)的區(qū)別 3、API?簡介 4、總結(jié) ? ? ? ? 在日常生活中,我們幾乎每天都在使用微信小程序,那么,這個(gè)微信小程序到底是怎么

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包