一直忙于工作,似乎忘记了抽时间学习新知识,最近难得空闲,花了两天时间看了一下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而写的一个小游戏。

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

演示视频如下:(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)

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

  1. Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

    一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...

  2. 【Python自然语言处理】读书笔记:第一章:语言处理与Python

    原书:<Python自然语言处理>:https://usyiyi.github.io/nlp-py-2e-zh/ 语言处理与Python 原文:https://usyiyi.github. ...

  3. 广工android嵌入式系统试卷_教育录播系统的选择

    提到教育录播系统,就不得不提及文化教育管理行业演示教学工具的发展,教育服务行业演示板书大致经历了幻灯片-电视机-投影仪-互动触摸平板等一系列相关硬件和手段,互联网企业网络授课让教育的传播广度大幅提升, ...

  4. 二次开发_企业ERP系统二次开发问题的探讨分析

    新朋友点上方蓝字"ERP之家"快速关注 导读:根据笔者多年在企业中实施及推进ERP,概的实战经验,阐述了ERP系统二次开发的必然性和二次发开的成因及存在的风险,提出如何合理地规避二 ...

  5. 微信投票系统java开发_微信投票系统 v3.0

    微信投票系统简介 微信投票系统软件是一个以php+MySQL进行开发的微信投票系统. 吸粉神器,微信图文投票系统,强大的微信投票系统,防作弊的微信投票系统. 微信投票系统安装步骤: 解压压缩包到根目录 ...

  6. oa java开发_[原创]OA系统买JAVA开发的还是PHP开发?

    [原创]OA系统买JAVA开发的还是PHP开发? 买OA办公系统的时候,发现OA的开发语言有很多种,有些是PHP的.有些是JAVA的等等.而对于不同的开发语言对OA系统的应用效果有什么影响,究竟哪一种 ...

  7. 基于python的投票系统论文_在线投票系统 毕业论文设计

    共( 4 )页 第 I 页 摘 要 在积极建立科学管理机制的今天, 仅仅靠原始的手工管理或简单的 单机管理, 管理部门面对大量的信息, 无法有效率地将其中的重要部分 提取出来, 并做出相应的判断和处理 ...

  8. 比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...

    最早见到华为的HiCar,还是今年4月份的华为P40系列手机发布会.根据发布会公布的信息,HiCar主要的特点就是手机与汽车的顺畅连接体验.借由5G手机,汽车可以实现更强的数据传输能力,同时百万级别的 ...

  9. 计算机主板系统安装系统安装系统,重装系统_系统重装_电脑重装系统【步骤|图文教程】-太平洋IT百科手机版...

    如何重装系统?重装系统教程 电脑在使用长了以后就免不了会发生一些问题,如电脑感染顽固病毒木马,杀毒软件查杀不了,安装系统时间长了硬盘里的碎片越来越多,运行的速度越来越慢,出现系统瘫痪不能使用,经常死机 ...

最新文章

  1. 工程介绍好处费性质_水运工程造价工程师继续教育课件上新丨海外水运工程造价编制介绍课程发布...
  2. 机器学习(Part I)机器学习的种类
  3. 第七章 控制PL/SQL错误
  4. python用pandas读取excel_Python使用pandas读取Excel文件数据和预处理小案例
  5. QT学习笔记(十一):QString类
  6. js判断一个字符串 是否存在在另一个字符串
  7. 大数据揭示90后爱情观,“有钱”只能排最后
  8. 转:Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
  9. 【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类...
  10. windows下gethostbyname 调用失败
  11. docker-compose部署EFKL,存储,过滤laravel日志文件
  12. 3389远程批量服务器,3389远程桌面登陆器 支持3389远程批量连接
  13. seqkit根据基因id_AgriSeq 靶向测序法基因分型技术
  14. 如何新建一个keil工程 的详细步骤
  15. Multisim 14元件伏安特性测量
  16. 为什么我们要学习C语言?
  17. 一种基于GRU神经网络的英文诗歌生成系统
  18. Leetcode 318. Maximum Product of Word Lengths
  19. linux 安装云锁
  20. ENFP型人格的特征分析(mbti性格测试)

热门文章

  1. MongoDB——聚合管道之$project操作
  2. 涨知识了,原来微信可以一键找到对方位置
  3. 软件测试转行做产品经理,转型产品经理,测试工程师的出路!
  4. zte android截屏快捷键,中兴红牛V5手机怎么截屏 中兴红牛V5截图技巧图解
  5. 信源编码技术作业(1)绘制、分析清浊音频谱图
  6. 汽车以太网芯片IP的功能安全验证和优化
  7. Qt 多线程bug:moc_widget.cpp:-1: error: undefined reference to `Mythread::~Mythread()‘:-1:
  8. 成功解决: Windows10没有蓝牙问题
  9. Android中的传感器之---加速度传感器
  10. 锤子便签V2.5产品体验报告