python之基礎1

1、python介紹

介紹前端

    python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,Guido開始寫可以解釋Python語言語法的解釋器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。python

    最新的TIOBE排行榜,Python趕超PHP佔據第4, Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。linux

Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。web

1.web開發shell

  Python擁有不少免費數據函數庫、web模板系統、以及與web服務器進行交互的庫,能夠實現web的開發,目前比較有名氣的Python web框架爲flask和Django。這兩款框架的效率都很是高macos

2.桌面開發django

  Python在圖形界面開發上也很強大,能夠利用tkinter/PyQT框架開發各類桌面軟件!編程

3.網絡編程flask

  支持高併發的Twisted網絡框架, python3引入的asyncio使異步編程變的很是簡單(python2沒有)windows

4.爬蟲

  在爬蟲領域python的絕對是霸主地位,無人能及

5.人工智能

  這個我就很少說了吧,地球人都知道python在人工智能的地位

6.雲計算

  Python是從事雲計算工做須要掌握的一門編程語言,目前很火的雲計算框架OpenStack就是由Python開發的,若是想要深刻學習並進行二次開發,就須要具有Python的技能。

7.自動化運維

  Python是一門綜合性的語言,能知足絕大部分自動化運維需求,前端和後端均可以作,從事該領域,應從設計層面、框架選擇、靈活性、擴展性、故障處理、以及如何優化等層面進行學習。

8.遊戲開發

  在網絡遊戲開發中,Python也有不少應用,相比於Lua or C++,Python比Lua有更高階的抽象能力,能夠用更少的代碼描述遊戲業務邏輯,據我所知《文明》這款遊戲就是python寫的

9.科學運算

  97年開始,NASA就在大量使用Python在進行各類複雜的科學運算,隨着NumPy, SciPy, Matplotlib, Enthought librarys等衆多程序庫的開發,使的Python愈來愈適合於作科學計算、繪製高質量的2D和3D圖像。和科學計算領域最流行的商業軟件Matlab相比,Python是一門通用的程序設計語言,比Matlab所採用的腳本語言的應用範圍更普遍

 

2、python真實的應用場景

 


CIA: 美國中情局網站就是用Python開發的
NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
YouTube:世界上最大的視頻網站YouTube就是用Python開發的
Dropbox:美國最大的在線雲存儲網站,所有用Python實現,天天網站處理10億個文件的上傳和下載
Instagram:美國最大的圖片分享社交網站,天天超過3千萬張照片被分享,所有用python開發
Facebook:大量的基礎庫均經過Python實現的
linux系統: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
豆瓣: 公司幾乎全部的業務均是經過Python開發的
知乎: 國內最大的問答社區,經過Python開發(國外Quora)
春雨醫生:國內知名的在線醫療網站是用Python開發的
除上面以外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各類各樣的任務。

3、Python的就業方向

發展前景一:Linux運維

發展前景二:Python Web網站工程師

發展前景三:Python自動化測試

發展前景四:數據分析

發展前景五:人工智能

4、windows安裝python解釋器

打開官網 https://www.python.org/downloads/windows/ 下載中心

 

 

 

 

測試安裝是否成功:cmd下輸入python關鍵字,若是能進入交互界面表示OK

pycharm安裝方法

 http://www.javashuo.com/article/p-rrxddzlk-mv.html

 pip介紹

pip的用法其實跟linux的yum很像,它能夠幫咱們安裝python所須要的環境包,而且能夠包解決依賴關係

列出已安裝的包 

pip list 

安裝要安裝的包

pip install xxx

安裝特定版本

pip install django==1.1.5

 

導出python的環境

pip freeze > requestment.txt

從導出的python環境中安裝所須要的包

pip install -r requestment.txt

卸載導出的python環境中的包

pip uninstall -r requestment.txt

升級包 

pip install -U <包名> 

顯示包所在的目錄

pip show -f <包名> 

搜索包

pip search <搜索關鍵字> 

查詢可升級的包 

pip list -o 

下載包而不安裝 

pip install <包名> -d <目錄> 或 pip install -d <目錄> -r requirements.txt 

更換國內pypi鏡像 

阿里:https://mirrors.aliyun.com/pypi/simple 
豆瓣:http://pypi.douban.com/simple 
中國科學技術大學:http://pypi.mirrors.ustc.edu.cn/simple/ 

pip install <包名> -i http://pypi.v2ex.com/simple 

指定全局安裝源 

