[TOC]
# 人工智能(Aritifical Intelligence,AI) 简介
**什么是人工智能AI**
> 人工智能(Aritifical Intelligence, AI ) 是一门融合了计算机科学,统计学,神经科学和社会科学的前言综合性学科. 它的最终目是希望计算机拥有像人一样的智能能力,可以代替人实现识别,认知,分类和决策等多种功能.
![人工智能](https://box.kancloud.cn/5ce4033160320b29370d3cd843cb4ec7_933x471.png)
# 编程语言发展史
![国家支持](https://box.kancloud.cn/f80c5c5b53e0068f4b774fe420ec01a5_787x383.png)
![发展](https://box.kancloud.cn/ea5768bdef600c7a3d842d0227f58a3e_907x566.png)
**研究领域**
![](https://box.kancloud.cn/5b9504125a3b9ae7d3c71f8a778070d0_1086x597.png)
**应用场景**
![](https://box.kancloud.cn/c60d230a7c99f3f8f38f733436d3981b_862x281.png)
# 编程语言介绍
**编程目的**
> 计算机的发明,是为了用机器取代/解放人力,而编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑/电脑一样自动执行的效果。
什么是编程语言?
上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质。在编程的世界里,计算机更像是人的奴隶,人类编程的目的就命令奴隶去工作
**编程的语言的发展经历**
>机器语言:站在计算机(奴隶)的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件;
>#汇编语言:站在计算机(奴隶)的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作硬件;
>#高级语言:站在人(奴隶主)的角度,说人话,即用人类的字符去编写程序,屏蔽了硬件操作( 高级语言更贴近人类语言,因而造成了:它必须被翻译成计算机能读懂二进制后,才能被执行)
# Python简介
## 诞生
Python的创始人吉多·范罗苏姆(Guido van Rossum),在1989年12月的圣诞节期间,为了打发时间,决定开发一种新的脚本解释程序,作为ABC语言的继承。
现在,python以其优美,清晰,简单的特性在全世界广泛流行,成为最主流的编程语言之一。
截止至2016年7月,python在TIOBE流行编程语言排行榜,已经上升到第四名。并且从趋势图中可以看出其还在呈增长趋势。
![TIOBE](https://box.kancloud.cn/193b65415130ce2628515f0261db2362_748x453.png)
![发展趋势](https://box.kancloud.cn/e4536335151d49e51203835bc2b102b1_917x489.png)
## Python 优势
**1 简单**
> Python 是一种代表简单主意思想的语言,阅读一个良好的Python 程序就像是在读英语. 使你可以专注于解决问题本身,而不是去搞明白语言本身
**2 易学**
> Python 定位是 优雅,明确,简单, 所以Python程序看起来总是简单易懂,初学者学习Python不但入门容易,而且将来深入学习也可以编写非常非常复杂的的程序
**3 开发效率高**
> 开发效率非常高,Python有强大的第三方库,基本上你想通过计算机实现的任何功能,Python 官方库里都有对应的模块进行支持,直接下载调用后,在基础库上载进行开发,大大降低了开发周期,避免重复造轮子
**4 可移植性**
> 由于它的开源本身,Python 已经被移植在需要平台(经过改动,它能够工作在任何平台上),如果你小心的避免使用依赖于系统的特性,那么你的所有python程序无需修改几乎就可以在市场上任意系统平台上运行
**5 可扩展可嵌入性**
> 如果你需要你的一段代码关键片段运行的更快,或者希望某些算法不公开,你可以把部分程序用C 或C++ 编写,然后在你的Python 程序中使用它们. 你可以把Python 嵌入你的C/C++ 程序,从而为你的程序用户提供脚本功能
## Python语言特点
**1. Python 是弱类型语言**
> 简单来说,弱数据类型语言对数据类型的各种类型区分不严格.可以不用提前声明变量的类型既可直接使用,而强类型语言则必须要提前声明变量的类型,否则这个变量不能使用
**2. Python 是面向对象的语言**
> Python语言支持完全的面向对象编程方式,同时也支持过程化和一定程序的函数式编程
**3.胶水语言**
> Python能够把其他语言(尤其是C 和 C++) 编写的各种模块很轻松的联合在一起,另外Python语言本身和扩展库大部分都是由 C 语言构建
## Python 应用领域
Python被广泛应用于众多领域,并被各大公司使用和
![应用领域](https://box.kancloud.cn/15bfe41fa27220dc9a06818563c7222d_527x404.png)
**数据分析**
> 2016/2月/11 ,美国科学家宣布发现引力波,使用Python分析观测30年的数据.分析引力波数据的Python包: GWPY
**云计算**
> 典型应用--Python 开发的 OpenStack
**WEB开发**
> 众多优秀的wab框架, Django,flask,tornado 科学运算, 人工智能库: 典型库 NumPy, SciPy,Matplotib, Enthought, Librarys,Pandas
**系统运维**
> 运维人员必备, slatstack(系统自动化配置和管理), Ansible (自动化运维工具)
**图形开发**
> Tkinter , wxPython, PyQT
并且越来越多公司选择python作为其主要的开发语言,例如:
**Google-** Google Groups , Gmail , Google Maps , AlphaGo 等, Gogle App Engine 支持Python作为开发语言
**NASA-** 美国航天局,从1994年起把python作为主要开发语言
**Dropbox-** 美国最大的在线云存储网站,全部用Python实现,每天处理10亿个文件的上传和下载
**豆瓣网-** 图书,唱片,电影等文化产品的资料数据库网站
**BitTTorrent** bt下载软件客户端
**gedit** Linx 平台的文文本编辑器
**GIMP** Linx 平台的图形处理软件(Linux 下的PS)
**知乎** (国外的Quora) - 社交问答网站,国内最大的问答社区,通过Python开发 Autodesk Maya - 3D 建模软件, 支持Python 作为脚本语言
**YouTube** 世界最大的视频往回走哪YouTube 就是用Python开发的
**Facebook** 大量的基础库均通过Python 实现的
**Redhat** 世界上最流行的Linux发行版中的yum 包管理工具就是通过python开发的
除上面之外,还有搜狐,金山,腾讯,盛大,网易,百度,阿里,淘宝,土豆,新浪,果壳等公司都在使用Python 完成各种任务
[更多案例]( http://www.python.org/about/success)
## Python 缺点
**第一个缺点就是运行速度慢**
>如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去
有速度要求的话,用C++改写关键部分吧。不过对于用户而言,机器上运行速度是可以忽略的。因为用户根本感觉不出来这种速度的差异
**第二个缺点就是代码不能加密**
>如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
既是优点也是缺点,python的开源性是的Python语言不能加密,但是目前国内市场纯粹靠编写软件卖给客户的越来越少,网站和移动应用不需要给客户源代码,所以这个问题就是问题了。国随着时间的推移,很多国内软件公司,尤其是游戏公司,也开始规模使用他
**构架选择太多**
(没有像C#这样的官方.net构架,也没有像ruby由于历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另一个侧面说明,python比较优秀,吸引的人才多,项目也多。
## 发展史
>1989年的圣诞节,Guido开始编写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一
种C和shell之间,功能全面,易学易用,可拓展的语言。
1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓
展系统。
Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
1999年 Python的web框架之祖——Zope 1发布
Python 2.0 - 2000/10/16,加入了内存回收机制,构成了现在Python语言框架的基础
Python 2.4 – 2004/11/30, 同年目前最流行的WEB框架Django 诞生
Python 2.5 - 2006/09/19
Python 2.6 - 2008/10/1
Python 2.7 - 2010/07/03
Python 3.0 - 2008/12/03
Python 3.1 - 2009/06/27
Python 3.2 - 2011/02/20
Python 3.3 - 2012/09/29
Python 3.4 - 2014/03/16
Python 3.5 - 2015/09/13
2014年11月,Python2.7将在2020年停止支持的消息被发布,并且不会在发布2.8版本,建议用户尽可能的迁移到3.4+ Python最初发布时,在设计上有一些缺陷,比如Unicode标准晚于Python出
现,所以一直以来对Unicode的支持并不完全,而ASCII编码支持的字符有限。例: 对中文支持不好Python3相对Python早期的版本是一个较大的升级,Py3在设计的时候没有考虑向下兼容,所以很多早期
版本的Python的程序无法再Py3上运行。为了照顾早期的版本,推出过渡版本2.6——基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。2010
年继续推出了兼容版本2.7,大量Python3的特性被反向迁移到了Python2.7,2.7比2.6进步非常多,同时拥有大量3中的特性和库,并且照顾了原有的Python开发人群。
## Python2还是Python3?
**2.x和3.x不兼容,推荐用最新版本3.6**
>py2.7是2.x系列的最后一个版本,已经停止开发,不再增加新功能。2020年终止支持。所有的最新的标准库的更新改进,只会在3.x的版本里出现。Guido决定清理Python2.x ,并且不再兼容旧版本。
最大的一个改变就是使用Unicode作为默认编码。Pyhton2.x中直接写中文会报错,Python3中可以直接写中文了。从开源项目看,支持py3的比例已经大大提高,知名的项目一般都支持py2.7和py3+。
py3比py2更规范统一、去掉了没必要的关键字Python3.x还在持续改进。
所以我们还是推荐大家使用Python3.x。
# 环境搭建
**安装Python3.6**
[Python官网下载](https://www.python.org/downloads/)
Python 2.x和3.x 不兼容, 2.7已不再更新,建议使用最新版3.6.5
![](https://box.kancloud.cn/ec3cae52f48a8cd6ad3532f98de2c0de_894x435.png)
**测试是否成功**
打开命令提示符窗口(方法是点击 "开始"-- "运行" --输入cmd ),然后敲入Python
![](https://box.kancloud.cn/edfc851e53c646ed3d6fd384caf8fefe_1047x367.png)
**PS:安装时需要勾选添加环境变量**
![](https://box.kancloud.cn/a3d1c7492f7c3b02ade80c22e8d914a0_732x539.png)
如果忘记勾选可把Python的安装目录手动添加到环境变量中
右击我的电脑---属性----高级系统设置----系统变量---Path中追加Python的安装目录,
ps:记住,路径直接用分号";"隔开!
![](https://box.kancloud.cn/27dff0c3635b91a8fa3de384a66b9447_728x495.png)
[菜鸟教程安装参考](http://www.runoob.com/python/python-install.html)
**运行Python程序**
> 打印"Hello Python"
```
print("Hello Python")
```
运行Python程序3种方式
1. 自带的交互式编程界面/控制台
![](https://box.kancloud.cn/77ded8d5679608910d3bf8483da4a7df_236x126.png)
2. 代码保存为*.py文件,DOS种直接运行程序脚本
![代码保存为*.py文件](https://box.kancloud.cn/407a3239d9dd96c3987e531e43fc78e3_488x207.png)
![运行](https://box.kancloud.cn/844e4d085b36cc890af63f1562b0b221_614x230.png)
3. 集成开发环境(IDE) PyCharm 工作中使用
![](https://box.kancloud.cn/057ce035a46401868b052c2cd4b64d1b_796x205.png)
# PyCharm 简介
社区版免费, 专业版收费!! 建议使用社区版本!!
[官网下载地址](http://www.jetbrains.com/pycharm-edu/download/)
![PyCharm社区版](https://box.kancloud.cn/55cc8f912505a8bb142a44cf9c586986_643x411.png)
**安装教程**
一路下一步就好,不需要专门配置
[PyCharm安装教程](https://blog.csdn.net/qq_40130759/article/details/79421242)
**常用设置**
- 更改字体
File->settings->Editor->Font
- 更改皮肤
File-settings-appearance&Behavior- Scheme 选择自己需要的风格
- 更改注释颜色
pycharm 设置注释字体颜色
File-setting-Editor-Color Scheme-Python 找 Line Comment 改右边颜色就可以了
# 我的第一个Python程序
**重点print()**
>打印是Python中常用的功能,,print()这个功能可理解为展示打印的结果! 把要打印的查看结果的对象塞进括号中,就可以了! Python2.7 不加括号也可以
![print](https://box.kancloud.cn/d082db1490c201e3a51ac2016f04c96d_464x138.png)
如果打印的对象不存在就会报错! 比如 直接打印 print(a); 因为漏掉了变量a的赋值
![无法打印不存在对象](https://box.kancloud.cn/6920024a5953ed9aa47158311deed220_423x147.png)
1. 单行注释 `#` 解释说明代码,代码不执行
2. 多行注释 ` '''''多行注释内容''' ` 3对单引号或3对双引号
3. 打印语句 `print("内容")` 一串字符用单引号或双引号括起来
5. 变量: 计算机内存中存储数据的单位/容器
6. 比较: 如果...否则结构
7. 获取用户控制台输入: `变量= input`
```
# 我的第一个Python
print("我的第一个Python")
print("菩提本无树")
print('明镜亦非台',end='') # 不换行输出
'''
多行注释: 定义变量保存2 个数,求和
'''
num1 = 3;
num2 = 4;
print("结果",num1+num2)
# 比较:如果否则
if num1>num2:
print("第一个数大")
else:
print("第二个数大")
'''
获取用户输入:
'''
uname = input("请输入您的名字:")
print('名字:',uname)
```
![](https://box.kancloud.cn/987856747de55800fccbc794ffb2eb9e_694x377.png)
# 编程规范
编程过程中我们要遵循良好的编程规范!
1. 变量名/标识符规范: 由字母数字下划线组成,但是首字母不能为数字
2. 名字区分大小写
3. 注意:python 中以 `_ `或 双下划线 `__` 开头的标识符由特殊意义,尽量不要使用!
以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入;
以双下划线开头的(foo)代表类的私有成员;以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如__init()代表类的构造函数。
4. 变量名不能为保留关键字
>下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。所有Python的关键字只包含小写字母。
了解就好!
| 关键字 | 关键字 | 关键字 |
| --- | --- | --- |
| and | or | not |
| assert | finally | or |
| break | for | pass |
| class | from | print |
| continue | global | raise |
| def | if | return |
| del | import | try |
| elif | in | while |
| else | is | with |
| except | lambda | yield |
5. 行和缩进
学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。如下所示:
```
if num1 > num2:
print "True"
else:
print "False"
```
以下代码将会执行错误:
**ndentationError: unexpected indent**
```
if True:
print "Answer"
print "True"
else:
print "Answer"
# 没有严格缩进,在执行时保持
print "False"
````
6. 多行语句
Python语句中一般以新行作为为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示,不建议使用:
```
total = item_one + \
item_two + \
item_three
```
语句中包含[], {} 或 () 括号就不需要使用多行连接符。如下实例:
```
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
```
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:
```
num1 = 3; print("num1:",num1)
```
7. Python空行
>函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
# Python 中文编码
>Python 2.x中打印中文会遇到乱码! 因为Python 2.x中默认的编码格式是ASCII,在没有修改编码格式时无法正确打印汉字,所以出现中文乱码问题!
解决方法:在文件头加入 中文编码声明
```
# -- coding: UTF-8 --
或者
#coding=utf-8
print "你好,世界";
```
注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码
# 资源网盘地址
1. [Python3.6网盘](https://pan.baidu.com/s/1BlehJ365UJ5nIM6w4h0OCA 密码:uxnp)
2. [PyCharm网盘](https://pan.baidu.com/s/1qEpCV1qMpsbbxgocZEen0A 密码:4nsu)
3. [代码01](https://pan.baidu.com/s/1ztj_6WDdIiRVOI9-yzQApw 密码:nki7)