Python學習【第二篇】 : Python入門

 

  1. Python安裝
  2. Hello World
  3. 字符編碼
  4. 變量
  5. 用戶輸入
  6. 模塊初識
  7. .pyc是個什麼?
  8. 數據類型
  9. 數據運算
  10. 表達式if ...else語句
  11. 表達式for 循環
  12. break and continue 
  13. 表達式while 循環
  14. 練習

 

1、Python安裝

 

windows:python

 

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

  

linux:linux

自帶python環境

若是自帶python2.6環境更新至python2.7,推薦使用pyenv進行python版本管理

 

更新python

 

windows:git

卸載重裝

 

linux:程序員

源碼方式:github

查看默認Python版本
python -V
 
一、安裝gcc,用於編譯Python源碼
    yum install gcc
二、下載源碼包,https://www.python.org/ftp/python/
三、解壓並進入源碼文件
四、編譯安裝
    ./configure
    make all
    make install
五、查看版本
    /usr/local/bin/python2.7 -V
六、修改默認Python版本
    mv /usr/bin/python /usr/bin/python2.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python
七、防止yum執行異常,修改yum使用的Python版本
    vi /usr/bin/yum
    將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6

 

pyenv方式:算法

一、安裝依賴包
yum install readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs -y

二、安裝pyenv
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l

3.安裝python
pyenv install --list

pyenv install 2.7.9 -v
pyenv rehash

四、修改默認python版本
mv /usr/bin/python /usr/bin/python.2.6
ln -s ~/.pyenv/versions/2.7.9/bin/python /usr/bin/python

五、修改yum使用的python版本
vim /usr/bin/yum
將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6

 

2、Hello World

 

linux下建立hello.py文件並輸入:sql

print("Hello World!")

而後執行python shell

[root@KVM01 ~]# echo 'print ("Hello World")' > hello.py
[root@KVM01 ~]# python hello.py 
Hello World

  

指定解釋器vim

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

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

#!/usr/bin/env python
  
print "Hello World"

執行前須要賦予文件執行權限

chmod +x hello.py

./hello.py

  

 

3、字符編碼

 

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

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

  

  

 

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

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

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

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

報錯:ascii碼沒法表示中文

 

[root@KVM01 ~]# cat hello.py
#!/usr/bin/env python
print ("你好,世界")
[root@KVM01 ~]# ./hello.py 
File "./hello.py", line 3
SyntaxError: Non-ASCII character '\xe4' in file ./hello.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

 

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

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "你好,世界"

  

 

print會依次打印每一個字符串,遇到逗號「,」會輸出一個空格,所以,輸出的字符串是這樣拼起來的:

print-howto

 

print也能夠打印整數,或者計算結果:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print 100+1

[root@KVM01 ~]# ./hello.py 
101

  

 

 

註釋 

 

  當前行註釋  # 被註釋內容

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

 

 4、變量

 

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.

 

聲明變量

#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = "chuan z"

  

變量定義的規則:

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

 

變量的賦值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = "chuan z"
name2 = "zzc"
print name1,name2

 

 

5、用戶輸入

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
name = raw_input('please enter your name:')
print 'hello,',name

  

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

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

  

 

6、模塊初識

 

Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有三種:

  • Python內部提供的模塊
  • 業內開源的模塊
  • 程序員本身開發的模塊

Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import sys
 
print sys.argv

[root@KVM01 ~]# ./hello.py zzc
['./hello.py', 'zzc']     #把執行腳本時傳入的參數獲取到了

  

os模塊,在python程序裏調用系統命令

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import os
 
os.system("df -h") 

 

示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os,sys
 
os.system(''.join(sys.argv[1:])) #把用戶的輸入的參數看成一條命令交給os.system來執行

 

Python Tab補全模塊

 

import sys
import readline
import rlcompleter

if sys.platform == 'darwin' and sys.version_info[0] == 2:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")  # linux and python3 on mac
For Mac

 

#!/usr/bin/env python 
# python startup file 

import sys
import readline
import rlcompleter
import atexit
import os
# tab completion 
readline.parse_and_bind('tab: complete')
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
    readline.read_history_file(histfile)
except IOError:
    pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter
For Linux

 

 上面本身寫的tab.py模塊只能在當前目錄下導入,若是想在系統的何何一個地方都使用怎麼辦呢? 此時你就要把這個tab.py放到python全局環境變量目錄裏,基本通常都放在一個叫 Python/2.7/site-packages  目錄下,這個目錄在不一樣的OS裏放的位置不同,用 print(sys.path)  能夠查看python環境變量列表。

 

 

7、.pyc文件是什麼

 

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

ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。

 

8、數據類型

一、數字

1 是一個整數的例子。
長整數 不過是大一些的整數。
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語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,萬惡的+號每出現一次就會在內從中從新開闢一塊空間。