在unix和macos,配置文件爲:$HOME/.pip/pip.conf 
在windows上,配置文件爲:%HOME%\pip\pip.ini

(1):在windows文件管理器中,輸入 %APPDATA%

(2):會定位到一個新的目錄下,在該目錄下新建pip文件夾,而後到pip文件夾裏面去新建個pip.ini文件

(3):在新建的pip.ini文件中輸入如下內容,搞定文件路徑:"C:\Users\Administrator\AppData\Roaming\pip\pip.ini"

 

[global] 
timeout = 6000 
index-url = http://pypi.douban.com/simple 

 

建立python的虛擬環境

爲何須要虛擬環境:

若是你如今用Django 1.10.x寫了個網站,而後你的領導跟你說,以前有一箇舊項目是用Django 0.9開發的,讓你來維護,可是Django 1.10再也不兼容Django 0.9的一些語法了。這時候就會碰到一個問題,我如何在個人電腦中同時擁有Django 1.10Django 0.9兩套環境呢?這時候咱們就能夠經過虛擬環境來解決這個問題。

安裝虛擬環境:

virtualenv是用來建立虛擬環境的軟件工具,咱們能夠經過pip或者pip3來安裝

pip install virtualenv
pip3 install virtualenv

建立虛擬環境:

建立虛擬環境很是簡單,經過如下命令就能夠建立了:

virtualenv [虛擬環境的名字]

進入虛擬環境:

虛擬環境建立好了之後,那麼能夠進入到這個虛擬環境中,而後安裝一些第三方包,進入虛擬環境在不一樣的操做系統中有不一樣的方式,通常分爲兩種,第一種是Windows,第二種是*nix

    1. windows進入虛擬環境:進入到虛擬環境的Scripts文件夾中,而後執行activate
    2. linux進入虛擬環境:source /path/to/virtualenv/bin/activate
      一旦你進入到了這個虛擬環境中,你安裝包,卸載包都是在這個虛擬環境中,不會影響到外面的環境。

退出虛擬環境:

退出虛擬環境很簡單,經過一個命令就能夠完成:deactivate

 

建立虛擬環境的時候指定Python解釋器:

在電腦的環境變量中,通常是不會去更改一些環境變量的順序的。也就是說好比你的Python2/ScriptsPython3/Scripts的前面,那麼你不會常常去更改他們的位置。可是這時候我確實是想在建立虛擬環境的時候用Python3這個版本,這時候能夠經過-p參數來指定具體的Python解釋器:

virtualenv -p C:\Python36\python.exe [virutalenv name]

virtualenvwrapper

virtualenvwrapper這個軟件包可讓咱們管理虛擬環境變得更加簡單。不用再跑到某個目錄下經過virtualenv來建立虛擬環境,而且激活的時候也要跑到具體的目錄下去激活。

安裝virtualenvwrapper

linux:pip install virtualenvwrapper。
windows:pip install virtualenvwrapper-win。

virtualenvwrapper基本使用:

  1. 建立虛擬環境:

    mkvirtualenv my_env

    那麼會在你當前用戶下建立一個Env的文件夾,而後將這個虛擬環境安裝到這個目錄下。
    若是你電腦中安裝了python2python3,而且兩個版本中都安裝了virtualenvwrapper,那麼將會使用環境變量中第一個出現的Python版原本做爲這個虛擬環境的Python解釋器。

  2. 切換到某個虛擬環境:

    workon my_env
  3. 退出當前虛擬環境:

    deactivate
  4. 刪除某個虛擬環境:

    rmvirtualenv my_env
  5. 列出全部虛擬環境:

    lsvirtualenv

修改mkvirtualenv的默認路徑:

個人電腦->右鍵->屬性->高級系統設置->環境變量->系統變量中添加一個參數WORKON_HOME,將這個參數的值設置爲你須要的路徑。

建立虛擬環境的時候指定Python版本:

在使用mkvirtualenv的時候,能夠指定--python的參數來指定具體的python路徑:

mkvirtualenv --python==C:\Python36\python.exe hy_env

5、變量

變量是什麼?什麼是變量?變量有什麼好處?

變量是一種使用方便的佔位符,用於引用計算機內存地址,該地址能夠存儲Script運行時可更改的程序信息。例如,能夠建立一個名爲ClickCount的變量來存儲用戶單擊Web頁面上某個對象的次數。使用變量並不須要瞭解變量在計算機內存中的地址,只要經過變量名引用變量就能夠查看或更改變量的值。在例如:我們平時玩的遊戲都有level,打怪就升級,那個level就是變量

