python嵌入式系统开发_图解嵌入式系统开发之语言篇:初识Python

一直忙于工作,似乎忘记了抽时间学习新知识,最近难得空闲,花了两天时间看了一下Python语法。作为工作中经常使用C/C++的人,学习Python的过程中最大的感受就是“似曾相识”。

说到学习一门新语言,我并没有像其他人那样,二话不说,经典书籍买起来,然后每天睡前强睁着眼睛翻两页。那样的话,肯定早就从入门到放弃了。

对于有些编程基础的人来说,我觉得最好的学习方式是差量学习。著名的版本管理软件Git是个很好的例子,他的基本思想是这样,我只关注和保存你当前工作区和最新版本之间的差异,每个指定版本的代码都是在基础提交上叠加该版本之前的所有patch合成的。这样,整个代码仓库需要保存的代码量就非常的少(跟另一个版本管理软件SVN相比)。在学习一门新语言的时候,你已有的语言知识就是初始提交版本,你只需要关注新语言跟已有语言之间的差异就好了。这会大大的提高你的学习速度。并且减少因为学的太杂而混到一起的风险。

寻找两个事物之间的差异,可以通过先寻找两个事物之间的相似性和联系来实现。请记住,“相似性是差异性的基石”,比如,让你去比较一头牛和一个苹果之间的差异。

你应该先去找到他们之间的相似性。

(1)首先,牛和苹果都是生物。都会生长发育。

(2)他们都会繁殖,都会死去。

(3)他们的肉都可以吃。(强行套近乎,手动滑稽 :))

然后再去找他们的不同点。

(1)牛是动物,他会运动,苹果自己不会动。

(2)牛分公母,苹果树雌雄同株,繁殖方式不同。

(3)牛生长过程中消耗氧气,释放二氧化碳,苹果树生长过程中吸收二氧化碳,释放氧气。

(4).。。。。。。。。。。。。。。。

额,跑题了,抱歉。

强行拉回来,继续说Python与C++有什么共性。

其实,找Python与C++之间的共性不如找所有高级语言之间的共性。一句话,

“所有高级语言的语法都是对人类分析和处理问题的逻辑的描述”。

怎么理解那?

(1)所有高级语言都有变量(广义的变量,包括变量和常量),变量相当于人类的记忆,描述某一时刻各事物的现状。其中的常量是描述那些不随时间变化的事物。

(2)所有高级语言都有条件语句,循环语句,和运算语句。

<1>条件语句是人们根据已有知识做出判断的过程。

<2>循环语句是对人们处理问题的过程的描述。

<3> 运算语句就不说了,反正就是想办法怎么把数学公式转换成代码实现。

说完了?

(3)面向对象。

都有面向对象的特性,有类,有继承。

(4)函数

都有函数,函数也是对代码的一种封装和复用。

那说完相似性,再说说差异性。

(1)C++ 属于静态语言,广义变量包括字符型,整型,浮点型,指针,引用,常量。使用之前必须先定义,明确指定变量类型。Python属于动态语言,变量包括 Numbers(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典),使用前无需先定义,无需指定变量类型(系统会自己推导)。

(2)Python语句也是一行一句,但是语句结束不需要加分号, 只有条件语句,循环语句之后要加个冒号。

(3)Python语句可以不像C++那样,一定要加个程序入口(main)。python属于解释性语言,边解释边执行,随便写一行代码就可以直接执行,这一点很shell脚本非常的相似。

(4)python函数可以返回多个值,这是对C++函数只能返回单一值的优化。

(5)Python属于解释性语言,程序边解释边执行。C++需要先编译成可执行文件。

(6).。。。。。。

这里, 我并不打算给你完整的列举他们之间的相似性和差异性,只是告诉你一种学习的方式,你可以自己在笔记本上写写看。最后我们会发现,所有高级语言底层思想都是非常相似的,只是描述方式略有差异而已。从宏观上讲,所有机器语言都是图灵等价的,一种语言能实现的功能,其他所有语言也都能实现,只是因为抽象层次不同,实现复杂度不同而已。Python语言经过不断的迭代,语法简洁,以及大量第三方库的加持,能够更容易的实现某些功能,所以成为了目前非常热门的语言。

