Python開發-- Lesson 1--Python介紹和入門(2016/07/23)

 

一、python創始人介紹

python的創始人爲吉多·範羅蘇姆(Guido van Rossum),從2005年開始就任於Google公司。php

Python是線上和線下的一種重要的編程語言。Python社區的人賦予他「仁慈大君」 的稱號,這一稱號直接來自英國肥皂劇《Monty Python飛行馬戲團》。Guido當初之因此選中Python做爲程序的名字,是由於他太喜歡這部肥皂劇了。html

Guido原居荷蘭,1995移居到美國,並遇到了他如今的妻子。在2003年初,Guido和他的家人,包括他2001年出生的兒子Orlijn一直居住在華盛頓洲北弗吉尼亞的郊區。隨後他們搬遷到硅谷,如今Guido在爲Google工做(其中有一半時間是花在Python上)。前端

Guido在1982年得到阿姆斯特丹大學的數學和計算機科學的碩士學位,並於同年加入一個多媒體組織CWI,作調研員。1989年,他創立了Python語言。java

 

二、python介紹

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

由上圖可見,Python總體呈上升趨勢,反映出Python應用愈來愈普遍而且也逐漸獲得業內的承認!!!linux

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

目前Python主要應用領域:程序員

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack
  • WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
  • 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系統運維: 運維人員必備語言
  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
  • 圖形GUI: PyQT, WxPython,TkInter

Python在一些公司的應用: web

 

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

三、設計哲學與定位

Python的設計哲學是「優雅」、「明確」、「簡單」。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確沒有或者不多有歧義的語法。這些準則被稱爲「 Python格言」。在Python解釋器內運行import this能夠得到完整的列表算法

 1.優美勝於醜陋(Python 以編寫優美的代碼爲目標)

2.明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格類似)

3.簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)

4.複雜勝於凌亂(若是複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔,多加註釋!)

5.扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)

6.間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題,一行代碼不能超過80個字符,你能夠換行或起一個新的邏輯來寫)

7.可讀性很重要(優美的代碼是可讀的)

8.即使假借特例的實用性之名,也不可違背這些規則(這些規則至高無上),覺對不容許特列必須按照這個規則

9.不要包容全部錯誤,除非你肯定須要這樣作(精準地捕獲異常,不寫 except:pass 風格的代碼)

10.當存在多種可能,不要嘗試去猜想!

11.而是儘可能找一種,最好是惟一一種明顯的解決方案(若是不肯定,就用窮舉法)

12.雖然這並不容易,由於你不是 Python 之父(這裏的 Dutch 是指 Guido )

13.作也許好過不作,但不假思索就動手還不如不作(動手以前要細思量)

14.若是你沒法向人描述你的方案,那確定不是一個好方案;反之亦然(方案測評標準)

15.命名空間是一種絕妙的理念,咱們應當多加利用(倡導與號召)

 

四、Python發展史 

  • 1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
  • 1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。
  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增長了 lambdamapfilter and reduce.
  • Python 2.0 - October 16, 2000,加入了內存回收機制,構成了如今Python語言框架的基礎
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010
  • In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
  • Python 3.0 - December 3, 2008
  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015

五、Python的優缺點

先看優勢

  1. Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
  2. 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
  3. 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
  4. 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
  5. 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
  6. 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

再看缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.1s,用Python是0.01s,這樣C語言直接比Python快了10s,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
  2. 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。

 

固然,Python還有一些其它的小缺點,在這就不一一列舉了,我想說的是,任何一門語言都不是完美的,都有擅長和不擅長作的事情,建議各位不要拿一個語言的劣勢去跟另外一個語言的優點來去比較,語言只是一個工具,是實現程序設計師思想的工具,就像咱們以前中學學幾什麼時候,有的時候須要要圓規,有的時候須要用三角尺同樣,拿相應的工具去作它最擅長的事纔是正確的選擇。以前不少人問我Shell和Python到底哪一個好?我回答說Shell是個腳本語言,但Python不僅是個腳本語言,能作的事情更多,而後又有鑽牛角尖的人說徹底不必學Python, Python能作的事情Shell均可以作,只要你足夠牛B,而後又舉了用Shell能夠寫俄羅斯方塊這樣的遊戲,對此我能說表達只能是,不要跟SB理論,SB會把你拉到跟他同樣的高度,而後用充分的經驗把你打倒

 

Python和其餘語言的比較

Python 和 php

python是綜合性的語言,他不光能夠作web開發。他倆的對比應該僅限於web開發方向。不見其phpweb開發別python好,php是先入爲主,python的web框架在2000纔有的比較晚了

