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
最新的TIOBE排行榜,Python趕超PHP佔據第五, Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。python
由上圖可見,Python總體呈上升趨勢,反映出Python應用愈來愈普遍而且也逐漸獲得業內的承認!!!linux
Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等c++
目前Python主要應用領域:程序員
Python在一些公司的應用: web
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還有一些其它的小缺點,在這就不一一列舉了,我想說的是,任何一門語言都不是完美的,都有擅長和不擅長作的事情,建議各位不要拿一個語言的劣勢去跟另外一個語言的優點來去比較,語言只是一個工具,是實現程序設計師思想的工具,就像咱們以前中學學幾什麼時候,有的時候須要要圓規,有的時候須要用三角尺同樣,拿相應的工具去作它最擅長的事纔是正確的選擇。以前不少人問我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和其餘語言沒有什麼本質區別,其餘區別在於:擅長某領域、人才豐富、先入爲主。
以上除PyPy以外,其餘的Python的對應關係和執行流程以下:
PyPy,在Python的基礎上對Python的字節碼進一步處理,從而提高執行速度!
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).
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
windows:
12345671
、下載安裝包
https:
/
/
www.python.org
/
downloads
/
2
、安裝
默認安裝路徑:C:\python35
3
、配置環境變量
【右鍵計算機】
-
-
》【屬性】
-
-
》【高級系統設置】
-
-
》【高級】
-
-
》【環境變量】
-
-
》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】
-
-
> 【Python安裝目錄追加到變值值中,用 ; 分割】
如:原來的值;C:\python35,切記前面有分號
linux:
123無需安裝,原裝Python環境
ps:若是自帶
2.6
,請更新至
2.7
更新Python
windows:
1卸載重裝便可
linux:
Linux的yum依賴自帶Python,爲防止錯誤,此處更新其實就是再安裝一個Python
12345678910111213141516171819查看默認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
-
s
/
usr
/
local
/
bin
/
python2.
7
/
usr
/
bin
/
python
7
、防止yum執行異常,修改yum使用的Python版本
vi
/
usr
/
bin
/
yum
將頭部
#!/usr/bin/python 修改成 #!/usr/bin/python2.6
在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"
變量定義的規則:
變量的賦值
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算術運算符:
操做符 | 描述符 | 例子 |
---|---|---|
+ | 加法 - 對操做符的兩側增長值 | 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
=
a
+
b ;
print
c
31
>>> c
=
a
-
b ;
print
c11>>> c
=
a
*
b ;
print
c210
>>> c
=
c
/
b ;
print
c
21
>>> c
=
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
=
a
+
b ;
print
c
31
>>> c
=
a
-
b ;
print
c11>>> c
=
a
*
b ;
print
c210
>>> c
=
c
/
b ;
print
c
21
>>> c
=
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
=
a
+
b
>>> c
+
=
a ;
print
c
52
>>> c
+
=
a
is
c
=
c
+
a
|
Python位運算符:
操做符 | 描述 | 示例 |
---|---|---|
& | 二進制和複製操做了一下,結果,若是它存在於兩個操做數。 | (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
)
a
=
10
b
=
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
a
=
60
# 60 = 0 0 1 1 1 1 0 0
b
=
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
a
=
60
# 60 = 0011 1100
b
=
13
# 13 = 0000 1101
0011
0001
=
0
+
0
+
32
+
16
+
0
+
0
+
0
+
1
=
49
二進制取反運算:(
0
置換爲
1
,
1
置換爲
0
)
~a
a
=
60
# 60 = 0011 1100
那麼
-
a
=
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(整型)
"hello world"
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
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
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
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、用戶登錄驗證
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、猜年齡遊戲
在程序裏設定好你的年齡,而後啓動程序讓用戶猜想,用戶輸入後,根據他的輸入提示用戶輸入的是否正確,若是錯誤,提示是猜大了仍是小了
最簡單的循環10次
1
2
3
4
5
6
|
#_*_coding:utf-8_*_
__author__
=
'Alex Li'
for
i
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
i
in
range
(
10
):
if
i<
5
:
continue
#不往下走了,直接進入下一次loop
print
(
"loop:"
, i )
|
需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出
1
2
3
4
|
for
i
in
range
(
10
):
if
i>
5
:
break
#不往下走了,直接跳出整個loop
print
(
"loop:"
, i )
|
有一種循環叫死循環,一經觸發,就運行個天荒地老、海枯石爛。
海枯石爛代碼
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
(
"猜這麼屢次都不對,你個笨蛋."
)
|
加號的做用是用在拼接一個較長的字符串,見下面例子:
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
字符串憑藉有不少種方法,我目前只知道有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)
聽說有的時候只能使用這種格式,可是目前我還不知道那種狀況下必須使用這種格式的字符串拼接
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
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
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
功能和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$
在循環裏面若是遇到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
一、python 把代碼讀到內存 二、詞法語法分析 三、放到編譯器 ---》 生成字節碼 四、執行字節碼 ---》生成機器碼 CPU執行
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
|
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。(任何字節碼經過反編譯均可以獲得代碼)
做業一:博客
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