初始python - 1

變量

  • 變量的概念基本上和初中代數(shù)的方程變量是一致的,只是在計(jì)算機(jī)程序中,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型屑墨。
  • 變量在程序中就是用一個(gè)變量名表示了,變量名必須是大小寫英文券勺、數(shù)字和_的組合绪钥,且不能用數(shù)字開頭。
例如:
x = 100 # 變量x是一個(gè)整數(shù)
name = 'zhangcong' # 變量name是一個(gè)字符串
Answer = True # 變量v是一個(gè)布爾值
_name = 'xxxxx' # 以下劃線開頭也是可以的关炼,但是不建議

常量

  • 常量就是不能變的變量,比如常用的數(shù)學(xué)常數(shù)π就是一個(gè)常量匣吊。在Python中儒拂,通常用全部大寫的變量名表示常量
例如:
PI = 3.14159265359 # 但事實(shí)上PI仍然是一個(gè)變量,Python根本沒有任何機(jī)制保證PI不會(huì)被改變色鸳,所以社痛,用全部大寫的變量名表示常量只是一個(gè)習(xí)慣上的用法命雀,如果你一定要改變變量PI的值蒜哀,也沒人能攔住你。

字符編碼

字符編碼介紹:
  • 計(jì)算機(jī)最早在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte)吏砂,所以一個(gè)字節(jié)能表示的最大整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255)撵儿,如果要表示更大的整數(shù),就必須用更多的字節(jié)狐血。比如兩個(gè)可以表示的最大整數(shù)是65535淀歇,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295。
  • 計(jì)算機(jī)是美國人發(fā)明的匈织,因此最早只有127個(gè)字符編碼到計(jì)算機(jī)里浪默,也就是大小寫字母牡直、數(shù)字和一些符號(hào),這個(gè)編碼被稱為ASCII編碼纳决,比如大寫字母A的編碼是65碰逸,小寫字母z的編碼是122。


  • 如果需要處理中文一個(gè)自己肯定是不夠的阔加,至少需要兩個(gè)字節(jié)饵史,而且還不能夠和ASCII編碼沖突,所以中國制定了GB2312編碼掸哑,用來把中文編進(jìn)去约急。可想而知苗分,全世界有上百種語言厌蔽,各國有各國的標(biāo)準(zhǔn),就會(huì)不可避免地出現(xiàn)沖突摔癣,結(jié)果就是奴饮,在多語言混合的文本中,顯示出來會(huì)有亂碼择浊。
  • 因此戴卜,Unicode就出現(xiàn)了,Unicode把所有語言都統(tǒng)一到一套編碼里琢岩,這樣就不會(huì)再有亂碼問題了投剥。
  • Unicode標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符担孔,就需要4個(gè)字節(jié))〗牵現(xiàn)代操作系統(tǒng)和大多數(shù)編程語言都直接支持Unicode。
  • ASCII編碼和Unicode編碼的區(qū)別:ASCII編碼是1個(gè)字節(jié)糕篇,而Unicode編碼通常是2個(gè)字節(jié)啄育。
  • 新的問題又出現(xiàn)了:如果統(tǒng)一成Unicode編碼,亂碼問題從此消失了拌消。但是挑豌,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲(chǔ)空間墩崩,在存儲(chǔ)和傳輸上就十分不劃算氓英。所以,本著節(jié)約的精神泰鸡,又出現(xiàn)了把Unicode編碼轉(zhuǎn)化為“可變長編碼”的UTF-8編碼债蓝。UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié),常用的英文字母被編碼成1個(gè)字節(jié)盛龄,漢字通常是3個(gè)字節(jié)饰迹,只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)芳誓。如果你要傳輸?shù)奈谋景罅坑⑽淖址肬TF-8編碼就能節(jié)省空間:


字符編碼工作方式:
  • 用記事本編輯的時(shí)候啊鸭,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里锹淌,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:


  • 瀏覽網(wǎng)頁的時(shí)候赠制,服務(wù)器會(huì)把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:


  • 所以你看到很多網(wǎng)頁的源碼上會(huì)有類似<meta charset="UTF-8" />的信息赂摆,表示該網(wǎng)頁正是用的UTF-8編碼。
  • 在最新的Python 3版本中钟些,字符串是以Unicode編碼的烟号,也就是說,Python的字符串支持多語言政恍,例如:


  • 對(duì)于單個(gè)字符的編碼汪拥,Python提供了ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符:


  • 如果知道字符的整數(shù)編碼篙耗,還可以用十六進(jìn)制這么寫str迫筑,兩種寫法完全是等價(jià)的:


  • 由于Python的字符串類型是str,在內(nèi)存中以Unicode表示宗弯,一個(gè)字符對(duì)應(yīng)若干個(gè)字節(jié)脯燃。如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上蒙保,就需要把str變?yōu)橐宰止?jié)為單位的bytes辕棚。
  • Python對(duì)bytes類型的數(shù)據(jù)用帶b前綴的單引號(hào)或雙引號(hào)表示:


  • 要注意區(qū)分'ABC'和b'ABC',前者是str邓厕,后者雖然內(nèi)容顯示得和前者一樣坟募,但bytes的每個(gè)字符都只占用一個(gè)字節(jié)。
  • 以Unicode表示的str通過encode()方法可以編碼為指定的bytes邑狸,例如:


  • 純英文的str可以用ASCII編碼為bytes,內(nèi)容是一樣的涤妒,含有中文的str可以用UTF-8編碼為bytes单雾。含有中文的str無法用ASCII編碼,因?yàn)橹形木幋a的范圍超過了ASCII編碼的范圍她紫,Python會(huì)報(bào)錯(cuò)硅堆。
  • 反過來,如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流贿讹,那么讀到的數(shù)據(jù)就是bytes渐逃。要把bytes變?yōu)閟tr,就需要用decode()方法:


  • 可以用len()函數(shù)來計(jì)算str包含多少個(gè)字符:


  • len()函數(shù)計(jì)算的是str的字符數(shù)民褂,如果換成bytes茄菊,len()函數(shù)就計(jì)算字節(jié)數(shù):


  • 可見疯潭,1個(gè)中文字符經(jīng)過UTF-8編碼后通常會(huì)占用3個(gè)字節(jié),而1個(gè)英文字符只占用1個(gè)字節(jié)面殖。
  • 在操作字符串時(shí)竖哩,我們經(jīng)常遇到str和bytes的互相轉(zhuǎn)換。為了避免亂碼問題脊僚,應(yīng)當(dāng)始終堅(jiān)持使用UTF-8編碼對(duì)str和bytes進(jìn)行轉(zhuǎn)換相叁。
  • 由于Python源代碼也是一個(gè)文本文件,所以辽幌,當(dāng)你的源代碼中包含中文的時(shí)候增淹,在保存源代碼時(shí),就需要?jiǎng)?wù)必指定保存為UTF-8編碼乌企。當(dāng)Python解釋器讀取源代碼時(shí)虑润,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3 # 告訴Linux/OS X系統(tǒng)逛犹,這是一個(gè)Python可執(zhí)行程序端辱,Windows系統(tǒng)會(huì)忽略這個(gè)注釋;
# -*- coding: utf-8 -*-        # 告訴Python解釋器虽画,按照UTF-8編碼讀取源代碼舞蔽,否則,你在源代碼中寫的中文輸出可能會(huì)有亂碼码撰。
  • 在windows中申明了UTF-8編碼并不意味著你的.py文件就是UTF-8編碼的渗柿,必須并且要確保文本編輯器正在使用UTF-8 without BOM編碼:


  • 如果.py文件本身使用UTF-8編碼,并且也申明了# -- coding: utf-8 --脖岛,打開命令提示符測試就可以正常顯示中文朵栖,創(chuàng)建一個(gè)名為hello.py的文件并執(zhí)行:
#!/usr/bin/env python3
coding: utf-8
print('中文測試')

用戶交互input