那有没有必要买经典书籍阅读那?答案当然是,非常有必要。但是要看时机,我不建议一开始就抱着一本厚厚的圣经在那慢慢啃。工程中一种流行的开发方式叫做敏捷开发,主要思想就一句话,"快速出原型,立马上线,持续迭代”,这也适合语言学习,比如,今天讨论的是如何学习Python,那么就直接设定个简单的目标,去实现他,不管用什么方式。哪里不会搜哪里。当你完成之后,就会对该语言有了一个大概的了解。然后不断的去优化,去重写。当遇到瓶颈,百度也找不到答案的时候,你就可以去书里找答案了(注意,这里也不是让你去通读全书,而是去细看你用到,不熟悉的章节)。

下面就是我刚开始为了熟悉Python而写的一个小游戏。

免责声明:其中所使用的所有图片和声音素材均来自于网络,如有侵犯你的权利,请联系作者删除,多谢。

演示视频如下:v2-367541a32f8719a0d0ca466d0fc44102.png(Python游戏 疯狂乒乓球)https://www.zhihu.com/video/1171873227315363840

完整代码如下:

#!/usr/bin/python

# -*- coding:UTF-8 -*-

import pygame as pg

import time

import sys

window_width = 800

window_height = 600

window_color = (255, 255, 255)

ball_color = (171, 171, 171)

ball_radius = 50

ball_len = 50

ball_x = ball_radius

ball_y = ball_radius

racket_w = 200

racket_h = 30

racket_x = 0

racket_y = window_height - racket_h

racket_color = (171, 171, 171)

move = 'none'

dx = 20

dy = 20

dz = 40

score = 0

stop = False

pg.init()

game_windows = pg.display.set_mode((window_width,window_height))

pg.display.set_caption("Magic Ball")

bg = pg.image.load("bg.jpg")

ball = pg.image.load("ball.png")

racket = pg.image.load("racket.png")

gameover = pg.image.load("gameover.png")

pg.mixer.init()

pg.mixer.music.load("bgm.mp3")

pg.mixer.music.set_volume(0.4)

pg.mixer.music.play(-1, 0)

pingpang = pg.mixer.Sound("pingpang.wav");

pingpang.set_volume(0.8);

font = pg.font.SysFont('楷体', 64, True)

while True:

for event in pg.event.get():

if event.type == pg.QUIT:

sys.quit

elif event.type == pg.KEYDOWN:

if event.key == pg.K_LEFT:

move = 'left'

elif event.key == pg.K_RIGHT:

move = 'right';

else:

move = 'none';

elif event.type == pg.KEYUP:

if event.key == pg.K_LEFT or event.key == pg.K_RIGHT:

move = 'none'

if move == 'left':

if racket_x - dz <= 0:

racket_x = 0

else:

racket_x -= dz

elif move == 'right':

if racket_x + dz + racket_w >= window_width:

racket_x = window_width - racket_w

else:

racket_x += dz

if ball_y >= window_height - ball_radius:

print "game over!!!"

stop = True

if ball_x + ball_len + dx >= window_width:

ball_x = window_width - ball_len

dx = -dx

pingpang.play()

elif ball_x + dx <= 0:

ball_x = 0

dx = -dx

pingpang.play()

else:

ball_x += dx

if ball_y + ball_len + dy >= window_height - racket_h:

if ball_x + 0.5*ball_len >= racket_x and ball_x + 0.5*ball_len <= racket_x + racket_w:

dy = -dy

ball_y = window_height - ball_len - racket_h

score = score + 1

pingpang.play()

else:

ball_y += dy

elif ball_y + dy <= 0:

dy = -dy

ball_y = 0

pingpang.play()

else:

ball_y += dy

ball_new = pg.transform.rotate(ball, ball_y)

game_windows.blit(bg, (0,0))

game_windows.blit(ball_new, (ball_x,ball_y))

game_windows.blit(racket, (racket_x,racket_y))

game_windows.blit(font.render('Score:%04d' % score, True, [119,148,3]), [20,20])

if stop == True:

game_windows.blit(gameover, (200, 200))

pg.display.update()

time.sleep(0.03)

while stop == True:

for event in pg.event.get():

if event.type == pg.KEYUP and event.key == pg.K_SPACE:

stop = False

score = 0

ball_x = 0

ball_y = 0

racket_x = 0

racket_y = window_height - racket_h

elif event.type == pg.QUIT:

sys.quit()

time.sleep(0.1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值