天天看點

python簡介

一、python介紹和學習目标

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

  算法能力、資料結構、模組化能力、設計模式、程式設計藝術、代碼規範這六項是未來重點培養提升的地方。

1、python的特點

  最新的TIOBE排行榜,Python趕超PHP占據第4。Python崇尚優美、清晰、簡單,是一個優秀并廣泛使用的語言,可做軟體開發、人工智能、web開發等等。

  1)一門面向對象的語言;

  2)擁有豐富的庫;

  3)可移植性好;

  4)免費、開源;

  5)簡單易學。

2、目前Python主要應用領域

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack涵蓋了龐大的技術生态(資料中心、運維、高可用、虛拟化技術、存儲、網絡技術...),還有龐大的項目集(計算服務Nova、塊存儲服務Cinder、對象存儲Swift、編排服務Heat、裸機服務Ironic、容器編排服務Magnum),包含開發、運維、實施、售前等發展方向
  • WEB開發: 最火的Python web架構Django, 支援異步高并發的Tornado架構,短小精悍的flask,bottle, Django官方的智語把Django定義為the framework for perfectionist with deadlines(大意是一個為完全主義者開發的高效率web架構)
  • 網絡程式設計: 支援高并發的Twisted網絡架構, py3引入的asyncio使異步程式設計變的非常簡單
  • 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas,Python越來越适合于做科學計算、繪制高品質的2D和3D圖像。和科學計算領域最流行的商業軟體Matlab相比,Python是一門通用的程式設計語言,比Matlab所采用的腳本語言的應用範圍更廣泛
  • 系統運維: 運維人員必備語言,自動化運維方向
  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動态語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生産效率遠遠高于c,c++,java,尤其擅長政策回測
  • 圖形GUI: PyQT, WxPython,TkInter
  • 遊戲開發:在網絡遊戲開發中Python也有很多應用。相比Lua or C++,Python 比 Lua 有更高階的抽象能力,可以用更少的代碼描述遊戲業務邏輯,與 Lua 相比,Python 更适合作為一種 Host 語言,即程式的入口點是在 Python 那一端會比較好,然後用 C/C++ 在非常必要的時候寫一些擴充。Python 非常适合編寫 1 萬行以上的項目,而且能夠很好地把網遊項目的規模控制在 10 萬行代碼以内。

二、程式設計語言和分類

  程式設計語言總體分以為機器語言、彙編語言、進階語言三類。

1、機器語言

  計算機内部隻能接受二進制代碼,是以,用二進制代碼0和1描述的指令稱為機器指令,全部機器指令的集合構成計算機的機器語言,用機器語言程式設計的程式稱為目标程式。隻有目标程式才能被計算機直接識别和執行。

  機器語言屬于低級語言,機器語言編寫的程式無明顯特征,難以記憶,不便閱讀和書寫,且依賴于具體機種,局限性很大。現在僅限計算機生産廠家的專業人員學習使用。

2、彙編語言

  彙編語言雖然指令采用了英文縮寫的辨別符,更容易識别和記憶,但它的實質和機器語言是相同的,都是直接對硬體操作。它同樣需要程式設計者将每一步具體的操作用指令的形式寫出來。彙程式設計式的每一句指令隻能對應實際操作過程中的一個很細微的動作,例如移動、自增。

  缺點:彙編源程式一般比較冗長、複雜、容易出錯,而且使用彙編語言程式設計需要有更多的計算機專業知識。

  優點:用彙編語言所能完成的操作不是一般進階語言所能夠實作的,而且源程式經彙編生成的可執行檔案不僅比較小,而且執行速度很快。

  特點:重視運作效率而不是開發效率,可以讓人了解底層工作原理。