在程序設(shè)計(jì)的時(shí)候,往往希望通過獲取用戶輸入的一些值柴梆,然后將獲取到的值進(jìn)行一些處理陨溅,例如:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
需求:
要求用戶輸入姓名,年齡绍在,工作门扇,然后輸出用戶的姓名,在哪年出生偿渡,用戶的工作:
'''

year = 2016     # 定義當(dāng)前年份

name = input('請(qǐng)輸入你的姓名:')
age = input('請(qǐng)輸入你的年齡:')
job = input('請(qǐng)輸入你的工作:')

year_of_birth = year - int(age)     # 出生年份
print('''
姓名:%s
出生年份:%s
工作:%s
''' % (name, year_of_birth, job))
#

執(zhí)行結(jié)果:

請(qǐng)輸入你的姓名:張聰
請(qǐng)輸入你的年齡:24
請(qǐng)輸入你的工作:IT

姓名:張聰
出生年份:1992
工作:IT

格式化字符串

  • 在Python中臼寄,采用的格式化方式和C語言是一致的,用%實(shí)現(xiàn)溜宽,舉例如下:


  • %運(yùn)算符就是用來格式化字符串的吉拳。在字符串內(nèi)部:%s表示用字符串替換,%d表示用整數(shù)替換适揉,有幾個(gè)%?占位符留攒,后面就跟幾個(gè)變量或者值煤惩,順序要對(duì)應(yīng)好。如果只有一個(gè)%?稼跳,括號(hào)可以省略盟庞。


  • 其中,格式化整數(shù)和浮點(diǎn)數(shù)還可以指定是否補(bǔ)0和整數(shù)與小數(shù)的位數(shù):


  • 如果你不太確定應(yīng)該用什么汤善,%s永遠(yuǎn)起作用什猖,它會(huì)把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串:


  • 有些時(shí)候,字符串里面的%是一個(gè)普通字符怎么辦红淡?這個(gè)時(shí)候就需要轉(zhuǎn)義不狮,用%%來表示一個(gè)%:


Python的縮進(jìn)規(guī)則

  • Python是強(qiáng)制縮進(jìn)的語言,它通過縮進(jìn)來確定一個(gè)新的邏輯層次的開始和結(jié)束在旱,這也是python語言的最重要的特色之一
  • 同一邏輯層次級(jí)別的代碼縮進(jìn)必須保持一致
  • 頂層邏輯級(jí)別的代碼必須不能有縮進(jìn)(新行的開始不能有空格)
  • 整個(gè)程序的縮進(jìn)風(fēng)格應(yīng)保持一致摇零,一般為4個(gè)空格或2個(gè)空格,官方的推薦是用4個(gè)空格桶蝎,當(dāng)然用tab鍵也可以驻仅,但是在Windows上的tab鍵和Linux上的不一致,會(huì)導(dǎo)致你在Windows上開發(fā)的程序copy到Linux上后運(yùn)行出錯(cuò)登渣,所以還是建議用4個(gè)空格噪服。

注釋

  • 單行注釋
單行注釋以#開頭,例如:
print 'my name is zhangcong' # 這里是注釋胜茧,python解釋器會(huì)直接忽略#后面的
  • 多行注釋
多行注釋用三引號(hào)'''將注釋括起來粘优,例如:
'''
這里是多行注釋
python解釋器會(huì)忽略掉以三個(gè)單引號(hào)或雙引號(hào)開頭,三個(gè)單引號(hào)或雙引號(hào)結(jié)尾的代碼
單引號(hào)和雙引號(hào)成對(duì)出現(xiàn)呻顽,要么是一對(duì)三個(gè)單引雹顺,要么是一對(duì)三個(gè)雙引
'''

模塊初識(shí)

  • Python的強(qiáng)大之處在于他有非常豐富和強(qiáng)大的標(biāo)準(zhǔn)庫和第三方庫,幾乎你想實(shí)現(xiàn)的任何功能都有相應(yīng)的Python庫支持廊遍,以后的課程中會(huì)深入講解常用到的各種庫嬉愧,現(xiàn)在,我們先來象征性的學(xué)2個(gè)簡單的喉前。
sys 模塊
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys

print(sys.argv)

# 輸出
$ python test.py helo world
['test.py', 'helo', 'world']  #把執(zhí)行腳本時(shí)傳遞的參數(shù)獲取到了
getpass 模塊
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:zhangcong
# Mail:zc_92@sina.com

import getpass

username = input("username:")
password = getpass.getpass("password:")
print(username,password)

# 執(zhí)行腳本后英染,輸入密碼的時(shí)候,密碼那塊是不顯示的
os模塊
#!/usr/bin/env python`
# -*- coding: utf-8 -*-`
import os
os.system(``"df -h"``)` `#調(diào)用系統(tǒng)命令`
  • 跟sys模塊結(jié)合一下
import os, sys
os.system(''.join(sys.argv[1:]))#把用戶的輸入的參數(shù)當(dāng)作一條命令交給os.system來執(zhí)行`

條件判斷

  • 在生活中被饿,一件事情面臨著很多選擇,比如吃飯的時(shí)候搪搏,會(huì)考慮吃什么狭握,蓋飯孽江?面條滑频?火鍋?,如果選擇吃蓋飯切心,那吃什么蓋飯,尖椒肉絲殴胧?魚香肉絲荚坞?。今妄。郑口。
  • 可以用python來完成上面描述的事情:
input_value = input("請(qǐng)問想吃點(diǎn)什么,蓋飯盾鳞、面條犬性、火鍋:")
if input_value == '蓋飯':
    print("您選擇的是%s!" % input_value)
elif input_value == '面條':
    print("您選擇的是%s腾仅!" % input_value)
elif input_value == '火鍋':
    print("您選擇的是%s乒裆!" % input_value)
else:
    print("您選的%s本店沒有,謝謝光臨推励!" % input_value)
  • elif是else if的縮寫鹤耍,完全可以有多個(gè)elif,所以if語句的完整形式就是:
if <條件判斷1>:
    <執(zhí)行1>
elif <條件判斷2>:
    <執(zhí)行2>