變量定義的規範:

變量名只能是字母、數字或下劃線的任意組合

變量名的第一個字符不能是數字

變量名不能爲關鍵字,好比 and,as,break,class,continue,def,del............

變量名字儘可能起個個有意義的名字,好比:name=‘張三’,不要詞不達意,好比:aaa='張三'

變量名字不要起過長

變量名字儘可能不要起拼音或者漢字

變量應該具備的屬性或者特徵

name='瘋子'

id,type,value

id——表明變量的內存地址

type——表明變量的數據類型

value——表明等號右邊的值

這3個特色缺一個都不叫變量

python的小整數池

在交互模式下python有一個小的整數池,他的範圍是[-5,256],這麼作的好處是避免浪費空間和資源

只要是在這個數值內,內存地址都同樣

在pycharm中,pycharm出於對性能的考慮會擴大這個整數池,至於擴大到多少,視內存而定

 

6、常量

常量即表明不變的量,其實在python裏不存在真正不變的量,只不過潛規則在咱們想定義一個常量的時候變量名爲大寫即爲常量:

好比:一我的的年紀不斷的增加,那麼年紀就叫常量,若是這我的死了,那麼他的年紀就被定格在了那一年的年紀上,這個時候年紀就是常量

AGE=60

7、用戶與程序(python)交互

首先來講什麼是交互,交互就跟人與人對話同樣,你有來言,我有去語,可以對話...可以溝通,那麼用戶怎麼跟程序去對話呢?這時候咱們能夠調用python的一個內置函數,叫:input

#例子
name = input()
print(name)

#若是你想讓程序有提示信息
name = input("what's your name?")
print(name)

8、註釋

隨着代碼愈來愈多,若是你不寫註釋的話可能過幾天連本身寫的代碼都不知道寫的什麼意思,更況且是別人了,所以就須要有註釋來提示用戶

單行註釋能夠用#表示,#號右邊的爲註釋內容
若是要多行註釋能夠用'''   ''',左右兩邊一邊1個3引號中間的部分就是註釋的內容

 

9、數據類型

數字

#int整型
定義:age=10 #age=int(10)
用於標識:年齡,等級,身份證號,qq號,個數

#float浮點型
定義:salary=3.1 #salary=float(3.1)
用於標識:工資,身高,體重,

 字符串

單引號,多引號,三引號的區別和做用
#多行字符串須要用到三引號
雙引號和單引號都是用來定義單行字符串的,那麼2者有什麼區別呢,舉個例子
想把這個句話定義成字符串怎麼辦?

what's your name
這句話當中有一個單引號了,若是咱們在用單引號把他包起來,他就會報錯,所以,咱們須要在外面用雙引號包裹起來
res = "what's your name"

 

#在python當中數字能夠進行加法,那麼字符串能夠嗎?讓我大聲的告訴你,也能夠
 a = ''
b = ''
 a + b
#結果爲'你好'


#注意,字符串只能和字符串相加,不能和別的數據類型相加
字符串的拼接

列表

#在[]內用逗號分隔,能夠存聽任意個任意類型的值好比(數字,字符串,列表,元組都OK),#用於標識存儲多個值,好比一個班級的學生有多個,一我的的興趣愛好也有多個
>>> test = [1,2,'a',[1,2],{'a','b'}]
>>> test
[1, 2, 'a', [1, 2], {'b', 'a'}]
>>>

#利用下標取列表裏的值
>>> test[0]
1
>>>
列表的定義和取值

元組

元組跟列表同樣均可以存取多個值,只不過元組大部分是用來讀的
View Code

 

字典

#既然有了列表能夠存取多個值,爲何還要有字典呢?舉個例子你就明白了
好比在這個列表中有2個值一個28用來表示年紀,一個187用來標識身高,可是並無一個說明,那個元素對應的是年紀,那個元素對應的是身高
info = [28,187]
#所以,字典就能夠解決這個問題
info = {'age':28,'high':187}
字典
info={
    'name':'fengzi',
    'hobbies':['play','sleep'],
    'company_info':{
        'name':'宏福',
        'type':'education',
    }
}
info['company_info']['name']#取公司名字
字典的取值和嵌套

布爾

#布爾類型就是True和False
>>> a=100
>>> b=200
>>> 
>>> a > b #不成立就是False,也就是假
False
>>> a < b #成立就是True, 也就是真
True

#謹記
#0,None,空都爲假,其他爲真
布爾類型