字符串格式化

 
name = "tom"
print "i am %s " % name
 
#輸出: i am tom

name = "i am %s,age %d" %("zz",20)

name = "i am %s,age %d"
name %("zz",20)

name = "i am {0},age {1}"
name.format("zz",20)

 

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

 

字符串經常使用功能:

  • 移除空白

  • 分割

  • 長度

  • 索引

  • 切片

 

四、列表
 

建立列表:

name_list = ['faker', 'insec', 'pdd']
或
name_list = list(['faker', 'insec', 'pdd']) 

 

基本操做:
  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 循環
  • 包含

 

五、元祖(不可變列表)

 

建立元祖:

ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))

 

基本操做:

  • 索引

  • 切片

  • 循環

  • 長度

  • 包含

 

六、字典(無序)

 

建立字典:

person = {"name": "insec", 'age': 18}
或
person = dict({"name": "insec", 'age': 18})

經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度
PS:循環,range,continue 和 break

 

9、數據運算

算數運算

如下假設變量a爲10,變量b爲20:

運算符 描述 實例
+ 加 - 兩個對象相加 a + b 輸出結果 30
- 減 - 獲得負數或是一個數減去另外一個數 a - b 輸出結果 -10
* 乘 - 兩個數相乘或是返回一個被重複若干次的字符串 a * b 輸出結果 200
/ 除 - x除以y b / a 輸出結果 2
% 取模 - 返回除法的餘數 b % a 輸出結果 0
** 冪 - 返回x的y次冪 a**b 爲10的20次方, 輸出結果 100000000000000000000
// 取整除 - 返回商的整數部分 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0

 

比較運算

如下假設變量a爲10,變量b爲20

算符 描述 實例
== 等於 - 比較對象是否相等 (a == b) 返回 False。
!= 不等於 - 比較兩個對象是否不相等 (a != b) 返回 true.
<> 不等於 - 比較兩個對象是否不相等 (a <> b) 返回 true。這個運算符相似 != 。
> 大於 - 返回x是否大於y (a > b) 返回 False。
< 小於 - 返回x是否小於y。全部比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫。 (a < b) 返回 true。
>= 大於等於 - 返回x是否大於等於y。 (a >= b) 返回 False。
<= 小於等於 - 返回x是否小於等於y。 (a <= b) 返回 true。

 

賦值運算

如下假設變量a爲10,變量b爲20:

運算符 描述 實例
= 簡單的賦值運算符 c = a + b 將 a + b 的運算結果賦值爲 c
+= 加法賦值運算符 c += a 等效於 c = c + a
-= 減法賦值運算符 c -= a 等效於 c = c - a
*= 乘法賦值運算符 c *= a 等效於 c = c * a
/= 除法賦值運算符 c /= a 等效於 c = c / a
%= 取模賦值運算符 c %= a 等效於 c = c % a
**= 冪賦值運算符 c **= a 等效於 c = c ** a
//= 取整除賦值運算符 c //= a 等效於 c = c // a

 

邏輯運算

如下假設變量 a 爲 10, b爲 20:

運算符 邏輯表達式 描述 實例
and x and y 布爾"與" - 若是 x 爲 False,x and y 返回 False,不然它返回 y 的計算值。 (a and b) 返回 20。
or x or y 布爾"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的計算值。 (a or b) 返回 10。
not not x 布爾"非" - 若是 x 爲 True,返回 False 。若是 x 爲 False,它返回 True。 not(a and b) 返回 False

 

成員運算

運算符 描述 實例
in 若是在指定的序列中找到值返回 True,不然返回 False。 x 在 y 序列中 , 若是 x 在 y 序列中返回 True。
not in 若是在指定的序列中沒有找到值返回 True,不然返回 False。 x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。

 

身份運算

運算符 描述 實例
is is是判斷兩個標識符是否是引用自一個對象 x is y, 若是 id(x) 等於 id(y) , is 返回結果 1
is not is not是判斷兩個標識符是否是引用自不一樣對象 x is not y, 若是 id(x) 不等於 id(y). is not 返回結果 1

 

位運算

按位運算符是把數字看做二進制來進行計算的。Python中的按位運算法則以下:

下表中變量 a 爲 60,b 爲 13,二進制格式以下:

a = 0011 1100 
b = 0000 1101

-----------------

a&b = 0000 1100 
a|b = 0011 1101
a^b = 0011 0001 
~a = 1100 0011

  

 

