少兒編程Python第1課-語言基礎(chǔ)(繪制小豬佩奇)

1.指令和程序


計算機的硬件系統(tǒng)通常由五大部件構(gòu)成,包括:運算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備。

其中,運算器和控制器放在一起就是我們通常所說的中央處理器,它的功能是執(zhí)行各種運算和控制指令以及處理計算機軟件中的數(shù)據(jù)。

我們通常所說的程序?qū)嶋H上就是指令的集合,我們程序就是將一系列的指令按照某種方式組織到一起,然后通過這些指令去控制計算機做我們想讓它做的事情。

今天我們大多數(shù)時候使用的計算機,雖然它們的元器件做工越來越精密,處理能力越來越強大,但究其本質(zhì)來說仍然屬于[“馮·諾依曼結(jié)構(gòu)”](https://zh.wikipedia.org/wiki/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%BB%93%E6%9E%84)的計算機。“馮·諾依曼結(jié)構(gòu)”有兩個關(guān)鍵點,一是指出要將存儲設(shè)備與中央處理器分開,二是提出了將數(shù)據(jù)以二進制方式編碼。二進制是一種“逢二進一”的計數(shù)法,跟我們?nèi)祟愂褂玫摹胺晔M一”的計數(shù)法沒有實質(zhì)性的區(qū)別,人類因為有十根手指所以使用了十進制(因為在數(shù)數(shù)時十根手指用完之后就只能進位了,當(dāng)然凡事都有例外,瑪雅人可能是因為長年光著腳的原因把腳趾頭也算上了,于是他們使用了二十進制的計數(shù)法,在這種計數(shù)法的指導(dǎo)下瑪雅人的歷法就與我們平常使用的歷法不一樣,而按照瑪雅人的歷法,2012年是上一個所謂的“太陽紀”的最后一年,而2013年則是新的“太陽紀”的開始,后來這件事情被以訛傳訛的方式誤傳為”2012年是瑪雅人預(yù)言的世界末日“這種荒誕的說法,今天我們可以大膽的猜測,瑪雅文明之所以發(fā)展緩慢估計也與使用了二十進制有關(guān))。

對于計算機來說,二進制在物理器件上來說是最容易實現(xiàn)的(高電壓表示1,低電壓表示0),于是在“馮·諾依曼結(jié)構(gòu)”的計算機都使用了二進制。雖然我們并不需要每個程序員都能夠使用二進制的思維方式來工作,但是了解二進制以及它與我們生活中的十進制之間的轉(zhuǎn)換關(guān)系,以及二進制與八進制和十六進制的轉(zhuǎn)換關(guān)系還是有必要的。如果你對這一點不熟悉,可以自行使用[維基百科](https://zh.wikipedia.org/wiki/%E4%BA%8C%E8%BF%9B%E5%88%B6)或者[百度百科](https://baike.baidu.com)科普一下。

變量和類型

在程序設(shè)計中,變量是一種存儲數(shù)據(jù)的載體。計算機中的變量是實際存在的數(shù)據(jù)或者說是存儲器中存儲數(shù)據(jù)的一塊內(nèi)存空間,變量的值可以被讀取和修改,這是所有計算和控制的基礎(chǔ)。計算機能處理的數(shù)據(jù)有很多種類型,除了數(shù)值之外還可以處理文本、圖形、音頻、視頻等各種各樣的數(shù)據(jù),那么不同的數(shù)據(jù)就需要定義不同的存儲類型。Python中的數(shù)據(jù)類型很多,而且也允許我們自定義新的數(shù)據(jù)類型(這一點在后面會講到),我們先介紹幾種常用的數(shù)據(jù)類型。

– 整型:Python中可以處理任意大小的整數(shù)(Python 2.x中有int和long兩種類型的整數(shù),但這種區(qū)分對Python來說意義不大,因此在Python 3.x中整數(shù)只有int這一種了),而且支持二進制(如`0b100`,換算成十進制是4)、八進制(如`0o100`,換算成十進制是64)、十進制(`100`)和十六進制(`0x100`,換算成十進制是256)的表示法。

– 浮點型:浮點數(shù)也就是小數(shù),之所以稱為浮點數(shù),是因為按照科學(xué)記數(shù)法表示時,一個浮點數(shù)的小數(shù)點位置是可變的,浮點數(shù)除了數(shù)學(xué)寫法(如`123.456`)之外還支持科學(xué)計數(shù)法(如`1.23456e2`)。

– 字符串型:字符串是以單引號或雙引號括起來的任意文本,比如`’hello’`和`”hello”`,字符串還有原始字符串表示法、字節(jié)字符串表示法、Unicode字符串表示法,而且可以書寫成多行的形式(用三個單引號或三個雙引號開頭,三個單引號或三個雙引號結(jié)尾)。

– 布爾型:布爾值只有`True`、`False`兩種值,要么是`True`,要么是`False`,在Python中,可以直接用`True`、`False`表示布爾值(請注意大小寫),也可以通過布爾運算計算出來(例如`3 < 5`會產(chǎn)生布爾值`True`,而`2 == 1`會產(chǎn)生布爾值`False`)。

– 復(fù)數(shù)型:形如`3+5j`,跟數(shù)學(xué)上的復(fù)數(shù)表示一樣,唯一不同的是虛部的`i`換成了`j`。實際上,這個類型并不能算作常用類型,大家了解下就可以了。

變量命名

對于每個變量我們需要給它取一個名字,就如同我們每個人都有屬于自己的響亮的名字一樣。在Python中,變量命名需要遵循以下這些必須遵守硬性規(guī)則和強烈建議遵守的非硬性規(guī)則。

– 硬性規(guī)則:

– 變量名由字母(廣義的Unicode字符,不包括特殊字符)、數(shù)字和下劃線構(gòu)成,數(shù)字不能開頭。

– 大小寫敏感(大寫的`a`和小寫的`A`是兩個不同的變量)。

– 不要跟關(guān)鍵字(有特殊含義的單詞,后面會講到)和系統(tǒng)保留字(如函數(shù)、模塊等的名字)沖突。

– PEP 8要求:

– 用小寫字母拼寫,多個單詞用下劃線連接。

– 受保護的實例屬性用單個下劃線開頭(后面會講到)。

– 私有的實例屬性用兩個下劃線開頭(后面會講到)。

當(dāng)然,作為一個專業(yè)的程序員,給變量(事實上應(yīng)該是所有的標(biāo)識符)命名時做到見名知意也是非常重要的。

變量的使用

下面通過幾個例子來說明Python變量的類型和變量使用。

使用變量保存數(shù)據(jù)并進行算術(shù)運算


a = 321

b = 123

print(a + b)

print(a – b)

print(a * b)

print(a / b)

print(a // b)

print(a % b)

print(a ** b)

在Python中可以使用`type`函數(shù)對變量的類型進行檢查。程序設(shè)計中函數(shù)的概念跟數(shù)學(xué)上函數(shù)的概念是一致的,數(shù)學(xué)上的函數(shù)相信大家并不陌生,它包括了函數(shù)名、自變量和因變量。如果暫時不理解這個概念也不要緊,我們會在后續(xù)的章節(jié)中專門講解函數(shù)的定義和使用。


a = 100

b = 12.345

c = 1 + 5j

d = ‘hello, world’

e = True

print(type(a)) #

print(type(b)) #

print(type(c)) #

print(type(d)) #

print(type(e)) #

可以使用Python中內(nèi)置的函數(shù)對變量類型進行轉(zhuǎn)換。

– `int()`:將一個數(shù)值或字符串轉(zhuǎn)換成整數(shù),可以指定進制。

– `float()`:將一個字符串轉(zhuǎn)換成浮點數(shù)。

– `str()`:將指定的對象轉(zhuǎn)換成字符串形式,可以指定編碼。

– `chr()`:將整數(shù)轉(zhuǎn)換成該編碼對應(yīng)的字符串(一個字符)。

– `ord()`:將字符串(一個字符)轉(zhuǎn)換成對應(yīng)的編碼(整數(shù))。

下面的代碼通過鍵盤輸入兩個整數(shù)來實現(xiàn)對兩個整數(shù)的算術(shù)運算。

“””

使用input()函數(shù)獲取鍵盤輸入(字符串)

使用int()函數(shù)將輸入的字符串轉(zhuǎn)換成整數(shù)

使用print()函數(shù)輸出帶占位符的字符串

“””

a = int(input(‘a(chǎn) = ‘))

b = int(input(‘b = ‘))

print(‘%d + %d = %d’ % (a, b, a + b))

print(‘%d – %d = %d’ % (a, b, a – b))

print(‘%d * %d = %d’ % (a, b, a * b))

print(‘%d / %d = %f’ % (a, b, a / b))

print(‘%d // %d = %d’ % (a, b, a // b))

print(‘%d %% %d = %d’ % (a, b, a % b))

print(‘%d ** %d = %d’ % (a, b, a ** b))

“`

**說明**:上面的print函數(shù)中輸出的字符串使用了占位符語法,其中`%d`是整數(shù)的占位符,`%f`是小數(shù)的占位符,`%%`表示百分號(因為百分號代表了占位符,所以帶占位符的字符串中要表示百分號必須寫成`%%`),字符串之后的`%`后面跟的變量值會替換掉占位符然后輸出到終端中,運行上面的程序,看看程序執(zhí)行結(jié)果就明白啦。

運算符

Python支持多種運算符,下表大致按照優(yōu)先級從高到低的順序列出了所有的運算符,運算符的優(yōu)先級指的是多個運算符同時出現(xiàn)時,先做什么運算然后再做什么運算。除了我們之前已經(jīng)用過的賦值運算符和算術(shù)運算符,我們稍后會陸續(xù)講到其他運算符的使用。

| 運算符 | 描述 |

| ———————————————————— | —————————— |

| `[]` `[:]` | 下標(biāo),切片 |

| `**` | 指數(shù) |

| `~` `+` `-` | 按位取反, 正負號 |

| `*` `/` `%` `//` | 乘,除,模,整除 |

| `+` `-` | 加,減 |

| `>>` `<<` | 右移,左移 |

| `&` | 按位與 |

| `^` `\|` | 按位異或,按位或 |

| `<=` `<` `>` `>=` | 小于等于,小于,大于,大于等于 |

| `==` `!=` | 等于,不等于 |

| `is` `is not` | 身份運算符 |

| `in` `not in` | 成員運算符 |

| `not` `or` `and` | 邏輯運算符 |

| `=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `|=` `^=` `>>=` `<<=` | (復(fù)合)賦值運算符 |

>**說明:** 在實際開發(fā)中,如果搞不清楚運算符的優(yōu)先級,可以使用括號來確保運算的執(zhí)行順序。

下面的例子演示了賦值運算符和復(fù)合賦值運算符的使用。

“””

賦值運算符和復(fù)合賦值運算符

“””

a = 10

b = 3

a += b # 相當(dāng)于:a = a + b

a *= a + 2 # 相當(dāng)于:a = a * (a + 2)

print(a) # 想想這里會輸出什么

下面的例子演示了比較運算符(關(guān)系運算符)、邏輯運算符和身份運算符的使用。

“””

比較、邏輯和算身份運算符的使用

“””

flag0 = 1 == 1

flag1 = 3 > 2

flag2 = 2 < 1

flag3 = flag1 and flag2

flag4 = flag1 or flag2

flag5 = not (1 != 2)

print(‘flag0 =’, flag0) # flag0 = True

print(‘flag1 =’, flag1) # flag1 = True

print(‘flag2 =’, flag2) # flag2 = False

print(‘flag3 =’, flag3) # flag3 = False

print(‘flag4 =’, flag4) # flag4 = True

print(‘flag5 =’, flag5) # flag5 = False

print(flag1 is True) # True

print(flag2 is not False) # False

附:繪畫小豬佩奇

“””

繪制小豬佩奇

“””

from turtle import *

def nose(x,y):

“””畫鼻子”””

penup()

# 移動到指定的坐標(biāo)

goto(x,y)

pendown()

# 設(shè)置方向(0-東、90-北、180-西、270-南)

setheading(-30)

begin_fill()

a = 0.4

for i in range(120):

if 0 <= i < 30 or 60 <= i <90:

a = a + 0.08

# 向左轉(zhuǎn)3度

left(3)

# 向前走

forward(a)

else:

a = a – 0.08

left(3)

forward(a)

end_fill()

penup()

setheading(90)

forward(25)

setheading(0)

forward(10)

pendown()

# 設(shè)置畫筆的顏色(紅, 綠, 藍)

pencolor(255, 155, 192)

setheading(10)

begin_fill()

circle(5)

color(160, 82, 45)

end_fill()

penup()

setheading(0)

forward(20)

pendown()

pencolor(255, 155, 192)

setheading(10)

begin_fill()

circle(5)

color(160, 82, 45)

end_fill()

def head(x, y):

“””畫頭”””

color((255, 155, 192), “pink”)

penup()

goto(x,y)

setheading(0)

pendown()

begin_fill()

setheading(180)

circle(300, -30)

circle(100, -60)

circle(80, -100)

circle(150, -20)

circle(60, -95)

setheading(161)

circle(-300, 15)

penup()

goto(-100, 100)

pendown()

setheading(-30)

a = 0.4

for i in range(60):

if 0<= i < 30 or 60 <= i < 90:

a = a + 0.08

lt(3) #向左轉(zhuǎn)3度

fd(a) #向前走a的步長

else:

a = a – 0.08

lt(3)

fd(a)

end_fill()

def ears(x,y):

“””畫耳朵”””

color((255, 155, 192), “pink”)

penup()

goto(x, y)

pendown()

begin_fill()

setheading(100)

circle(-50, 50)

circle(-10, 120)

circle(-50, 54)

end_fill()

penup()

setheading(90)

forward(-12)

setheading(0)

forward(30)

pendown()

begin_fill()

setheading(100)

circle(-50, 50)

circle(-10, 120)

circle(-50, 56)

end_fill()

def eyes(x,y):

“””畫眼睛”””

color((255, 155, 192), “white”)

penup()

setheading(90)

forward(-20)

setheading(0)

forward(-95)

pendown()

begin_fill()

circle(15)

end_fill()

color(“black”)

penup()

setheading(90)

forward(12)

setheading(0)

forward(-3)

pendown()

begin_fill()

circle(3)

end_fill()

color((255, 155, 192), “white”)

penup()

seth(90)

forward(-25)

seth(0)

forward(40)

pendown()

begin_fill()

circle(15)

end_fill()

color(“black”)

penup()

setheading(90)

forward(12)

setheading(0)

forward(-3)

pendown()

begin_fill()

circle(3)

end_fill()

def cheek(x,y):

“””畫臉頰”””

color((255, 155, 192))

penup()

goto(x,y)

pendown()

setheading(0)

begin_fill()

circle(30)

end_fill()

def mouth(x,y):

“””畫嘴巴”””

color(239, 69, 19)

penup()

goto(x, y)

pendown()

setheading(-80)

circle(30, 40)

circle(40, 80)

def setting():

“””設(shè)置參數(shù)”””

pensize(4)

# 隱藏海龜

hideturtle()

colormode(255)

color((255, 155, 192), “pink”)

setup(840, 500)

speed(10)

def main():

“””主函數(shù)”””

setting()

nose(-100, 100)

head(-69, 167)

ears(0, 160)

eyes(0, 140)

cheek(80, 10)

mouth(-20, 30)

done()

if __name__ == ‘__main__’:

main()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內(nèi)容