django起來的比較晚,他們的web開發都是很不錯了。你用php作的python均可以作。python給你的是一個完整的解決,前端和後端均可以用python。

 

Python 和 c

C語言: 代碼編譯獲得 機器碼 ,機器碼在處理器上直接執行,每一條指令控制CPU工做

其餘語言: 代碼編譯獲得 字節碼 ,虛擬機執行字節碼並轉換成機器碼再後在處理器上執行

Python 和 C  Python這門語言是由C開發而來

  對於使用:Python的類庫齊全而且使用簡潔,若是要實現一樣的功能,Python 10行代碼能夠解決,C可能就須要100行甚至更多.
  對於速度:Python的運行速度相較與C,相同的程序Python比C慢幾百倍很正常

程序的快慢很大程度上程序員邏輯、SQL、算法,比起O(n)和O(n^2)的區別, 語言間的差別就顯得微乎其微

 

Python 和 Java、C#等

  對於使用:Linux原裝Python,其餘語言沒有;以上幾門語言都有很是豐富的類庫支持
  對於速度:Python在速度上可能稍顯遜色

因此,Python和其餘語言沒有什麼本質區別,其餘區別在於:擅長某領域、人才豐富、先入爲主。

 

六、Python的種類

  • Cpython
        Python的官方版本,使用C語言實現,使用最爲普遍,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),而後運行在Python虛擬機上。
  • Jyhton
        Python的Java實現,Jython會將Python代碼動態編譯成Java字節碼,而後在JVM上運行。
  • IronPython
        Python的C#實現,IronPython將Python代碼編譯成C#字節碼,而後在CLR上運行。(與Jython相似)
  • PyPy(特殊)
        Python實現的Python,將Python的字節碼字節碼再編譯成機器碼。
  • RubyPython、Brython ...

以上除PyPy以外,其餘的Python的對應關係和執行流程以下:

 

PyPy,在Python的基礎上對Python的字節碼進一步處理,從而提高執行速度!

 

七、Python 2 or 3?

In summary : Python 2.x is legacy, Python 3.x is the present and future of the language

Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of

extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is

under active development and has already seen over five years of stable releases, including version 3.3 in 2012,

3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only

available by default in Python 3.x.

Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.

Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x). 

py2與3的詳細區別

PRINT IS A FUNCTION

The statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old statement (PEP 3105). Examples: 

You can also customize the separator between items, e.g.: 

1
print ( "There are <" 2 * * 32 "> possibilities!" , sep = "")

ALL IS UNICODE NOW

今後再也不爲討厭的字符編碼而煩惱

 

還能夠這樣玩: (A,*REST,B)=RANGE(5)

1
2
3
4
<strong>>>> a, * rest,b  =  range ( 5 )
>>> a,rest,b
( 0 , [ 1 2 3 ],  4 )
< / strong>

  

某些庫更名了

 

Old Name

New Name

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

  

還有誰不支持PYTHON3?

One popular module that don't yet support Python 3 is Twisted (for networking and other applications). Most

actively maintained libraries have people working on 3.x support. For some libraries, it's more of a priority than

others: Twisted, for example, is mostly focused on production servers, where supporting older versions of