引用計數和垃圾回收機制

10、可變類型和不可變類型

#1.可變類型:在id不變的狀況下,value能夠變,則稱爲可變類型,如列表,字典

#2. 不可變類型:value一旦改變,id也改變,則稱爲不可變類型(id變,意味着建立了新的內存空間) 
View Code

11、格式化輸出

#程序中常常會有這樣場景:要求用戶輸入信息,而後打印成固定的格式
#好比要求用戶輸入用戶名和年齡,而後打印以下格式:

    My name is xxx,my age is xxx.

#這種狀況下就用到了%s和%d

res = 'my name is %s, my age is %d' % ('瘋子',29)
print(res)

#這裏要注意%d只能夠接收數字,%s能夠接收數字也能夠接收字符串
格式化輸出佔位符
#第一種方法,傳遞參數
res = 'my name is {name}, my age is {age}'.format(name='瘋子',age=29)
print(res)
#第二種方法按順序
res = 'my name is {0}, my age is {1}'.format('瘋子',29)
print(res)
format格式化的用法

內置函數(len,in,not in)

12、基本運算符

a = 10     b=20

 十3、比較運算符

 

 十4、賦值運算符

 

 十5、身份運算符

#is表示id是否相等,也就是比較內存地址是否一致,一致爲True,不一致爲False

#==表示兩個值是否一致,一致爲True,不一致爲False
is和==的區別

 十6、流程控制if...else....

name = '瘋子'
res = input('你叫什麼名字?')
if res == name:
    print('帥哥')
else:
    print('醜男')
示例1
#若是:女人的年齡>=18而且<22歲而且身高>170而且體重<100而且是漂亮的,那麼:表白,不然:叫阿姨
age_of_girl=18
height=171
weight=99
is_beautiful=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_beautiful == True:
    print('表白...')else:
    print('阿姨好')
示例2

 十7、邏輯運算符

小練習:

#1.定義布爾型變量 has_ticket 表示是否有車票
#2.定義整形變量 knife_length 表示刀的長度,單位:釐米
#3.首先檢查是否有車票,若是有,才容許進行安檢
#4.安檢時,須要檢查棍子的長度,判斷是否超過20釐米
#   若是超過20釐米,提示棍子的長度,不容許上車
#   若是不超過20釐米,按鍵經過
#5.若是沒有車票,不容許進門
has_ticket = True
stick_length = 22

if has_ticket:
    if stick_length > 20:
        print('你的棍子太長了',stick_length)
    else:
        print('請進....')
else:
    print('您沒有車票,不容許進入車站')
小練習答案

十8、流程控制之while

while 條件:    
    # 循環體
 
    # 若是條件爲真,那麼循環體則執行,執行完畢後再次循環,從新判斷條件。。。
    # 若是條件爲假,那麼循環體不執行,循環終止
num = 0
while num < 5:
    print(num)
    num+=1
打印0到4的數字
num = 0
while num <= 10:
    if num % 2 ==0:
        print(num)
    num += 1
打印0到10之間的偶數
import time
num = 0
while True:
    print(num)
    num += 1
    time.sleep(1)
死循環
count = 0
while count <= 5 :
    count += 1
    print("Loop",count)

else:
    print("循環正常執行完啦")
print("-----out of while loop ------")
輸出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循環正常執行完啦
-----out of while loop ------
while...else...
for letter in 'Python':     # continue第一個實例
   if letter == 'h':
      continue
   print('當前字母 :', letter)

var = 10                    # continue第二個實例
while var > 0:
   var = var -1
   if var == 5:
      continue
   print('當前變量值 :', var)
print("Good bye!")



count = 0        #break實例
while True:
    print(count)
    count+=1
    if count == 5:
        break
continue和break
練習
import random
win = 0
lost = 0
ping = 0
while True:
    print('\033[31m勝:%s   輸:%s   平:%s\033[0m' % (win, lost, ping))
    chooses = ['石頭', '剪刀', '']
    print('歡迎來猜拳\n1.石頭   2.剪刀   3.布   4退出')
    hum = input('請出拳:')
    computer = random.choice(chooses)
    if (hum == '1' and computer == '石頭') or (hum == '2' and computer == '剪刀') or (hum == '3' and computer == ''):
        ping += 1
        print('\033[31m不要走,決戰到天亮!!\033[0m')
    elif (hum == '1' and computer == '剪刀') or (hum == '2' and computer == '') or (hum == '3' and computer == '石頭'):
        win += 1
        print('\033[31m你好NB!!\033[0m')
    elif (hum == '1' and computer == '') or (hum == '2' and computer == '石頭') or (hum == '3' and computer == '剪刀'):
        lost += 1
        print('\033[31m你個損塞\033[0m')
    elif hum == '4':
        break
    elif not hum:
        continue
    else:
        print('輸入錯誤!!')
    print('\033[31m=\033[0m' * 50)
