[TOC]
# 人工智能(Aritifical Intelligence,AI) 簡介
**什么是人工智能AI**
> 人工智能(Aritifical Intelligence, AI ) 是一門融合了計算機科學,統計學,神經科學和社會科學的前言綜合性學科. 它的最終目是希望計算機擁有像人一樣的智能能力,可以代替人實現識別,認知,分類和決策等多種功能.

# 編程語言發展史


**研究領域**

**應用場景**

# 編程語言介紹
**編程目的**
> 計算機的發明,是為了用機器取代/解放人力,而編程的目的則是將人類的思想流程按照某種能夠被計算機識別的表達方式傳遞給計算機,從而達到讓計算機能夠像人腦/電腦一樣自動執行的效果。
什么是編程語言?
上面提及的能夠被計算機所識別的表達方式即編程語言,語言是溝通的介質,而編程語言是程序員與計算機溝通的介質。在編程的世界里,計算機更像是人的奴隸,人類編程的目的就命令奴隸去工作
**編程的語言的發展經歷**
>機器語言:站在計算機(奴隸)的角度,說計算機能聽懂的語言,那就是直接用二進制編程,直接操作硬件;
>#匯編語言:站在計算機(奴隸)的角度,簡寫的英文標識符取代二進制去編寫程序,本質仍然是直接操作硬件;
>#高級語言:站在人(奴隸主)的角度,說人話,即用人類的字符去編寫程序,屏蔽了硬件操作( 高級語言更貼近人類語言,因而造成了:它必須被翻譯成計算機能讀懂二進制后,才能被執行)
# Python簡介
## 誕生
? ? Python的創始人吉多·范羅蘇姆(Guido van Rossum),在1989年12月的圣誕節期間,為了打發時間,決定開發一種新的腳本解釋程序,作為ABC語言的繼承。
現在,python以其優美,清晰,簡單的特性在全世界廣泛流行,成為最主流的編程語言之一。
? ? 截止至2016年7月,python在TIOBE流行編程語言排行榜,已經上升到第四名。并且從趨勢圖中可以看出其還在呈增長趨勢。


## 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被廣泛應用于眾多領域,并被各大公司使用和

**數據分析**
> 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

**測試是否成功**
打開命令提示符窗口(方法是點擊 "開始"-- "運行" --輸入cmd ),然后敲入Python

**PS:安裝時需要勾選添加環境變量**

如果忘記勾選可把Python的安裝目錄手動添加到環境變量中
右擊我的電腦---屬性----高級系統設置----系統變量---Path中追加Python的安裝目錄,
ps:記住,路徑直接用分號";"隔開!

[菜鳥教程安裝參考](http://www.runoob.com/python/python-install.html)
**運行Python程序**
> 打印"Hello Python"
```
print("Hello Python")
```
運行Python程序3種方式
1. 自帶的交互式編程界面/控制臺

2. 代碼保存為*.py文件,DOS種直接運行程序腳本


3. 集成開發環境(IDE) PyCharm 工作中使用

# PyCharm 簡介
社區版免費, 專業版收費!! 建議使用社區版本!!
[官網下載地址](http://www.jetbrains.com/pycharm-edu/download/)

**安裝教程**
一路下一步就好,不需要專門配置
[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(a); 因為漏掉了變量a的賦值

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

# 編程規范
編程過程中我們要遵循良好的編程規范!
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)