Python is important, let alone supporting a new version that includes major changes to the language. (Twisted is

a prime example of a major package where porting to 3.x is far from tri

 

八、安裝Python

windows:

1
2
3
4
5
6
7
1 、下載安裝包
     https: / / www.python.org / downloads /
2 、安裝
     默認安裝路徑:C:\python35
3 、配置環境變量
     【右鍵計算機】 - - 》【屬性】 - - 》【高級系統設置】 - - 》【高級】 - - 》【環境變量】 - - 》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】  - - > 【Python安裝目錄追加到變值值中,用 ; 分割】
     如:原來的值;C:\python35,切記前面有分號

linux:

1
2
3
無需安裝,原裝Python環境
  
ps:若是自帶 2.6 ,請更新至 2.7

更新Python

windows:

1
卸載重裝便可

linux:

Linux的yum依賴自帶Python,爲防止錯誤,此處更新其實就是再安裝一個Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
查看默認Python版本
python  - V
  
1 、安裝gcc,用於編譯Python源碼
     yum install gcc
2 、下載源碼包,https: / / www.python.org / ftp / python /
3 、解壓並進入源碼文件
4 、編譯安裝
     . / configure
     make  all
     make install
5 、查看版本
     / usr / local / bin / python2. 7  - V
6 、修改默認Python版本
     mv  / usr / bin / python  / usr / bin / python2. 6
     ln  - / usr / local / bin / python2. 7  / usr / bin / python
7 、防止yum執行異常,修改yum使用的Python版本
     vi  / usr / bin / yum
     將頭部  #!/usr/bin/python 修改成 #!/usr/bin/python2.6

九、Python 入門儀式 'Hello World'

在linux 下建立一個文件叫hello.py,並輸入

1
print ( "Hello World!" )

而後執行命令:python hello.py ,輸出

1
2
3
localhost:~ jieli$ vim hello.py
localhost:~ jieli$ python hello.py
Hello World!

指定解釋器

上一步中執行 python hello.py 時,明確的指出 hello.py 腳本由 python 解釋器來執行。

若是想要相似於執行shell腳本同樣執行python腳本,例: ./hello.py ,那麼就須要在 hello.py 文件的頭部指定解釋器,以下:

1
2
3
#!/usr/bin/env python
  
print  "hello,world"

如此一來,執行: ./hello.py 便可。

ps:執行前需給予 hello.py 執行權限,chmod 755 hello.py

在交互器中執行 

除了把程序寫在文件裏,還能夠直接調用python自帶的交互器運行代碼, 

1
2
3
4
5
6
localhost:~ jieli$ python
Python  2.7 . 10  (default,  Oct  23  2015 18 : 05 : 06 )
[GCC  4.2 . 1  Compatible Apple LLVM  7.0 . 0  (clang - 700.0 . 59.5 )] on darwin
Type  "help" "copyright" "credits"  or  "license"  for  more information.
>>>  print ( "Hello World!" )
Hello World!

 

十、變量\字符編碼  

Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.

聲明變量

1
2
3
#_*_coding:utf-8_*_
 
name  =  "Alex Li"

上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:"Alex Li" 

變量定義的規則:

    • 變量名只能是 字母、數字或下劃線的任意組合
    • 變量名的第一個字符不能是數字
    • 如下關鍵字不能聲明爲變量名
      ['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']

變量的賦值

1
2
3
4
5
6
7
8
name  =  "Alex Li"
 
name2  =  name
print (name,name2)
 
name  =  "Jack"
 
print ( "What is the value of name2 now?" )

 

字符編碼

python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)

ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256-1,因此,ASCII碼最多隻能表示 255 個符號。

 

關於中文

爲了處理漢字,程序員設計了用於簡體中文的GB2312和用於繁體中文的big5。

GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼範圍高字節從B0-F7,低字節從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。

GB2312 支持的漢字太少。1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分爲漢字區和圖形符號區。漢字區包括21003個字符。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。如今的PC平臺必須支持GB18030,對嵌入式產品暫不做要求。因此手機、MP3通常只支持GB2312。

從ASCII、GB23十二、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中老是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文能夠統一地處理。區分中文編碼的方法是高字節的最高位不爲0。按照程序員的稱呼,GB23十二、GBK到GB18030都屬於雙字節字符集 (DBCS)。

有的中文Windows的缺省內碼仍是GBK,能夠經過GB18030升級包升級到GB18030。不過GB18030相對GBK增長的字符,普通人是很難用到的,一般咱們仍是用GBK指代中文Windows內碼。

 

 

顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode

Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多

UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...

因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:

報錯:ascii碼沒法表示中文

1
2
3
#!/usr/bin/env python
  
print  "你好,世界"

改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:

1
2
3
4
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
print  "你好,世界"

 

1字節=8bit   又叫8位,最先的ASCII碼就是佔一個字節(8位)  8位也就是二進制0000 0000,二進制8位最大表示數字位255,因爲老外並不知道地球的另外一邊有其餘世界的存在,因此他就在0-255之間選擇0-127做爲英文的存放,還預留了一半的空間做爲擴展。但後後來中國人發現預留的這些空間遠遠不夠存放中國博大精深的全部漢字,可是中國人有辦法,中國人在128-255中間取了一部分用於存放漢字的索引,也能夠說只要查找的位置落到了這一部分就表明着要存放漢字,在1980年中國的人們本身又建立了一個表存放中國漢字就產生了GB2312其中共收錄了7445個字符,包括6763個漢字和682個其它符號;可是中國實在是博大精深在1995年又誕生了GBK編碼共收錄21886個符號,它分爲漢字區和圖形符號區,漢字區包括21003個字符。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。如今的PC平臺必須支持GB18030,對嵌入式產品暫不做要求。因此手機、MP3通常只支持GB2312。

  因爲Unicode浪費了存儲空間,不管存放中文仍是英文都要是用16位來存放,平時50G的數據,使用Unicode就要使用100G,這顯然不合適,這樣就有了UTF-8的編碼,這個編碼存放英文將佔用1個字節,存放中文佔用3個字節。

