少儿编程Python第1课-语言基础(绘制小猪佩奇)

1.指令和程序


计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。

其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理计算机软件中的数据。

我们通常所说的程序实际上就是指令的集合,我们程序就是将一系列的指令按照某种方式组织到一起,然后通过这些指令去控制计算机做我们想让它做的事情。

今天我们大多数时候使用的计算机,虽然它们的元器件做工越来越精密,处理能力越来越强大,但究其本质来说仍然属于[“冯·诺依曼结构”](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)的计算机。“冯·诺依曼结构”有两个关键点,一是指出要将存储设备与中央处理器分开,二是提出了将数据以二进制方式编码。二进制是一种“逢二进一”的计数法,跟我们人类使用的“逢十进一”的计数法没有实质性的区别,人类因为有十根手指所以使用了十进制(因为在数数时十根手指用完之后就只能进位了,当然凡事都有例外,玛雅人可能是因为长年光着脚的原因把脚趾头也算上了,于是他们使用了二十进制的计数法,在这种计数法的指导下玛雅人的历法就与我们平常使用的历法不一样,而按照玛雅人的历法,2012年是上一个所谓的“太阳纪”的最后一年,而2013年则是新的“太阳纪”的开始,后来这件事情被以讹传讹的方式误传为”2012年是玛雅人预言的世界末日“这种荒诞的说法,今天我们可以大胆的猜测,玛雅文明之所以发展缓慢估计也与使用了二十进制有关)。

对于计算机来说,二进制在物理器件上来说是最容易实现的(高电压表示1,低电压表示0),于是在“冯·诺依曼结构”的计算机都使用了二进制。虽然我们并不需要每个程序员都能够使用二进制的思维方式来工作,但是了解二进制以及它与我们生活中的十进制之间的转换关系,以及二进制与八进制和十六进制的转换关系还是有必要的。如果你对这一点不熟悉,可以自行使用[维基百科](https://zh.wikipedia.org/wiki/%E4%BA%8C%E8%BF%9B%E5%88%B6)或者[百度百科](https://baike.baidu.com)科普一下。

变量和类型

在程序设计中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改,这是所有计算和控制的基础。计算机能处理的数据有很多种类型,除了数值之外还可以处理文本、图形、音频、视频等各种各样的数据,那么不同的数据就需要定义不同的存储类型。Python中的数据类型很多,而且也允许我们自定义新的数据类型(这一点在后面会讲到),我们先介绍几种常用的数据类型。

– 整型:Python中可以处理任意大小的整数(Python 2.x中有int和long两种类型的整数,但这种区分对Python来说意义不大,因此在Python 3.x中整数只有int这一种了),而且支持二进制(如`0b100`,换算成十进制是4)、八进制(如`0o100`,换算成十进制是64)、十进制(`100`)和十六进制(`0x100`,换算成十进制是256)的表示法。

– 浮点型:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如`123.456`)之外还支持科学计数法(如`1.23456e2`)。

– 字符串型:字符串是以单引号或双引号括起来的任意文本,比如`’hello’`和`”hello”`,字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)。

– 布尔型:布尔值只有`True`、`False`两种值,要么是`True`,要么是`False`,在Python中,可以直接用`True`、`False`表示布尔值(请注意大小写),也可以通过布尔运算计算出来(例如`3 < 5`会产生布尔值`True`,而`2 == 1`会产生布尔值`False`)。

– 复数型:形如`3+5j`,跟数学上的复数表示一样,唯一不同的是虚部的`i`换成了`j`。实际上,这个类型并不能算作常用类型,大家了解下就可以了。

变量命名

对于每个变量我们需要给它取一个名字,就如同我们每个人都有属于自己的响亮的名字一样。在Python中,变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。

– 硬性规则:

– 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。

– 大小写敏感(大写的`a`和小写的`A`是两个不同的变量)。

– 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。

– PEP 8要求:

– 用小写字母拼写,多个单词用下划线连接。

– 受保护的实例属性用单个下划线开头(后面会讲到)。

– 私有的实例属性用两个下划线开头(后面会讲到)。

当然,作为一个专业的程序员,给变量(事实上应该是所有的标识符)命名时做到见名知意也是非常重要的。

变量的使用

下面通过几个例子来说明Python变量的类型和变量使用。

使用变量保存数据并进行算术运算


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`函数对变量的类型进行检查。程序设计中函数的概念跟数学上函数的概念是一致的,数学上的函数相信大家并不陌生,它包括了函数名、自变量和因变量。如果暂时不理解这个概念也不要紧,我们会在后续的章节中专门讲解函数的定义和使用。


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中内置的函数对变量类型进行转换。

– `int()`:将一个数值或字符串转换成整数,可以指定进制。

– `float()`:将一个字符串转换成浮点数。

– `str()`:将指定的对象转换成字符串形式,可以指定编码。

– `chr()`:将整数转换成该编码对应的字符串(一个字符)。

– `ord()`:将字符串(一个字符)转换成对应的编码(整数)。

下面的代码通过键盘输入两个整数来实现对两个整数的算术运算。

“””

使用input()函数获取键盘输入(字符串)

使用int()函数将输入的字符串转换成整数

使用print()函数输出带占位符的字符串

“””

a = int(input(‘a = ‘))

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函数中输出的字符串使用了占位符语法,其中`%d`是整数的占位符,`%f`是小数的占位符,`%%`表示百分号(因为百分号代表了占位符,所以带占位符的字符串中要表示百分号必须写成`%%`),字符串之后的`%`后面跟的变量值会替换掉占位符然后输出到终端中,运行上面的程序,看看程序执行结果就明白啦。

运算符

Python支持多种运算符,下表大致按照优先级从高到低的顺序列出了所有的运算符,运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运算符的使用。

| 运算符 | 描述 |

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

| `[]` `[:]` | 下标,切片 |

| `**` | 指数 |

| `~` `+` `-` | 按位取反, 正负号 |

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

| `+` `-` | 加,减 |

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

| `&` | 按位与 |

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

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

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

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

| `in` `not in` | 成员运算符 |

| `not` `or` `and` | 逻辑运算符 |

| `=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `|=` `^=` `>>=` `<<=` | (复合)赋值运算符 |

>**说明:** 在实际开发中,如果搞不清楚运算符的优先级,可以使用括号来确保运算的执行顺序。

下面的例子演示了赋值运算符和复合赋值运算符的使用。

“””

赋值运算符和复合赋值运算符

“””

a = 10

b = 3

a += b # 相当于:a = a + b

a *= a + 2 # 相当于:a = a * (a + 2)

print(a) # 想想这里会输出什么

下面的例子演示了比较运算符(关系运算符)、逻辑运算符和身份运算符的使用。

“””

比较、逻辑和算身份运算符的使用

“””

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()

# 移动到指定的坐标

goto(x,y)

pendown()

# 设置方向(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

# 向左转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()

# 设置画笔的颜色(红, 绿, 蓝)

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) #向左转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():

“””设置参数”””

pensize(4)

# 隐藏海龟

hideturtle()

colormode(255)

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

setup(840, 500)

speed(10)

def main():

“””主函数”””

setting()

nose(-100, 100)

head(-69, 167)

ears(0, 160)

eyes(0, 140)

cheek(80, 10)

mouth(-20, 30)

done()

if __name__ == ‘__main__’:

main()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容