“Python是什么仅财?” 用一句著名的話來解釋:“人生苦短,我用Python碗淌≌登螅”
當(dāng)然這只是一個(gè)段子,認(rèn)真點(diǎn)講亿眠,官方介紹:“Python是一種易于學(xué)習(xí)碎罚,強(qiáng)大的編程語(yǔ)言。 它具有高效的高級(jí)數(shù)據(jù)結(jié)構(gòu)和面向?qū)ο缶幊痰暮?jiǎn)單而有效的方法纳像。 Python的優(yōu)雅語(yǔ)法和動(dòng)態(tài)類型魂莫,以及其解釋性質(zhì),使其成為在大多數(shù)平臺(tái)上的許多領(lǐng)域的腳本和快速應(yīng)用程序開發(fā)的理想語(yǔ)言爹耗“铱迹” 總結(jié)來說你學(xué)會(huì)了Python以后谜喊,你可以開發(fā)部署一個(gè)web站點(diǎn)、可以在移動(dòng)設(shè)備上做動(dòng)態(tài)化倦始、毫不費(fèi)勁的構(gòu)建GUI斗遏。
安裝Python
在開始學(xué)習(xí)之前,我們要確保計(jì)算機(jī)已經(jīng)安裝了Python解釋器鞋邑。本例都采用Python3來進(jìn)行學(xué)習(xí)诵次。在命令窗口使用:
python3 -v
來檢測(cè)是否安裝并且配置了環(huán)境變量,如果你的計(jì)算機(jī)沒有安裝Python枚碗,可以從 https://www.python.org來下載安裝逾一。記得選Python3版本,關(guān)于windows的配置肮雨,讀者可網(wǎng)上自行搜索方法(沒有環(huán)境的遵堵,快去安裝吧,我會(huì)在這里等你)怨规。
等候中...
安裝配置成功后陌宿,會(huì)發(fā)現(xiàn)安裝目錄里有一個(gè)IDLE,這是Python的集成開發(fā)環(huán)境波丰,IDLE包括一個(gè)能夠利用顏色突出語(yǔ)法的編輯器壳坪、一個(gè)調(diào)試工具、Python Shell,以及一個(gè)完整的Python3在線文檔集掰烟。
第一行Python
打開IDLE爽蝴,會(huì)看到>>>的提示符,在提示符后面輸入:
print('Hello Python')
你已經(jīng)猜到了纫骑,我們會(huì)輸入類似hello world的東西惧磺,如果你在IDLE上看到輸出捻撑,說明你的第一行Python代碼成功了磨隘。這里簡(jiǎn)單說明一下:print()是Python的BIF(built-in functions)也就是我們編程常說的內(nèi)置函數(shù)。
Python為我們提供了大概超過70個(gè)BIF顾患,你可以在IDLE里輸入:
dir(__builtins__)
來查看Python有哪些BIF江解,注意:括號(hào)里的下劃線是前后都有兩個(gè)设预,不要敲錯(cuò)了。如果你在IDLE里看到一大堆類似數(shù)組包裹的英文單詞集合犁河,那說明你成功了魄梯。
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
>>>
如果你想了解某個(gè)功能酿秸,繼續(xù)輸入:
help(sum)
隨后就會(huì)返回sum函數(shù)相關(guān)的描述信息魏烫。
>>> help(sum)
Help on built-in function sum in module builtins:
sum(iterable, start=0, /)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
>>>
這里再說明一下IDLE便捷使用方法
1.快捷選擇BIF:輸入pr(print的前兩個(gè)字母)然后按tab哄褒,將會(huì)出現(xiàn)代碼提示,按空上下光標(biāo)選擇退客,格鍵選中要使用的BIF或變量罚舱。
2.快速切換代碼:Mac上使用Ctrl+P可以回退上一行代碼,使用Ctrl+N可以前進(jìn)到下一行代碼粥脚,在Windows上需要使用Alt+P和Alt+N包个。還有一些其他屬性設(shè)置碧囊,有興趣的同學(xué)自行嘗試。
創(chuàng)建Python列表
下面我們來學(xué)習(xí)如何用Python創(chuàng)建和處理列表數(shù)據(jù)糯而。假設(shè)我們現(xiàn)在有一些書籍清單:Java編程思想熄驼,Android開發(fā)詳解,HTML5技術(shù)探索∨祷觯現(xiàn)在我們用Python將他們收集起來:
books = ['Java編程思想','Android開發(fā)詳解','HTML5技術(shù)探索']
然后調(diào)用打蛹缆:
print(books)
不出意外IDLE將會(huì)輸出:
>>> print(books)
['Java編程思想', 'Android開發(fā)詳解', 'HTML5技術(shù)探索']
>>>
如果你學(xué)過其它編程語(yǔ)言,你肯定會(huì)問胃夏,books為什么沒有變量標(biāo)識(shí)符類型构订?沒錯(cuò),Python就是這么簡(jiǎn)易囊榜,無需指定數(shù)據(jù)類型亥宿,只需要給出一個(gè)自定義的名稱標(biāo)識(shí)符烫扼,按照Python格式來書寫,就可以得到一個(gè)數(shù)據(jù)變量/集合悟狱。
查詢Python列表數(shù)據(jù)
我們繼續(xù)學(xué)習(xí)堰氓,現(xiàn)在我們已經(jīng)有了集合双絮,想得到某一個(gè)值怎么做呢?你只需要像這樣:
print(books[0])
輸出:
>>> print(books[0])
Java編程思想
>>>
非常的簡(jiǎn)單软免,Python和大多語(yǔ)言一樣焚挠,集合的索引是從0開始的蝌衔。如果想取最后一個(gè)值如何做?先不要往下看挟鸠,你自己先試試(記得用快捷鍵亩冬,切回上一行代碼):
print(books[2])
沒錯(cuò),如果我們知道數(shù)據(jù)長(zhǎng)度覆享,可以這么書寫撒顿,就能得到正確的值荚板。除此之外還有一種方式也可以做到:
print(books[-1])
這樣Python就會(huì)從最后一位開始查詢數(shù)據(jù):
>>> print(books[-1])
HTML5技術(shù)探索
>>>
這里簡(jiǎn)單說一下異常相關(guān),如果你輸入了不存在的索引拧抖,那么IDLE會(huì)無情的拋出:
>>> print(books[3])
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
print(books[3])
IndexError: list index out of range
>>>
以后如果看到 list index out of range 就知道是索引越界了唧席。
修改Python列表數(shù)據(jù)
剛才我們創(chuàng)建了3本書嘲驾,現(xiàn)在需要多增加一本辽故,如何去做?如果你選擇重新創(chuàng)建一個(gè)列表也是一種辦法蓬衡。不過我們今天不打算這么做彤枢。我們來嘗試用列表自帶的函數(shù)來處理:
books.append('iOS設(shè)計(jì)模式')
記得用快捷鍵:TAB(輸入books.app然后TAB缴啡,選擇append,空格,這是最后一次友情提示)
>>> print(books)
['Java編程思想', 'Android開發(fā)詳解', 'HTML5技術(shù)探索', 'iOS設(shè)計(jì)模式']
>>>
這樣就會(huì)在列表的最后追加一條記錄了秒咐。除了append()我們還可以使用:
books.insert(0,'C++入門')
insert(index,data)在指定位置插入一條記錄碘裕。
>>> print(books)
['C++入門', 'Java編程思想', 'Android開發(fā)詳解', 'HTML5技術(shù)探索', 'iOS設(shè)計(jì)模式']
>>>
這樣就成功的將C++入門
插入到記錄最開始的位置帮孔。
如果列表只是這樣不撑,那就沒什么特點(diǎn)了焕檬,Python的列表不僅僅可以添加相同類型的數(shù)據(jù)類型澳泵,它是支持混合類型的,利用剛才學(xué)習(xí)的函數(shù),我們現(xiàn)在要給每本書增加一個(gè)價(jià)格:
books.insert(1,50.9);
>>> books.insert(1,50.9)
>>> print(books)
['C++入門', 50.9, 'Java編程思想', 'Android開發(fā)詳解', 'HTML5技術(shù)探索', 'iOS設(shè)計(jì)模式']
>>>
Python就是這么神奇腊敲,可以將不同類型的數(shù)據(jù)存放在一起兔仰!后面還有幾本書蕉鸳,我們繼續(xù)添加價(jià)格:
books.insert(3,60.5)
注意潮尝,添加完成之后,要重新計(jì)算后面的位置羹蚣,確保所有的價(jià)格在書籍的后面乱凿,不要添加錯(cuò)了徒蟆。這里有個(gè)小技巧,最后一個(gè)直接使用append()全蝶。
編碼中...
很遺憾寺枉,我剛才添加倒數(shù)第二個(gè)書籍的價(jià)格計(jì)算錯(cuò)誤姥闪,導(dǎo)致數(shù)據(jù)變成了如下:
>>> books.insert(6,78.9)
>>> print(books)
['C++入門', 50.9, 'Java編程思想', 60.5, 'Android開發(fā)詳解', 76.5, 78.9, 'HTML5技術(shù)探索', 'iOS設(shè)計(jì)模式', 88.3]
>>>
恭喜你已經(jīng)看了50%,喝杯java適當(dāng)休息一下吧催式。
刪除Python列表數(shù)據(jù)
不過不用擔(dān)心蓄氧,列表還提供了刪除的方法來幫我們修正這些問題:
books.pop(6)
>>> books.pop(6)
78.9
>>> print(books)
['C++入門', 50.9, 'Java編程思想', 60.5, 'Android開發(fā)詳解', 76.5, 'HTML5技術(shù)探索', 'iOS設(shè)計(jì)模式', 88.3]
>>>
如果成功刪除(彈出)槐脏,IDLE會(huì)自動(dòng)打印被刪掉(彈出)的數(shù)據(jù)顿天,除此之外還有一種更簡(jiǎn)單的方式:
books.remove(78.9)
使用remove(value)來刪除數(shù)據(jù),前提是該數(shù)據(jù)確實(shí)存在咽白,否則就會(huì)得到一個(gè)無情的錯(cuò)誤提示鸟缕。刪掉數(shù)據(jù)之后懂从,我們就可以重新添加記錄了。
還有別的方式來修改錯(cuò)誤的數(shù)據(jù)侵贵,想想看如何做窍育?答案結(jié)尾揭曉(現(xiàn)在別看)宴胧。
循環(huán)Python列表數(shù)據(jù)
前面提到,如果想輸出列表中的數(shù)據(jù)辽旋,使用list[index],這種方式固然簡(jiǎn)單补胚,但是我們想打印所有的數(shù)據(jù)怎么辦追迟?如果有100條敦间,那豈不是要輸出100個(gè)print束铭?顯然Python已經(jīng)幫我們想到了契沫,是時(shí)候開始迭代了昔汉!
Python通過內(nèi)置的for
來完成循環(huán),來個(gè)栗子:
for value in values:
#do something
for...in...:
這種寫法就是Python的for循環(huán)結(jié)構(gòu)会通。每次循環(huán)values就會(huì)將當(dāng)前索引下的值賦給value涕侈,然后我們可以對(duì)value來做操作煤辨,下面來試試:
for book in books:
print(book)
>>> for book in books:
print(book)
C++入門
50.9
Java編程思想
60.5
Android開發(fā)詳解
76.5
HTML5技術(shù)探索
78.9
iOS設(shè)計(jì)模式
88.3
>>>
怎么樣众辨,是不是很cool,除了for...in
形式的循環(huán)技肩,Python還提供了while
循環(huán):
index = 0
while index < len(books):
print(books[index])
index += 1
結(jié)果和上面for是一樣的虚婿,我就不貼出來了泳挥。細(xì)心的你可能已經(jīng)發(fā)現(xiàn)我們使用了一個(gè)新的BIF --- len(obj)屉符。這個(gè)函數(shù)是可以獲取傳入對(duì)象的長(zhǎng)度。
至于用for還是while唆香,具體要看實(shí)際應(yīng)用躬它。我的建議是優(yōu)先使用for东涡,它可以自動(dòng)的從列表起始到結(jié)束,而使用while你需要單獨(dú)控制索引來處理组贺,很可能會(huì)漏掉一條數(shù)據(jù)失尖。當(dāng)然除非你需要while循環(huán)提供額外控制的話雹仿。
Python列表中的列表
前面提到列表是一個(gè)數(shù)據(jù)的集合整以,它不關(guān)心內(nèi)部是數(shù)據(jù)類型,那么我們可以將列表存放在列表內(nèi),現(xiàn)在我們來改造一下books
列表:
books = ['C++入門', 50.9,
'Java編程思想', 60.5,
'Android開發(fā)詳解', 76.5,
'HTML5技術(shù)探索', 78.9,
'iOS設(shè)計(jì)模式', 88.3]
先回憶下之前的列表邑商,之前的列表是書籍和價(jià)格混合在一起人断,不太好看我們來改造一下:
>>> books = [['C++入門', 50.9],
['Java編程思想', 60.5],
['Android開發(fā)詳解', 76.5],
['HTML5技術(shù)探索', 78.9],
['iOS設(shè)計(jì)模式', 88.3]]
現(xiàn)在列表按照[書籍,價(jià)格]的結(jié)構(gòu)來設(shè)計(jì)恶迈,看起來清晰一些谱醇「笨剩看來列表嵌套列表Python也是支持的。這時(shí)候我們?cè)賹?duì)列表數(shù)據(jù)進(jìn)行調(diào)整斥滤,現(xiàn)在我們需要按照出版社來歸類書籍佑颇,即:一個(gè)出版社對(duì)應(yīng)多個(gè)書籍草娜。繼續(xù)改造驱还。
忙碌中...
數(shù)據(jù)改造完成凸克,我們看看效果:
books = [['機(jī)械工業(yè)出版社',['C++入門', 50.9],['Java編程思想', 60.5]],
['人民郵電出版社',['Android開發(fā)詳解', 76.5],['HTML5技術(shù)探索', 78.9]],
['中國(guó)電力出版社' ,['iOS設(shè)計(jì)模式', 88.3]]]
看起來有些復(fù)雜萎战,我們循環(huán)打印下結(jié)果:
>>> for book in books:
print(book)
['機(jī)械工業(yè)出版社', ['C++入門', 50.9], ['Java編程思想', 60.5]]
['人民郵電出版社', ['Android開發(fā)詳解', 76.5], ['HTML5技術(shù)探索', 78.9]]
['中國(guó)電力出版社', ['iOS設(shè)計(jì)模式', 88.3]]
>>>
Python中使用條件判斷
上面的列表好像就少了一層[]而已蚂维,如果想繼續(xù)打印內(nèi)部的怎么辦呢路狮?我們應(yīng)該在循環(huán)的內(nèi)做一個(gè)判斷奄妨,如果是列表就繼續(xù)循環(huán),否則就打印輸出评雌。這時(shí)候該使用if-else
結(jié)構(gòu)了
if ... :
#do if
else:
#do else
來嘗試改下for
的打泳岸:
>>> for book in books:
if isinstance(book,list):
for b in book:
print(b)
else: print(book)
機(jī)械工業(yè)出版社
['C++入門', 50.9]
['Java編程思想', 60.5]
人民郵電出版社
['Android開發(fā)詳解', 76.5]
['HTML5技術(shù)探索', 78.9]
中國(guó)電力出版社
['iOS設(shè)計(jì)模式', 88.3]
>>>
現(xiàn)在看來是清晰了不少斤吐。這里用到一個(gè)BIF --- isinstance(obj,class)函數(shù)厨喂,它的作用是來檢查某個(gè)特定的標(biāo)識(shí)符是否包含某個(gè)特定的類型的數(shù)據(jù)杯聚。
但是書籍和價(jià)格還是一個(gè)列表,現(xiàn)在需要再循環(huán)一次:
>>> for book in books:
if isinstance(book,list):
for b in book:
if isinstance(b,list):
for b1 in b:
print(b1)
else:
print(b)
else:
print(book)
機(jī)械工業(yè)出版社
C++入門
50.9
Java編程思想
60.5
人民郵電出版社
Android開發(fā)詳解
76.5
HTML5技術(shù)探索
78.9
中國(guó)電力出版社
iOS設(shè)計(jì)模式
88.3
>>>
終于把所有的列表都循環(huán)出來了颁褂。但是這個(gè)代碼量無法接受颁独。經(jīng)過分析其實(shí)最里面的if和外層的if條件是一樣的伪冰,如你所想接下來就要請(qǐng)出函數(shù)了。
Python中創(chuàng)建函數(shù)
使用Python創(chuàng)建函數(shù)很簡(jiǎn)單寨辩,使用關(guān)鍵字:
def 函數(shù)名 (參數(shù)):
#do something
我們來將剛才冗長(zhǎng)的for+if用函數(shù)來封裝試試:
>>> def get_book(books):
for book in books:
if isinstance(book,list):
get_book(book)
else:
print(book)
>>>
是不是很簡(jiǎn)答靡狞,我只需要在最開始的for循環(huán)最上面加上函數(shù)的創(chuàng)建規(guī)則隔嫡,然后在if條件中調(diào)用自身腮恩,這樣就可以完成遞歸調(diào)用,我們來調(diào)用函數(shù),將books傳入看結(jié)果如何:
>>> get_book(books)
機(jī)械工業(yè)出版社
C++入門
50.9
Java編程思想
60.5
人民郵電出版社
Android開發(fā)詳解
76.5
HTML5技術(shù)探索
78.9
中國(guó)電力出版社
iOS設(shè)計(jì)模式
88.3
>>>
結(jié)果正和我們預(yù)想的一樣武契。掌握了函數(shù)這個(gè)功能吝羞,我們又能開心、輕松的編程了敦腔。
總結(jié)
我們今天學(xué)習(xí)了:
- 使用Python的
print()
函數(shù)打印信息符衔。 - 不需要指定標(biāo)識(shí)符類型就能創(chuàng)建出變量判族、列表。
- 查詢列表槽惫、修改列表(list.append()辩撑、list.insert())合冀、刪除列表(list.remove())君躺、列表嵌套开缎。
-
for
循環(huán)啥箭、while
循環(huán)治宣。 -
if: else:
條件判斷侮邀。 - 使用
def
創(chuàng)建函數(shù)绊茧。 - 學(xué)習(xí)了幾個(gè)函數(shù):
len()
isinstance()
還有最重要的一點(diǎn),即使上面的都忘記了也沒關(guān)系鹏秋。一定要記住使用:
dir(__builtins__)
然后在搭配:
help(func)
來查閱函數(shù)文檔侣夷。
答案揭曉
? 你要自己思考百拓、嘗試后才可以看這里晰甚。
這里是剛才的那個(gè)列表。
>>> print(books)
['C++入門', 50.9, 'Java編程思想', 60.5, 'Android開發(fā)詳解', 76.5, 78.9, 'HTML5技
術(shù)探索', 'iOS設(shè)計(jì)模式', 88.3]
>>>
我們直接給相應(yīng)的數(shù)據(jù)用索引查到充石,然后賦值即可:
>>> books[6] = 'HTML5技術(shù)探索'
>>> books[7] = 78.9
>>> print(books)
['C++入門', 50.9, 'Java編程思想', 60.5, 'Android開發(fā)詳解', 76.5, 'HTML5技術(shù)探索', 78.9, 'iOS設(shè)計(jì)模式', 88.3]
>>>
相信你已經(jīng)想到答案了
今天的Python之旅就到這里了,如果大家喜歡請(qǐng)點(diǎn)贊、收藏亭引,我會(huì)繼續(xù)更新后面的章節(jié)焙蚓。
恭喜你達(dá)成<Python入門>成就。