註釋

  當行注視:# 被註釋內容

  多行註釋:""" 被註釋內容 """

 

 

 

 

十一、Python運算符

Python算術運算符:

操做符 描述符 例子
+ 加法 - 對操做符的兩側增長值 a + b = 30
- 減法 - 減去從左側操做數右側操做數 a - b = -10
* 乘法 - 相乘的運算符兩側的值 a * b = 200
/ 除 - 由右側操做數除以左側操做數 b / a = 2
% 模 - 由右側操做數和餘返回除以左側操做數 b % a = 0
** 指數- 執行對操做指數(冪)的計算 a**b = 10 的冪 20
// 地板除 - 操做數的除法,其中結果是將小數點後的位數被除去的商。 9//2 =  4 而 9.0//2.0 = 4.0
1
2
3
4
5
6
7
8
>>> a  =  21 >>> b  =  10
>>> c  =  0
>>> c  =  +  b ;  print  c
31 >>> c  =  - b ;  print  c11>>> c  =  *  b ;  print  c210
>>> c  =  /  b ;  print  c
21
>>> c  =  %  b ;  print  c
1

Python的比較操做符:

 

運算符 描述 示例
== 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 (a == b) 不爲 true.
!= 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 (a != b) 爲 true.
<> 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 (a <> b) 爲 true。這個相似於 != 運算符
> 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 (a > b) 不爲 true.
< 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 (a < b) 爲 true.
>= 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 (a >= b) 不爲 true.
<= 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 (a <= b) 爲 true.

 

1
2
3
4
5
6
7
8
>>> a  =  21 >>> b  =  10
>>> c  =  0
>>> c  =  +  b ;  print  c
31 >>> c  =  - b ;  print  c11>>> c  =  *  b ;  print  c210
>>> c  =  /  b ;  print  c
21
>>> c  =  %  b ;  print  c
1

 Python賦值運算符:

運算符 描述 示例
= 簡單的賦值運算符,賦值從右側操做數左側操做數 c = a + b將指定的值 a + b 到  c
+= 加法AND賦值操做符,它增長了右操做數左操做數和結果賦給左操做數 c += a 至關於 c = c + a
-= 減AND賦值操做符,它減去右邊的操做數從左邊操做數,並將結果賦給左操做數 c -= a 至關於 c = c - a
*= 乘法AND賦值操做符,它乘以右邊的操做數與左操做數,並將結果賦給左操做數 c *= a 至關於 c = c * a
/= 除法AND賦值操做符,它把左操做數與正確的操做數,並將結果賦給左操做數 c /= a 至關於= c / a
%= 模量AND賦值操做符,它須要使用兩個操做數的模量和分配結果左操做數 c %= a is equivalent to c = c % a
**= 指數AND賦值運算符,執行指數(功率)計算操做符和賦值給左操做數 c **= a 至關於 c = c ** a
//= 地板除,並分配一個值,執行地板除對操做和賦值給左操做數 c //= a 至關於 c = c // a
1
2
3
4
5
6
7
8
>>> a  =  21
>>> b  =  10
>>> c  =  0
>>>
>>> c  =  + b
>>> c  + =  a ;  print  c
52
>>> c  + =  is  =  +  a

Python位運算符:

 