3、進階語言

  進階語言主要是相對于彙編語言而言,進階語言将許多相關的機器指令合成為單條指令,并且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程式中的指令。同時,由于省略了很多細節,程式設計者也就不需要有太多的專業知識。

  特點:進階語言所編制的程式不能直接被計算機識别,必須經過轉換才能被執行。

  1、編譯類

  編譯是指在應用源程式執行之前,就将程式源代碼“翻譯”成目标代碼(機器語言),是以其目标程式可以脫離其語言環境獨立執行(編譯後生成的可執行檔案,是cpu可以了解的2進制的機器碼組成的),使用比較友善、效率較高。如C、C++、Delphi等

  優點:編譯後程式運作時不需要重新翻譯,直接使用編譯的結果就行了。

  缺點:程式執行效率高,依賴編譯器,跨平台性差些。

  2、解釋類

  執行方式類似于我們日常生活中的“同聲翻譯”,應用程式源代碼一邊由相應語言的解釋器“翻譯”成目标代碼(機器語言),一邊執行,是以效率比較低,而且不能生成可獨立執行的可執行檔案,應用程式不能脫離其解釋器(想運作,必須先裝上解釋器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,可以動态地調整、修改應用程式。如Python、Java、PHP、Ruby等語言。

  優點:跨平台好,一份代碼,到處使用

  缺點:執行速度慢,依賴解釋器運作

4、程式設計語言總結

  機器語言——優點是最底層,速度最快,缺點是最複雜,開發效率最低

  彙編語言——優點是比較底層,速度最快,缺點是複雜,開發效率最低

  進階語言——編譯型語言執行速度快,不依賴語言環境運作,跨平台差

        解釋型跨平台好,一份代碼,到處使用,缺點是執行速度慢,依賴解釋器運作

三、變量和常量

1、變量定義的規則

  • 變量名隻能是 字母、數字或下劃線的任意組合
  • 變量名的第一個字元不能是數字
  • 以下關鍵字不能聲明為變量名

    ['and', 'as', 'assert', 'break', 'class',

    'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally',

    'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not',

    'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with',

    'yield']

2、變量定義規範

  駝峰體:

AgeOfStudent = 56 
NumberOfStudents = 80      

  下劃線:

age_of_student = 56 
number_of_students = 80      

  常量即指不變的量,如pai 3.141592653..., 或在程式運作過程中不會改變的量,Python中沒有一個專門的文法代表常量,程式員約定俗成用變量名全部大寫代表常量。

四、格式化輸出

  程式中經常會有這樣場景:要求使用者輸入資訊,然後列印成固定的格式。比如要求使用者輸入使用者名和年齡,然後列印如下格式:

  My name is xxx,my age is xxx.

  很明顯,用逗号進行字元串拼接,隻能把使用者輸入的名字和年齡放到末尾,無法放到指定的xxx位置,而且數字也必須經過str(數字)的轉換才能與字元串進行拼接。

  %s就是代表字元串占位符,除此之外,還有%d是數字占位符。

#%s字元串占位符:可以接收字元串,也可接收數字
print('My name is %s,my age is %s' %('egon',18))
#%d數字占位符:隻能接收數字
print('My name is %s,my age is %d' %('egon',18))
print('My name is %s,my age is %d' %('egon','18')) #報錯

#接收使用者輸入,列印成指定格式
name=input('your name: ')
age=input('your age: ') #使用者輸入18,會存成字元串18,無法傳給%d

print('My name is %s,my age is %s' %(name,age))

#注意:
#print('My name is %s,my age is %d' %(name,age)) #age為字元串類型,無法傳給%d,是以會報錯
      
python簡介
python簡介
練習:使用者輸入姓名、年齡、工作、愛好 ,然後列印成以下格式
------------ info of Egon -----------
Name  : Egon
Age   : 22
Sex   : male
Job   : Teacher 
------------- end -----------------


# -*- coding:utf-8 -*-
__author__ = 'Qiushi Huang'


# 練習:使用者輸入姓名、年齡、工作、愛好 ,然後列印成以下格式
def func():
    name = input('使用者姓名:')
    age = input('使用者年齡:')
    job = input('使用者工作:')
    sex = input('使用者性别:')

    print('info of Egon'.center(30, '-'))
    print('Name  : %s' % name)
    print('Age   : %s' % age)
    print('Sex   : %s' % sex)
    print('Job   : %s' % job)
    print('end'.center(30,'-'))


func()      

小練習

五、運算符

  運算按種類可分為算數運算、比較運算、邏輯運算、指派運算、成員運算、身份運算、位運算等。

1、算數運算

  以下假設變量:a=10,b=20

python簡介

2、比較運算

python簡介

3、指派運算

python簡介

4、邏輯運算

python簡介
#三者的優先級從高到低分别是:not,or,and
>>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3
False
#最好使用括号來差別優先級,其實意義與上面的一樣
>>> (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
False 
      

5、身份運算

  is比較的是id;而==比較的是值。

六、流程控制——if...else

1、單分支

if 條件:
    滿足條件後要執行的代碼
      

  示例:如果女人的年齡>30歲,那麼叫阿姨。

age_of_girl=31
if age_of_girl > 30:
    print('阿姨好')
      

2.雙分支

if 條件:
    滿足條件執行代碼
else:
    if條件不滿足就走這段
      

  示例:如果女人的年齡>30歲,則叫阿姨,否則叫小姐

age_of_girl=18
if age_of_girl > 30:
    print('阿姨好')
else:
    print('小姐好')
      

  示例:如果女人的年齡>=18且<22且身高>170且體重<100而且漂亮,則表白,否則叫阿姨

age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    print('表白...')
else:
    print('阿姨好')
      

3.多分支

if 條件:
    滿足條件執行代碼
elif 條件:
    上面的條件不滿足就走這個
elif 條件:
    上面的條件不滿足就走這個
elif 條件:
    上面的條件不滿足就走這個    
else:
    上面所有的條件不滿足就走這段
      

  示例:根據使用者輸入内容列印其權限

'''
egon --> 超級管理者
tom  --> 普通管理者
jack,rain --> 業務主管
其他 --> 普通使用者
'''
name=input('請輸入使用者名字:')

if name == 'egon':
    print('超級管理者')
elif name == 'tom':
    print('普通管理者')
elif name == 'jack' or name == 'rain':
    print('業務主管')
else:
    print('普通使用者')      

七、流程控制——while循環

  循環語句是為了做到不寫重複代碼又能讓程式重複一段代碼多次。

1、條件循環:while,文法:

while 條件:    
    # 循環體
 
    # 如果條件為真,那麼循環體則執行,執行完畢後再次循環,重新判斷條件。。。
    # 如果條件為假,那麼循環體不執行,循環終止
      

  示例代碼:

#列印0-10
count=0
while count <= 10:
    print('loop',count)
    count+=1

#列印0-10之間的偶數
count=0
while count <= 10:
    if count%2 == 0:
        print('loop',count)
    count+=1

#列印0-10之間的奇數
count=0
while count <= 10:
    if count%2 == 1:
        print('loop',count)
    count+=1
      

2、死循環

  有一種循環叫死循環,一經觸發,就運作個天荒地老、海枯石爛。

  while 是隻要後邊條件成立(也就是條件結果為真)就一直執行,怎麼讓條件一直成立呢?

count = 0
while True: #True本身就是真呀

    print("你是風兒我是沙,纏纏綿綿到天涯...",count)
    count +=1
      

3、循環中止語句(break\continue)

  如果在循環的過程中,因為某些原因,你不想繼續循環了,怎麼把它中止掉呢?這就用到break 或 continue語句:

  • break用于完全結束一個循環,跳出循環體執行循環後面的語句
  • continue和break有點類似,差別在于continue隻是終止本次循環,接着還執行後面的循環,break則完全終止循環
#break用于退出本層循環
while True:
    print "123"
    break
    print "456"

#continue用于退出本次循環,繼續下一次循環
while True:
    print "123"
    continue
    print "456"
      

4、while+else

  與其它語言else 一般隻與if 搭配不同,在Python 中還有個while ...else 語句,while 後面的else 作用是指,當while 循環正常執行完,中間沒有被break 中止的話,就會執行else後面的語句。

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

  如果執行過程中被break,則不會再執行else語句。

count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)

else:
    print("循環正常執行完啦")
print("-----out of while loop ------")
輸出

Loop 1
Loop 2
-----out of while loop ------
      

5、while循環練習題

#1. 使用while循環輸出1 2 3 4 5 6     8 9 10
#2. 求1-100的所有數的和
#3. 輸出 1-100 内的所有奇數
#4. 輸出 1-100 内的所有偶數
#5. 求1-2+3-4+5 ... 99的所有數的和
#6. 使用者登陸(三次機會重試)
#7:猜年齡遊戲
要求:
    允許使用者最多嘗試3次,3次都沒猜對的話,就直接退出,如果猜對了,列印恭喜資訊并退出
#8:猜年齡遊戲更新版 
要求:
    允許使用者最多嘗試3次
    每嘗試3次後,如果還沒猜對,就問使用者是否還想繼續玩,如果回答Y或y, 就繼續讓其猜3次,以此往複,如果回答N或n,就退出程式
    如何猜對了,就直接退出 
      

  答案:

python簡介
python簡介
#題一
count=1
while count <= 10:
    if count == 7:
        count+=1
        continue
    print(count)
    count+=1
    

count=1
while count <= 10:
    if count != 7:
        print(count)
    count+=1
    

#題目二
res=0
count=1
while count <= 100:
    res+=count
    count+=1
print(res)

#題目三
count=1
while count <= 100:
    if count%2 != 0:
        print(count)
    count+=1
    
#題目四
count=1
while count <= 100:
    if count%2 == 0:
        print(count)
    count+=1
    
    
    
#題目五
res=0
count=1
while count <= 5:
    if count%2 == 0:
        res-=count
    else:
        res+=count
    count+=1
print(res)
    

#題目六
count=0
while count < 3:
    name=input('請輸入使用者名:')
    password=input('請輸入密碼:')
    if name == 'egon' and password == '123':
        print('login success')
        break
    else:
        print('使用者名或者密碼錯誤')
        count+=1

#題目七
age_of_oldboy=73

count=0
while count < 3:
    guess=int(input('>>: '))
    if guess == age_of_oldboy:
        print('you got it')
        break
    count+=1

#題目八
age_of_oldboy=73

count=0
while True:
    if count == 3:
        choice=input('繼續(Y/N?)>>: ')
        if choice == 'Y' or choice == 'y':
            count=0
        else:
            break

    guess=int(input('>>: '))
    if guess == age_of_oldboy:
        print('you got it')
        break
    count+=1      

while練習題答案

八、流程控制——for循環

1、疊代式循環:for,文法如下

for i in range(10):

    縮進的代碼塊
      

2、break與continue(同上)

3、for循環嵌套

  示例1:列印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ')
    print()
      

  示例2:列印金字塔

#分析
'''

             #max_level=5
    *        #current_level=1,空格數=4,*号數=1
   ***       #current_level=2,空格數=3,*号數=3
  *****      #current_level=3,空格數=2,*号數=5
 *******     #current_level=4,空格數=1,*号數=7
*********    #current_level=5,空格數=0,*号數=9

#數學表達式
空格數=max_level-current_level
*号數=2*current_level-1

'''

#實作
max_level=5
for current_level in range(1,max_level+1):
    for i in range(max_level-current_level):
        print(' ',end='') #在一行中連續列印多個空格
    for j in range(2*current_level-1):
        print('*',end='') #在一行中連續列印多個空格
    print()
      

4、for...else

  for語句是python中的循環控制語句。可用來周遊某一對象,還具有一個附帶的可選的else塊,主要用于處理for語句中包含的break語句。

  如果for循環未被break終止,則執行else塊中的語句。

# 求 50 - 100 之間的質數
import math
for i in range(50, 100 + 1):
    for j in range(2, int(math.sqrt(i)) + 1):
        if i % j == 0:
           break
    else:
        print(i)
"""
53
59
61
67
71
73
79
83
89
97
"""