---猜拳遊戲

十9、流程控制之for循環

1 迭代式循環:for,語法以下

  for i in range(10):

    縮進的代碼塊

2 break與continue(同上)

文件

#在python3中如何打開一個文件呢?
f = open('lock.txt', 'r',encoding='utf-8')#應用程序向操做系統發起打開文件的操做
print(f.read())#操做系統打開文件獲得文件句柄返回給應用程序並賦值給f
f.close()#應用程序向操做系統發起關閉文件的信號,而且回收變量f

#注意:操做完文件後必定要記得關閉,由於若是開的文件多了,不關閉,會浪費系統資源,使系統變慢
#可是仍是有不少同窗忘記關閉文件,所以,能夠用下面這個方式
with open('lock.txt', 'r', encoding='utf-8') as f:
    print(f.read())

#這裏要注意字符編碼,秉承一個原則就不會出現亂碼(用什麼方式寫的,就用什麼方式打開)
View Code
r ,#只讀模式【默認模式,文件必須存在,不存在則拋出異常】
w,#只寫模式【不可讀;不存在則建立;存在則清空內容】
a, #之追加寫模式【不可讀;不存在則建立;存在則只追加內容】
#如下三種跟上面三種同樣,只不過是以二進制方式
rb 
wb
ab

文本打開的經常使用模式
r,w,a
操做文件的方法
#掌握
f.read() #讀取全部內容,光標移動到文件末尾
f.readline() #讀取一行內容,光標移動到第二行首部
f.readlines() #讀取每一行內容,存放於列表中

f.write('1111\n222\n') #針對文本模式的寫,須要本身寫換行符
f.write('1111\n222\n'.encode('utf-8')) #針對b模式的寫,須要本身寫換行符
f.writelines(['333\n','444\n']) #文件模式
#瞭解
f.readable() #文件是否可讀
f.writable() #文件是否可讀
f.closed #關閉文件
f.flush() #馬上將文件內容從內存刷到硬盤
f.name #查看打開的文件名

操做文件的方法
view code
f.seek(0,0)等價於f.seek(0)#表明把光標移動到開頭

f.seek(2,1)#表明在相對位置移動2個字節(1表明光標的相對位置,2表明在相對位置上把光標向後移動2個字節)

f.seek(-3,2)#表明在末尾往前移動3個字節(2表明把光標移動到末尾,-3表明把光標向前移動3個字節)

f.read(3)表明讀取3個字符(意思是光標在第三個字節後面)

光標位置移動
光標移動

 

二10、做業

編寫一個用戶登陸程序

  1. 登陸成功顯示歡迎頁面
  2. 登陸失敗顯示密碼錯誤,並顯示錯誤幾回
  3. 登陸三次失敗後,退出程序
username = 'root'
password = 'root'
count = 0
print('請登陸...')
while True:
    user = input('username:')
    pwd = input('password:')
    if user == username and pwd == password:
        print('歡迎登錄')
        break
    else:
        count += 1
        print('密碼錯誤', count)
        if count == 3:
            print('')
            break
View Code

 

做業升級:

  1. 能夠支持多個用戶登陸 
  2. 用戶3次認證失敗後,退出程序,再次啓動程序嘗試登陸時,仍是鎖定狀態
userinfo = {
    'root':['root',0],
    'fengzi':['fengzi',0],
    'test': ['test',0]
}

while True:
    with open('lock.txt', 'r', encoding='utf-8') as f:
        username = input('username:')
        if not username:
            continue
        elif username in f.read():
            print('您的帳戶已被鎖定,請聯繫管理員')
        elif username in userinfo.keys():
            password = input('password:')
            if password in userinfo[username][0]:
                print('歡迎頁面')
                break
            else:
                userinfo[username][1] += 1
                print('密碼錯誤',userinfo[username][1])
                if userinfo[username][1] >= 3:
                    with open('lock.txt', 'a', encoding='utf-8') as f:
                        f.write('%s|' % username)
        else:
            print('用戶名不存在')
View Code
相關文章
相關標籤/搜索