elif <條件判斷3>:
    <執(zhí)行3>
else:
    <執(zhí)行4>
  • if語句執(zhí)行有個(gè)特點(diǎn)验辞,它是從上往下判斷稿黄,如果在某個(gè)判斷上是True,把該判斷對(duì)應(yīng)的語句執(zhí)行后受神,就忽略掉剩下的elif和else
  • 流程圖:


循環(huán)

python中循環(huán)有兩種抛猖,分別是for循環(huán)和while循環(huán),循環(huán)可以將序列的數(shù)據(jù)進(jìn)行迭代處理:

for循環(huán)

  • for循環(huán)依次把list鼻听、tuple或字符串中的每個(gè)元素迭代出來财著,例如:
names = ["zhangcong", "alex", "pangzhiguo"] for name in names: print name # 執(zhí)行結(jié)果
zhangcong
alex
pangzhiguo
  • 所以for x in … 循環(huán)就是把每個(gè)元素賦值給變量x,然后執(zhí)行縮進(jìn)的語句 撑碴。
  • 例:需要計(jì)算出1-10
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sum = 0 for i in numbers:
    sum += i    # sum += i   ==   sum = sum + i  這里只是簡寫而已
print sum
..........................
# 執(zhí)行結(jié)果
55
  • 這里列表還可以用range來代替撑教,range()函數(shù)可以生成一個(gè)整數(shù)序列,比如range(5)生成的序列是從0開始小于5的整數(shù):
sum = 0
for i in range(1, 11):
    sum += i
    print sum
.............................
# 執(zhí)行結(jié)果
55
官方是這么解釋range的
range(...)
    range(stop) -> list of integers
    range(start, stop[, step]) -> list of integers

    Return a list containing an arithmetic progression of integers. # 返回一個(gè)包含一個(gè)等差數(shù)列的整數(shù)列表醉拓。
    range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
    When step is given, it specifies the increment (or decrement).
    For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
    These are exactly the valid indices for a list of 4 elements.

while循環(huán)

  • 只要滿足條件就不斷循環(huán)伟姐,一般用死循環(huán)的時(shí)候會(huì)用到,比如我們要計(jì)算100以內(nèi)所有奇數(shù)之和亿卤,可以用while循環(huán)實(shí)現(xiàn):
# 在循環(huán)內(nèi)部變量n不斷自減愤兵,直到變?yōu)?1時(shí),不再滿足while條件排吴,循環(huán)退出
sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print sum
  • break:跳出當(dāng)前循環(huán)秆乳,循環(huán)結(jié)束。例如:打印1-100,當(dāng)i > 50的時(shí)候退出循環(huán)
i = 1
while True: if i > 50: breakprint i
    i += 1 輸出結(jié)果: 1
2
3
4
5
6
7
8 ...
... 47
48
49
  • continue:跳出本次循環(huán)屹堰,進(jìn)行下一次循環(huán)肛冶。例如:打印1-10,但是不包含5
for i in range(11): if i == 5:
    continue
    print i # 執(zhí)行結(jié)果
1
2
3
4
6
7
8
9
10
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扯键,一起剝皮案震驚了整個(gè)濱河市睦袖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荣刑,老刑警劉巖馅笙,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘶摊,居然都是意外死亡延蟹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門叶堆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阱飘,“玉大人,你說我怎么就攤上這事虱颗×ば伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵忘渔,是天一觀的道長高帖。 經(jīng)常有香客問我,道長畦粮,這世上最難降的妖魔是什么散址? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮宣赔,結(jié)果婚禮上预麸,老公的妹妹穿的比我還像新娘。我一直安慰自己儒将,他們只是感情好吏祸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钩蚊,像睡著了一般贡翘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砰逻,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天鸣驱,我揣著相機(jī)與錄音,去河邊找鬼蝠咆。 笑死丐巫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播递胧,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赡茸!你這毒婦竟也來了缎脾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤占卧,失蹤者是張志新(化名)和其女友劉穎遗菠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體华蜒,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辙纬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叭喜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贺拣。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捂蕴,靈堂內(nèi)的尸體忽然破棺而出譬涡,到底是詐尸還是另有隱情,我是刑警寧澤啥辨,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布涡匀,位于F島的核電站,受9級(jí)特大地震影響溉知,放射性物質(zhì)發(fā)生泄漏陨瘩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一级乍、第九天 我趴在偏房一處隱蔽的房頂上張望舌劳。 院中可真熱鬧,春花似錦卡者、人聲如沸蒿囤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽材诽。三九已至,卻和暖如春恒傻,著一層夾襖步出監(jiān)牢的瞬間脸侥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工盈厘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睁枕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像外遇,于是被迫代替她去往敵國和親注簿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容