運算符 描述 實例
& 按位與運算符:參與運算的兩個值,若是兩個相應位都爲1,則該位的結果爲1,不然爲0 (a & b) 輸出結果 12 ,二進制解釋: 0000 1100
| 按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1。 (a | b) 輸出結果 61 ,二進制解釋: 0011 1101
^ 按位異或運算符:當兩對應的二進位相異時,結果爲1 (a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001
~ 按位取反運算符:對數據的每一個二進制位取反,即把1變爲0,把0變爲1 (~a ) 輸出結果 -61 ,二進制解釋: 1100 0011, 在一個有符號二進制數的補碼形式。
<< 左移動運算符:運算數的各二進位所有左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。 a << 2 輸出結果 240 ,二進制解釋: 1111 0000
>> 右移動運算符:把">>"左邊的運算數的各二進位所有右移若干位,">>"右邊的數指定移動的位數 a >> 2 輸出結果 15 ,二進制解釋: 0000 1111

 

#!/usr/bin/python
# -*- coding:utf-8 -*-

a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = 0

c = a & b;        # 12 = 0000 1100
print "1 - c 的值爲:", c

c = a | b;        # 61 = 0011 1101 
print "2 - c 的值爲:", c

c = a ^ b;        # 49 = 0011 0001
print "3 - c 的值爲:", c

c = ~a;           # -61 = 1100 0011
print "4 - c 的值爲:", c

c = a << 2;       # 240 = 1111 0000
print "5 - c 的值爲:", c

c = a >> 2;       # 15 = 0000 1111
print "6 - c 的值爲:", c

  

*按位取反運算規則(按位取反再加1)   詳解http://blog.csdn.net/wenxinwukui234/article/details/42119265

 

運算符優先級

從最高到最低優先級的全部運算符:

運算符 描述
** 指數 (最高優先級)
~ + - 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法減法
>> << 右移,左移運算符
& 位 'AND'
^ | 位運算符
<= < > >= 比較運算符
<> == != 等於運算符
= %= /= //= -= += *= **= 賦值運算符
is is not 身份運算符
in not in 成員運算符
not or and 邏輯運算符

如下實例演示了Python全部運算符優先級的操做:

#!/usr/bin/python
# -*- coding:utf-8 -*-

a = 20
b = 10
c = 15
d = 5
e = 0

e = (a + b) * c / d       #( 30 * 15 ) / 5
print "(a + b) * c / d 運算結果爲:",  e

e = ((a + b) * c) / d     # (30 * 15 ) / 5
print "((a + b) * c) / d 運算結果爲:",  e

e = (a + b) * (c / d);    # (30) * (15/5)
print "(a + b) * (c / d) 運算結果爲:",  e

e = a + (b * c) / d;      #  20 + (150/5)
print "a + (b * c) / d 運算結果爲:",  e

  

 以上實例輸出結果:

(a + b) * c / d 運算結果爲: 90
((a + b) * c) / d 運算結果爲: 90
(a + b) * (c / d) 運算結果爲: 90
a + (b * c) / d 運算結果爲: 50

 

 

 10、表達式if...else語句


場景1、用戶登錄驗證

# 提示輸入用戶名和密碼
  
# 驗證用戶名和密碼
#     若是錯誤,則輸出用戶名或密碼錯誤
#     若是成功,則輸出 歡迎,XXX!
 
 
#!/usr/bin/env python
# -*- coding:encoding -*-
  
import getpass
  
  
name = raw_input('請輸入用戶名:')
pwd = getpass.getpass('請輸入密碼:')
  
if name == "insec" and pwd == "cmd":
    print("歡迎,insec!")
else:
    print("用戶名和密碼錯誤")

  

場景2、猜年齡遊戲

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

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
 
my_age = 27
 
user_input = int(input("input your guess num:"))
 
if user_input == my_age:
    print("Congratulations, you got it !")
elif user_input < my_age:
    print("Oops,think bigger!")
else:
    print("think smaller!")
 
外層變量,能夠被內層代碼使用
內層變量,不該被外層代碼使用

 

 11、表達式for loop

 

循環10次程序

#!/usr/bin/env python
# -*- coding:utf-8 -*-

__author__ = 'illusion'
 
 
for i in range(10):
    print("loop:", i )

 

執行輸出

('loop:', 0)
('loop:', 1)
('loop:', 2)
('loop:', 3)
('loop:', 4)
('loop:', 5)
('loop:', 6)
('loop:', 7)
('loop:', 8)
('loop:', 9)

 

12、break and continue

 

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

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

 

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

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

  

十3、while loop

死循環,應用在須要持續循環監控的場景下

count = 0
while True:
    print("while loop...",count)
    count +=1

 

上面的死循環程序循環到101次就退出

count = 0
while True:
    print("while loop...",count)
    count +=1
    if count == 101:
        print("第101次的loop...")
        break

 

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

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
 
my_age = 27
 
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("今日機會已用完.")

  

十4、練習

 

習題一:編寫登錄接口

  • 輸入用戶名密碼
  • 認證成功後顯示歡迎信息
  • 輸錯三次後鎖定

 

習題二:多級菜單
  • 三級菜單
  • 可依次選擇進入各子菜單
  • 所需新知識點:列表、字典
相關文章
相關標籤/搜索