Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Python Workshop



人生苦短,我用Python!

主要内容
  • 编程概述
  • Python基础简介
  • Python应用案例
  • 编程的未来
  • 知识
  • 陈述性知识 : 事实的声明
  • “y是X的平方根 y*y = x”
  • 程序性知识 : 关于“如何做”的方法、行为或操作步骤
  • 从猜想开始, 命名 z!
  • 如果, z*z 无限接近 x, z 就是答案.
  • 否则, 取z和x/z的平均值, 进行新的猜想.
  • 使用这个新的数字, 重复以上步骤,直到获得无限接近等式的答案为止
  • 程序性思维源于程序性知识.

    计算机结构


  • 图灵表示:使用这几个基本单元, 能计算任何内容.
  • 现代编程语言具有更方便的原语集.
  • 编译原理(低级语言)




    语法和内部控制单元的语义.

  • Move一个地址上的数据
  • 执行一个简单的ALU操作
  • 机器语言、汇编.

    编译原理(高级语言)

    编译型语言:

    解释型语言:

    2018编程语言排行榜
    Python的历史
  • 1980年,形成python的设计构想
  • 1989年,荷兰CWI的Guido设计了Python的的编译/解释器.
  • 2000年10月16日,Python 2.0 发布
  • 2008年12月3日,Python 3.0发布
  • 为什么使用Python?
  • 语法优雅
  • 可读性强
  • 简单易学
  • 可移植性
  • 可扩展性
  • 丰富的数据结构
  • 丰富的扩展库
  • 当然也有很多的缺陷!!!

    Python项目?

    作为主语言实现:

  • Bittorrent
  • Dropbox
  • Ubuntu Software Center
  • Instagram
  • EVE Online
  • YouTube
  • 知乎
  • 作为嵌入式脚本实现:

  • Abaqus
  • Autodesk Maya
  • FreeCad
  • Gedit
  • Notepad++
  • Python IDE
    Python集成开发环境能够帮助开发者提高开发效率、加快开发的速度:
  • Pycharm
  • VsCode
  • Enthought Canopy
  • Anaconda
  • 基础语法

    Python语言易学、易读

    		>>>print("Hello World!")
    		>Hello World!
    数据对象

    所有结构都是对象!

    存在两种对象形式:

  • 标量 : 没有可见的分量
  • 	   >>>type(3.0)
    	   >>>type(3)
    	   >>>type(True)
  • 非标量 : 有内部的结构
  • 	   >>>type("salam")
    	   >>>type([1, 2, 3])
    切片, 重载 和 类型转换

    类型转换:

    		>>>float(3)

    运算符重载:

    		>>>print(3 * "a") 
    		>>>print("a" + "bc")

    数据切片:

    		>>>'salam'[1:3]		
    		>>>'abc'[-1]
    		>>>'abc'[:]
    基本操作符
  • 运算符
  • 			>>>k = 1.0 + (3.0**2.0) + 4.0 * 12.0		
    			>>>m = 3 % 2 + 3 / 2
  • 比较符
  • 			>>>k = (2 == 5)		
    			>>>m = (3 >= 7)
  • 布尔运算符
  • 			>>>k = True and not False		
    			>>>m = False or True
    条件语句

    条件语句是用来判断给定的条件是否满足(表达式值是否为0),并根据判断的结果(真或假)决定执行的语句

    		if x%2 == 0:
    			if x%3 == 0:
    				print('被2和3整除')
    			else:
    				print('只被2整除')
    		elif x%3 == 0:
    			print('只被3整除')
    迭代

    迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。

    		x = 3
    		ans = 0
    		itersLeft = x
    		while (itersLeft != 0):
    			ans = ans + x
    			itersLeft = itersLeft – 1
    		print(str(x) + '*' + str(x) + ' = ' + str(ans))
    For循环

    For循环定义如下:

    		for < identifier > in < sequence >:
    			< code block > 

    A sequence of Intergers for iteration can be generated by:

    		range(n) = [0, 1, 2, 3, …, n-1]
    		range(m,n) = [m, m+1, …, n-1]
    		xrange(n)
    函数

    函数实现抽象方法

    		def < function name > (< formal parameters >):
    			< function body > 

    一个简单的例子:

    		def max(x, y):
    			if x > y:
    				return x
    			else:
    				return y

    可以这样调用它:

    		>>>z = max(3, 4)
    模块化

    所有的方法和脚本都可以封装成modules. 可被独立导入引用.

    		pi = 3.14159
    
    		def area(radius):
    			return pi*(radius**2)
    
    		def circumference(radius):
    			return 2*pi*radius

    假设这个文件定义为circle.py, 可以用一下的方式引用它:

    		import cicle as crl
    		#OR
    		from  circle import area
    		#OR
    		from circle import *
    递归

    程序通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解

    递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算

    		def recurMul(a, b):
    			if b == 1:
    				return a
    			else:
    				return a + recurMul(a, b-1)

    递归需小心使用!!!

    异常

    程序碰到一个异常情况怎么办?

  • 试图访问超出列表限制的下标将引发一个 IndexError
  • 试图强转一个不兼容的类型将引发一个 TypeError
  • 引用一个不存在的变量将引发 NameError
  • 强制混合不兼容的数据类型将引发 TypeError
  • 怎么办?

  • 默默捕获、沉默是金
  • 返回错误值
  • 中断执行
  • 异常处理
    		try:
    			f = open(‘grades.txt’)
    			# … code to read and process grades
    		except:
    			raise Exception('Can’t open grades file')

    通常用法:

    		def divide(x, y):
    			try:
    				result = x / y
    			except ZeroDivisionError, e:
    				print "division by zero! " + str(e)
    			else:
    				print "result is", result
    			finally:
    				print "executing finally clause"
    Python应用领域
  • 系统编程:shell工具、OS工具
  • C/S软件应用
  • B/S软件应用
  • 数据库编程
  • 自动化脚本
  • 组件集成
  • web爬虫
  • 游戏
  • 图像处理
  • 数据分析
  • 数据挖掘
  • 人工智能
  • 游戏

    Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音、按键控制等封装。

    建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚.

    			安装:pip install pygame
    打飞机游戏

    控制飞机飞行:

    			key_pressed = pygame.key.get_pressed()  
    			# 获得用户所有的键盘输入序列
    			if key_pressed[K_w] or key_pressed[K_UP]:  
    				# 如果用户通过键盘发出“向上”的指令
    				me.move_up()
    		

    飞机动态效果:

    			if not delay % 3:
    				witch_image = not switch_image
    			if switch_image:
    				screen.blit(me.image1, me.rect)  
    				# 绘制我方飞机的两种不同的形式
    			else:
    				screen.blit(me.image2, me.rect)
    		
    文本挖掘

    文本挖掘步骤.

    舆情分析!

    影评分析
    web爬虫

    爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

  • 爬虫技术栈
  • 		XML/JSON/CSV内容解析、文本解析、正则表达式、XPath
    		
  • Python爬虫库
  • 		BeautifulSoup、htmlParser
    		
  • 爬虫框架
  • 		 Scrapy  Charlotte 
    		
    图形程序

    Kivy!!

    二维码扫描软件

    需求:开发一个快递收货二维码扫描软件.

    二维码识别,使用 zbar

    		from PIL import Image
    		import zbarlight
    		file_path = './tests/fixtures/one_qr_code_and_one_ean.png'
    		with open(file_path, 'rb') as image_file:
    			image = Image.open(image_file)
    			image.load()
    		codes = zbarlight.scan_codes('qrcode', image)
    		print('QR codes: %s' % codes)
    		/pre> 
    网站设计

    需求:开发一个网上生鲜超市,可以完成加购物车,收藏,下单,结算等电商相关功能.

  • 技术栈
  • 		Vue + Django Rest Framework 前后端分离技术
    		Sentry 错误日志的监控和告警
    		第三方登录和支付宝支付的集成
    		
  • 系统构成
  • 		vue前端项目
    		django rest framework 实现API
    		xadmin后台管理系统
    		富文本DjangoUeditor
    		

    源码

    数据分析

    示例:股价量化分析

    机器学习

    基础库:

    				Numpy、Pandas(dataframes)、Matplotlib、SciPy
    		

    机器学习框架:

    				Pytorch、Orange3、Caffe、scikit-learn、TensorFlow
    		

    机器学习算法:

    				基础算法:K-均值聚类、决策树、线性回归、logistic 回归
    				高阶算法: 支持向量机、随机森林、降维算法、神经网络
    		
    机器学习

    基于Deep Q Learning的FlappyBird

    		Initialize replay memory D to size N
    		Initialize action-value function Q with random weights
    		for episode = 1, M do
    			Initialize state s_1
    			for t = 1, T do
    				With probability ϵ select random action a_t
    				otherwise select a_t=max_a  Q($s_t$,a; $θ_i$)
    				Execute action a_t in emulator and observe r_t and s_(t+1)
    				Store transition (s_t,a_t,r_t,s_(t+1)) in D
    				Sample a minibatch of transitions (s_j,a_j,r_j,s_(j+1)) from D
    				Set y_j:=
    					r_j for terminal s_(j+1)
    					r_j+γ*max_(a^' )  Q(s_(j+1),a'; θ_i) for non-terminal s_(j+1)
    				Perform a gradient step on (y_j-Q(s_j,a_j; θ_i))^2 with respect to θ
    			end for
    		end for
    		
    少儿编程
    STEAM:全方位培养孩子综合能力

    STEAM教育是集科学、科技、工程、艺术、数学多学科的综合教育理念.

    少儿编程政策风向

    国外少儿编程起步早于国内,目前发展的已经较为成熟。

    国内政策

    2016-2018年少儿编程宏观政策环境

    优势和不足

    少儿编程行业理念足够先进,源于对孩子逻辑思维模式,解决复杂问题的能力提升。

    行业梳理

    少儿编程授课模式,教学内容(图形化编程)均大同小异。行业模式各有不同。

    趋势

    当前主要是兴趣+效果复合导向,需国家政策方形指引和售后完善。

    程序性知识!

    Thank you!

    Python Workshop By Shayan Fahimi