二進制換算成10進制網絡學過的東西回憶下:
128 64 32 16 8 4 2 1
二進制是8位的好比說:01001111    換成10進制的就是:1+2+4+8+64  和上面的對比取值
操做符 描述 示例
& 二進制和複製操做了一下,結果,若是它存在於兩個操做數。 (a & b) = 12 即 0000 1100
| 二進制或複製操做了一個比特,若是它存在一個操做數中。 (a | b) = 61 即 0011 1101
^ 二進制異或運算符的副本,若是它被設置在一個操做數而不是兩個比特。 (a ^ b) =  49 即  0011 0001
~ 二進制的補運算符是一元的,並有「翻轉」位的效果。 (~a ) =  -61 即 1100 0011以2的補碼形式因爲帶符號二進制數。
<< 二進位向左移位運算符。左操做數的值左移由右操做數指定的位數。 a << 2 = 240 即 1111 0000
>> 二進位向右移位運算符。左操做數的值是由右操做數指定的位數向右移動。 a >> 2 = 15 即 0000 1111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
二進制「與」計算:( 1 1 = 1   0 和任意都爲 0
=  10
=  49
a&b
 
10         0     0     0     0        1     0     1     0
49         0     0     1     1        0     0     0     1
= 0         0     0     0     0        0     0     0     0
 
 
二進制「或」計算:(遇 1 1
a|b
=  60  # 60 = 0 0 1 1    1 1 0 0
=  13  #13 =  0 0 0 0    1 1 0 1
=                      0  0  1  1     1  1  0  1    =  0 + 0 + 32 + 16 + 8 + 4 + 0 + 1  =  61
                   
 
二進制「異或」運算:(相同爲 0 ,不一樣爲 1
a^b
 
=  60             # 60 = 0011 1100
=  13             # 13 = 0000 1101
                                   0011  0001   =  0 + 0 + 32 + 16 + 0 + 0 + 0 + 1 = 49
 
二進制取反運算:( 0 置換爲 1 1 置換爲 0
~a
  =  60             # 60 = 0011 1100
那麼   - =  1100  0011      128  +  64  + 2  + 1  =         
 
二進位向左、右移位運算符:
a = 2  那麼 往左移 1 位就是 4 以下:
a<< 1  =   4         ;         a>> 1  =  1

Python邏輯運算符:

運算符 描述 示例
and 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 (a and b) 爲 true.
or 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 (a or b) 爲 true.
not 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。

not(a and b) 爲 false.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
例子:
and 運算,都爲真時爲真
>>>  9  8  and  9  10
True
>>>  9  8  and  9  10
False
 
or 運算,有一個爲真的時候便可爲真
>>>  9  8  or  9  10
True
>>>  9  8  or  9  10
False
>>>
 
not 運算,假爲真真爲假
>>>  not  6.2  < =  6
True
>>>  not  6.2  > =  6
False
>>>

 

十二、數據類型初識 

一、數字

2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子,其中-5,4爲實數,j爲虛數,數學中表示覆數是什麼?。

int(整型)

  在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即-2147483648~2147483647
  在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(長整型)
  跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
  注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
float(浮點型)
  浮點數用來處理實數,即帶有小數的數字。相似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
  複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
 
二、布爾值
  真或假
  1 或 0
三、字符串
"hello world"
萬惡的字符串拼接:
  python中的字符串在C語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,萬惡的+號每出現一次就會在內從中從新開闢一塊空間。
字符串格式化輸出
1
2
3
4
name  =  "alex"
print  "i am %s "  %  name
  
#輸出: i am alex

PS: 字符串是 %s;整數 %d;浮點數%f

字符串經常使用功能:
  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片
四、列表
建立列表:
1
2
3
name_list  =  [ 'alex' 'seven' 'eric' ]
name_list =  list ([ 'alex' 'seven' 'eric' ])

基本操做:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 循環
  • 包含
五、元組(不可變列表)
建立元組:
1
2
3
ages  =  ( 11 22 33 44 55 )
ages  =  tuple (( 11 22 33 44 55 ))
 
六、字典(無序)
建立字典:
1
2
3
person  =  { "name" "mr.wu" 'age' 18 }
person  =  dict ({ "name" "mr.wu" 'age' 18 })

經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度

 

1三、輸入

1
2
3
4
5
6
7
8
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
# 將用戶輸入的內容賦值給 name 變量
name  =  raw_input ( "請輸入用戶名:" )
  
# 打印輸入的內容
print  name

輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import  getpass
  
# 將用戶輸入的內容賦值給 name 變量
pwd  =  getpass.getpass( "請輸入密碼:" )
  
# 打印輸入的內容
print  pwd

1四、流程控制和縮進

需求1、用戶登錄驗證

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding: encoding -*-
  
# 提示輸入用戶名和密碼
  
# 驗證用戶名和密碼
#     若是錯誤,則輸出用戶名或密碼錯誤
#     若是成功,則輸出 歡迎,XXX!
 
 
import  getpass
  
  
name  =  raw_input ( '請輸入用戶名:' )
pwd  =  getpass.getpass( '請輸入密碼:' )
  
if  name  = =  "alex"  and  pwd  = =  "cmd" :
     print  "歡迎,alex!"
else :
     print  "用戶名和密碼錯誤"

需求2、根據用戶輸入內容輸出其權限

1
2
3
4
5
6
# 根據用戶輸入內容打印其權限
  
# alex --> 超級管理員
# eric --> 普通管理員
# tony,rain --> 業務主管
# 其餘 --> 普通用戶
1
2
3
4
5
6
7
8
9
10
11
name  =  raw_input ( '請輸入用戶名:' )
  
  
if  name  = =  "alex"
     print  "超級管理員"
elif  name  = =  "eric" :
     print  "普通管理員"
elif  name  = =  "tony"  or  name  = =  "rain" :
     print  "業務主管"
else :
     print  "普通用戶"

1五、while循環

一、基本循環

1
2
3
4
5
6
while  條件:
     
     # 循環體
 
     # 若是條件爲真,那麼循環體則執行
     # 若是條件爲假,那麼循環體不執行

二、break

break用於退出全部循環

1
2
3
4
while  True :
     print  "123"
     break
     print  "456"

三、continue

continue用於退出當前循環,繼續下一次循環

1
2
3
4
while  True :
     print  "123"
     continue
     print  "456"

 

1六、表達式if ... else

場景1、用戶登錄驗證

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 提示輸入用戶名和密碼
  
# 驗證用戶名和密碼
#     若是錯誤,則輸出用戶名或密碼錯誤
#     若是成功,則輸出 歡迎,XXX!
 
 
#!/usr/bin/env python
# -*- coding: encoding -*-
  
import  getpass
  
  
name  =  raw_input ( '請輸入用戶名:' )
pwd  =  getpass.getpass( '請輸入密碼:' )
  
if  name  = =  "alex"  and  pwd  = =  "cmd" :
     print ( "歡迎,alex!" )
else :
     print ( "用戶名和密碼錯誤" )

場景2、猜年齡遊戲

在程序裏設定好你的年齡,而後啓動程序讓用戶猜想,用戶輸入後,根據他的輸入提示用戶輸入的是否正確,若是錯誤,提示是猜大了仍是小了

  

外層變量,能夠被內層代碼使用
內層變量,不該被外層代碼使用

 

1七、表達式for loop

最簡單的循環10次

1
2
3
4
5
6
#_*_coding:utf-8_*_
__author__  =  'Alex Li'
 
 
for  in  range ( 10 ):
     print ( "loop:" , i )

輸出:

1
2
3
4
5
6
7
8
9
10
loop:  0
loop:  1
loop:  2
loop:  3
loop:  4
loop:  5
loop:  6
loop:  7
loop:  8
loop:  9

需求一:仍是上面的程序,可是遇到小於5的循環次數就不走了,直接跳入下一次循環

1
2
3
4
for  in  range ( 10 ):
     if  i< 5 :
         continue  #不往下走了,直接進入下一次loop
     print ( "loop:" , i )

需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出

1
2
3
4
for  in  range ( 10 ):
     if  i> 5 :
         break  #不往下走了,直接跳出整個loop
     print ( "loop:" , i )

 

1八、while loop   

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

海枯石爛代碼

1
2
3
4
5
count  =  0
while  True :
     print ( "海枯石爛..." ,count)
     count  + = 1
    

 

其實除了時間,沒有什麼是永恆的,死loop仍是少寫爲好 

上面的代碼循環100次就退出吧

 

1
2
3
4
5
6
7
8
count  =  0
while  True :
     print ( "你是風兒我是沙,..." ,count)
     count  + = 1
     if  count  = =  100 :
         print ( "纏纏綿綿到天涯.." )
         break
        

 

 

回到上面for 循環的例子,如何實現讓用戶不斷的猜年齡,但只給最多3次機會,再猜不對就退出程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
 
my_age  =  28
 
count  =  0
while  count <  3 :
     user_input  =  int ( input ( "input your guess num:" ))
 
     if  user_input  = =  my_age:
         print ( "Congratulations, you got it !" )
         break
     elif  user_input < my_age:
         print ( "Oops,think bigger!" )
     else :
         print ( "think smaller!" )
     count  + =  1  #每次loop 計數器+1
else :
     print ( "猜這麼屢次都不對,你個笨蛋." )

  

 

1九、萬惡的「+」號

加號的做用是用在拼接一個較長的字符串,見下面例子:

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat hello.py 
#!/usr/bin/env    python
name = input('please input your name:')
age = input('please input your age:')
job = input('please input your job:')
salary = input('please input your salary:')
msg = '''
-------------info of '''+name+'''-----------------
    Name:'''+name+'''
    Age:''' +age+'''
    Job:'''+job+'''
    Salary:'''+salary
print (msg)

sean@sean-Parallels-Virtual-Platform:~/python/s14$ python hello.py 
please input your name:Sean
please input your age:28
please input your job:it
please input your salary:2999

-------------info of Sean-----------------
    Name:Sean
    Age:28
    Job:it
    Salary:2999
複製代碼

 20、字符串拼接

字符串憑藉有不少種方法,我目前只知道有4種上面所說的萬惡的加號是第一種也是最難用的一種,下面來介紹其他的三種

使用百分號「%」

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python hello.py 
please input your name:XinZhiYu
please input your age:28
please input your job:It
please input your salary:90000

------------info of XinZhiYu-----------
Name: XinZhiYu
Age: 28
Job: It
Salary: 90000

sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat hello.py 
#!/usr/bin/env    python
name = input('please input your name:')
age = input('please input your age:')
job = input('please input your job:')
salary = input('please input your salary:')
msg = '''
------------info of %s-----------
Name: %s
Age: %s
Job: %s
Salary: %s
'''%(name,name,age,job,salary)
print (msg)
複製代碼

使用format函數

  聽說有的時候只能使用這種格式,可是目前我還不知道那種狀況下必須使用這種格式的字符串拼接

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat hello.py 
#!/usr/bin/env    python
name = input('please input your name:')
age = input('please input your age:')
job = input('please input your job:')
salary = input('please input your salary:')
msg = '''
------------info of {_name}-----------
Name: {_name}
Age: {_age}
Job: {_job}
Salary: {_salary}
'''.format(_name=name,_age=age,_job=job,_salary=salary)
print (msg)
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python hello.py 
please input your name:Xinsir
please input your age:28
please input your job:It
please input your salary:29090

------------info of Xinsir-----------
Name: Xinsir
Age: 28
Job: It
Salary: 29090
複製代碼

依然是format函數可是這裏使用{0}{1}。。。,不在使用變量

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat hello.py 
#!/usr/bin/env    python
name = input('please input your name:')
age = input('please input your age:')
job = input('please input your job:')
salary = input('please input your salary:')
msg = '''
------------info of {0}-----------
Name: {0}
Age: {1}
Job: {2}
Salary: {3}
'''.format(name,age,job,salary)
print (msg)
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python hello.py 
please input your name:XiaoXin
please input your age:28
please input your job:IT
please input your salary:28765

------------info of XiaoXin-----------
Name: XiaoXin
Age: 28
Job: IT
Salary: 28765 
複製代碼

 

2一、for循環

  for循環就是在指定的狀況下循環指定次,往下看:

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat for.py  
#!/usr/bin/env    python
for i in range(5):
    print ('loop:',i)
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python for.py 
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
複製代碼

  for循環能夠挨個循環,也能夠跳着循環,上面是每一個循環,若是我想打印1-10之間的全部基數呢?繼續看:

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat for.py 
#!/usr/bin/env    python
for i in range(1,10,2):
    print ('loop:',i)
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python for.py 
loop: 1
loop: 3
loop: 5
loop: 7
loop: 9
複製代碼

2二、for...else...循環

  for...else...循環就是當前面的循環正常執行完,沒有跳出,後面的else將被執行

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat for.py  
#!/usr/bin/env    python
for i in range(5):
    print ('loop:',i)
else:
    print ('OK!')
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python for.py 
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
OK!
複製代碼
複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat for.py  
#!/usr/bin/env    python
for i in range(5):
    if i > 3:
        break
    print ('loop:',i)
else:
    print ('OK!')
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python for.py 
loop: 0
loop: 1
loop: 2
loop: 3
複製代碼

 

2三、while...else...循環

  功能和for...else...循環相差很少

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python while.py 
0
1
2
3
4
5
sean@sean-Parallels-Virtual-Platform:~/python/s14$ vim while.py
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat while.py 
#!/usr/bin/env    python
i = 0
while i < 10:
    if i > 5:
        break
    print (i)
    i += 1 
else:
    print ('ok')
複製代碼

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat while.py 
#!/usr/bin/env    python
i = 0
while i < 10:
    if i > 11:
        break
    print (i)
    i += 1 
else:
    print ('ok')
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python while.py 
0
1
2
3
4
5
6
7
8
9
ok
sean@sean-Parallels-Virtual-Platform:~/python/s14$
複製代碼

 

2四、break 與 continue 區別  

   在循環裏面若是遇到break函數那麼就跳出本次循環,若是遇到continue函數那麼就跳出本次循環

循環嵌套

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat for.py 
#!/usr/bin/env    python
i = 0
while i < 3:
    print ('while:',i)
    i += 1
    for x in range(0,3):
        print ('for:',x)
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python for.py 
while: 0
for: 0
for: 1
for: 2
while: 1
for: 0
for: 1
for: 2
while: 2
for: 0
for: 1
for: 2
複製代碼

跳出多層循環

  break智能跳出一次循環,可是若是循環嵌套循環,想一次性跳出2曾循環,那改怎麼辦呢?往下看:

複製代碼
sean@sean-Parallels-Virtual-Platform:~/python/s14$ cat for.py 
#!/usr/bin/env    python
i = 0
#定義一個跳出指示變量,當break_key等於true的時候,就告訴父循環跳出循環
break_key = 'false'
while i < 3:
    print ('while:',i)
    i += 1
    for x in range(0,3):
                #當內部循環等於2的時候,把外面的跳出指示變量設置爲真
        if x == 2:
            break_key = 'true'
                        #跳出子循環
            break
        print ('for:',x)
    if break_key == 'true':
                #跳出父循環
        break
sean@sean-Parallels-Virtual-Platform:~/python/s14$ python for.py 
while: 0
for: 0
for: 1                
複製代碼

 

2五、Python的工做過程

一、python 把代碼讀到內存  二、詞法語法分析 三、放到編譯器  ---》 生成字節碼   四、執行字節碼 ---》生成機器碼  CPU執行

2六、執行腳本傳入參數

Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:
    Python內部提供的模塊
    業內開源的模塊
    程序員本身開發的模塊
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
    
import  sys
    
print  sys.argv

2七、pyc文件

執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。

ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。(任何字節碼經過反編譯均可以獲得代碼)

2八、做業

做業一:博客

 https://i.cnblogs.com/EditPosts.aspx?postid=5712122

做業二:編寫登錄接口

  • 輸入用戶名密碼
  • 認證成功後顯示歡迎信息
  • 輸錯三次後鎖定
#!/usr/bin/env/python
import sys,os,getpass

#os.system('clear')                             #清屏
i=0
while i < 3:                                   #只要用戶異常登陸不超過3次,能夠不斷循環
    name = input('\33[32m請輸入用戶名:\33[37m')

    lock_file = open('user_lock_info.txt','a+')
    #當用戶輸入用戶名後,打開鎖定文件 檢查此用戶是否已經lock掉了
    lock_list = lock_file.readlines()           #按行的形式打開

    for lock_line in lock_list:                 #循環lock文件
        lock_line =lock_line.strip('\n')               #去掉換行符
        if name == lock_line:                          #若是lock,直接退出
            sys.exit('用戶 %s 已經被鎖定,退出!' % name)
    user_file = open('user_info.txt')        #打開帳號文件
    user_list = user_file.readlines()
    for user_line in user_list:               #對帳號文件進行循環匹配
        (user,password) = user_line.strip('\n').split()     #分別獲取帳號、密碼
        if name == user:                                    #若是用戶名正常匹配
            a = 0
            while a < 3:                            #只要用戶密碼異常輸入不超過3次就不斷循環
                passwd = input('\33[32m請輸入密碼:\33[37m')    #輸入密碼,也能夠作隱藏密碼
                if passwd == password:                          #密碼正確匹配,提示歡迎登陸
                    print('歡迎登錄管理平臺,用戶 %s !' % name)
                    sys.exit(0)                              #正常退出,調用系統退出命令
                else :
                    if a != 2:                       #a=2時,是最後一次機會,不會提示0次機會了
                        print('用戶 %s 密碼錯誤,請從新輸入,還有 %d 次機會' % (name,2 - a))
                a += 1                                   #密碼輸錯後,循環增長1
            else:
                lock_file.write(name + '\n')            #密碼輸錯三次後,將該用戶寫入lock文件
                sys.exit('用戶 %s 達到最大登錄次數將被鎖定退出' % name)
    else:
        if i != 2:                                  #i=2時,是最後一次機會,再也不提示0次機會了
            print ('用戶 %s 不存在,請從新輸入,還有 %d 次機會' % (name,2 -i))
    i += 1                                #當用戶輸錯時,循環增長1
else:
        print('用戶 %s 不存在,退出!' % name)      #用戶輸入3次錯誤後,異常退出
lock_file.close()                               #關閉lock文件
user_file.close()                               #關閉帳號、密碼文件

 流程圖

 

做業三:多級菜單
  • 三級菜單
  • 可依次選擇進入各子菜單
  • 所需新知識點:列表、字典

 http://www.tuicool.com/articles/ZV3YJfM

http://www.jb51.net/article/78358.htm

相關文章
相關標籤/搜索