python編程從入門(mén)到實(shí)踐 #01 基礎(chǔ)知識(shí)

image.png

前言

python是一種效率極高的語(yǔ)言:相比于眾多其他的語(yǔ)言捅儒,使用python編寫(xiě)時(shí)灰蛙,程序包含的代碼行更少圣贸。python語(yǔ)法也也有助于創(chuàng)建整潔的代碼:相比其他語(yǔ)言殴泰,使用python編寫(xiě)的代碼更容易閱讀于宙、調(diào)試和擴(kuò)展浮驳。

第一部分 基礎(chǔ)知識(shí)

第1章 起步

1.1 搭建編程環(huán)境

  • 安裝python3
  • 安裝文本編輯器-Geany

    在終端會(huì)話中,可使用終端命令cd(表示切換目錄捞魁,change directory)在系統(tǒng)中導(dǎo)航至会。命令ls(list)顯示當(dāng)前目錄中所有未隱藏的文件。要列出當(dāng)前目錄中的所有文件谱俭,可使用命令dir(表示目錄奉件,directory)。
    注:編程語(yǔ)言對(duì)語(yǔ)法的要求非常嚴(yán)格昆著,只要你沒(méi)有嚴(yán)格遵守語(yǔ)法县貌,就會(huì)出錯(cuò)。

第2章 變量和簡(jiǎn)單數(shù)據(jù)類(lèi)型

2.1 運(yùn)行hello_world.py時(shí)發(fā)生的情況

語(yǔ)法突出功能.png

運(yùn)行hello_world.py凑懂,拓展名.py告訴編輯器窃这,文件包含的是python程序,編輯器使用python解釋器來(lái)運(yùn)行它征候,python解釋器讀取整個(gè)程序,確定其中每個(gè)單詞的含義祟敛。

2.2 變量

2.2.1 變量的命名和使用

有關(guān)變量的規(guī)則

  • 變量名只能包含字母疤坝、數(shù)字和下劃線。變量名可以字母或下劃線打頭馆铁,但不能以數(shù)字打頭跑揉。message_1 √,1_message ×埠巨。
  • 變量名不能包含空格历谍,但可以使用下劃線來(lái)分割其中的單詞。greeting_message √辣垒,greeting message ×望侈。
  • 不要將python關(guān)鍵字和函數(shù)名用作變量名。
  • 變量名應(yīng)既簡(jiǎn)短又具有描述性勋桶。
  • 慎用小寫(xiě)字母l和大寫(xiě)字母O脱衙,易被看成數(shù)字1和0.
    (最好使用小寫(xiě)的python變量名。)

2.2.2 使用變量時(shí)避免命名錯(cuò)誤

2.3 字符串

在python中例驹,用引號(hào)括起來(lái)的都是字符串捐韩,單引號(hào)或雙引號(hào)。
“This is a string.”
'This is a string.'
(靈活地在字符串中包含引號(hào)和撇號(hào)鹃锈。)

2.3.1 使用方法修改字符串的大小寫(xiě)

name.py

name = "ada lovelace"
print(name.title())

Ada Lovelace

方法是python可對(duì)數(shù)據(jù)執(zhí)行的操作荤胁。
name.title(),name后面的句點(diǎn)(.)讓python對(duì)變量name執(zhí)行方法title()指定的操作屎债。
每個(gè)方法后面都跟著一對(duì)括號(hào)仅政,因?yàn)榉椒ㄍǔP枰~外的信息來(lái)完成其工作垢油。這種信息是括號(hào)內(nèi)提供的。函數(shù)title()不需要額外的信息已旧,因此它后面的括號(hào)是空的秸苗。

name = "Ada Lovelace"
print(name.upper())
print(name.lower())

ADA LOVELACE
ada lovelace

  • 方法.title():首字母大寫(xiě)
  • 方法.upper():全部大寫(xiě)
  • 方法.lower():全部小寫(xiě)

2.3.2 合并(拼接)字符串

python使用加號(hào)(+)來(lái)合并字符串,這種合并字符串的方法稱(chēng)為拼接运褪。

first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print(full_name)

ada lovelace

e.g 1

first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print("Hello, " + full_name.title() + "!")

e.g 2

first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
message = "Hello, " + full_name.title() +"!"
print(message)

2.3.3 使用制表符或換行符來(lái)添加空白

空白惊楼,泛指任何非打印字符,如空格秸讹、制表符和換行符
字符組合\t:在字符串中添加制表符

image.png

字符組合\n:在字符串中添加換行符


image.png

字符串\n\t:讓python換到下一行檀咙,并在下一行開(kāi)頭添加制表符


image.png

2.3.4 刪除空白

剝除函數(shù)
python能夠找出字符串開(kāi)頭和末尾多余的空白。
對(duì)變量調(diào)用方法rstrip()璃诀,可暫時(shí)刪除字符串末尾的空白弧可。要永久刪除字符串中的空白,必須將刪除操作的結(jié)果存回變量中劣欢。


image.png

image.png
  • 方法.rstrip():刪除字符串末尾的空白

  • 方法.lstrip():刪除字符串開(kāi)頭的空白

  • 方法.strip():刪除字符串兩端的空白

    favorite_language = "python "
    favorite_language = favorite_language.rstrip()
    print(favorite_language)
    

2.3.5 使用字符串時(shí)避免語(yǔ)法錯(cuò)誤

2.3.6 python2中的print語(yǔ)句

- END - 2019/3/22 20:24-23:32

2.4 數(shù)字

2.4.1 整數(shù)

** 表乘方運(yùn)算

2.4.2 浮點(diǎn)數(shù)

python將帶小數(shù)點(diǎn)的數(shù)字都稱(chēng)為浮點(diǎn)數(shù)棕诵。
注:結(jié)果包含的小數(shù)位數(shù)可能是不確定的

2.4.3 使用函數(shù)str()避免類(lèi)型錯(cuò)誤

函數(shù)str(),python將非字符串值表示為字符串凿将。
birthday.py

age = 23
message = "Happy " + age + "rd Birthday!"
print(message)

類(lèi)型錯(cuò)誤

age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)

2.4.4 python2中的整數(shù)

在python2中校套,整數(shù)除法的結(jié)果只包含整數(shù)部分,小數(shù)部分被刪除牧抵。
注意:計(jì)算整數(shù)結(jié)果時(shí)笛匙,采取的方式不是四舍五入,而是直接將小數(shù)部分直接刪除犀变。
務(wù)必確保至少有一個(gè)操作數(shù)為浮點(diǎn)數(shù)妹孙。3.0/2

2.5 注釋

添加說(shuō)明,對(duì)你解決問(wèn)題的方法進(jìn)行大致的闡述获枝。

2.5.1 如何編寫(xiě)注釋

在python中注釋用(#)標(biāo)識(shí)蠢正,井號(hào)后面的內(nèi)容會(huì)被python解釋器忽略。


image.png

image.png

可正常執(zhí)行.png
# -*- coding:utf-8 -*-

2.5.2該編寫(xiě)什么樣的注釋

編寫(xiě)注釋的主要目的是闡述代碼要做什么省店,以及是如何做到的机隙。

2.6 python之禪

import this

The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

第3章 列表簡(jiǎn)介

3.1 列表是什么

列表由一系列按特定順序排列的元素組成。(有序集合)元素之間可以沒(méi)有任何關(guān)系萨西。
鑒于列表通常包含多個(gè)元素有鹿,通常給列表指定一個(gè)表示復(fù)數(shù)的名稱(chēng)。
在python中谎脯,用方括號(hào)([ ])來(lái)表示列表葱跋,并用逗號(hào)來(lái)分隔其中的元素。

bicycles = ['trek','cannondale','redline','specialized']
print(bicycles)

python將打印列表的內(nèi)部表示,包括方括號(hào):


image.png

- END - 2019/3/23 8:20-9:00

3.1.1 訪問(wèn)列表元素

要訪問(wèn)列表元素娱俺,可指出列表的名稱(chēng)稍味,再指出元素的索引,并將其放在方括號(hào)內(nèi)荠卷。

bicycles = ['trek','cannondale','redline','specialized']
print(bicycles[0].title())

3.1.2 索引從0而不是1開(kāi)始

在python中第一個(gè)列表元素的索引為0模庐,而不是1。因此油宜,要訪問(wèn)列表的任何元素掂碱,都可將其位置減1,并將結(jié)果作為索引慎冤。
最后一個(gè)列表元素疼燥,索引號(hào)為-1.
索引-2返回倒數(shù)第二個(gè)列表元素,索引-3返回倒數(shù)第三個(gè)列表元素蚁堤。

31.3 使用列表中的各個(gè)值

3.2 修改醉者、添加和刪除元素

3.2.1 修改列表元素

修改列表元素的語(yǔ)法與訪問(wèn)列表元素的語(yǔ)法類(lèi)似。要修改列表元素披诗,可指定列表名和要修改的元素和索引撬即,再指定該元素的新值。

motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)

motorcycles[0] = 'ducati'
print(motorcycles)

3.2.2 在列表中添加元素

1.在列表末尾添加元素

使用方法append()將元素附加到列表末尾.

motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)

motorcycles.append('ducati')
print(motorcycles)

創(chuàng)建一個(gè)空列表呈队,再使用一系列的append()語(yǔ)句添加元素剥槐。

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

print(motorcycles)
2.在列表中插入元素

使用方法insert()可在列表的任何位置添加新元素。需要指定新元素的索引和值掂咒。這種操作將列表中既有的每個(gè)元素都右移一個(gè)位置。

motorcycles = ['honda','yamaha','suzuki']

motorcycles.insert(0,'ducati')
print(motorcycles)

3.2.3 在列表中刪除元素

1.使用del語(yǔ)句刪除元素

使用del可刪除任何位置處的列表元素迈喉,條件是知道其索引绍刮。

motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)

del motorcycles[0]
print(motorcycles)
2.使用方法pop()刪除元素

方法pop()可刪除列表末尾的元素,并讓你能夠接著使用它挨摸。術(shù)語(yǔ)彈出(pop)源自這樣的類(lèi)比:列表就像一個(gè)棧孩革,而刪除列表末尾的元素相當(dāng)于彈出棧頂元素。

motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)

popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
3.彈出列表中任何位置處的元素

可以使用pop()來(lái)刪除列表中任何位置的元素得运,只需在括號(hào)中指定要?jiǎng)h除的元素的索引即可膝蜈。

motorcycles = ['honda','yamaha','suzuki']

first_owned = motorcycles.pop(0)
print("The first motorcycle I owned was a " + first_owned.title() + ".")

如果你要從列表中刪除一個(gè)元素,且不再以任何方式使用它熔掺,就使用del語(yǔ)句饱搏;如果你要在刪除元素后還能繼續(xù)使用它,就使用方法pop()置逻。

4.根據(jù)值刪除元素

有時(shí)候推沸,你不知道要從列表中刪除的值所處的位置。如果你只知道要?jiǎng)h除的元素的值,可使用方法remove()鬓催。
使用remove()從列表中刪除元素時(shí)肺素,也可接著使用它的值。

motorcycles = ['honda','yamaha','suzuki','ducati']
print(motorcycles)

too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print("\nA " + too_expensive.title() + " is too expensive for me.")

注:方法remove()只刪除第一個(gè)指定的值宇驾。如果要?jiǎng)h除的值可能在列表中出現(xiàn)多次倍靡,就需要使用循環(huán)來(lái)判斷是否刪除了所有這樣的值。

3.3 組織列表

3.3.1 使用方法sort()對(duì)列表進(jìn)行永久性排序

cars = ['bmw','audi','toyota','subaru']
cars.sort()
print(cars)
image.png

方法sort()永久性的修改了元素的排列順序课舍,無(wú)法恢復(fù)到原來(lái)的排列順序塌西。
還可以按與字母順序相反的順序排列列表元素,只需向sort()方法傳遞參數(shù)reverse=True.

cars = ['bmw','audi','toyota','subaru']
cars.sort(reverse=True)
print(cars)
image.png

3.3.2 使用函數(shù)sorted()對(duì)列表進(jìn)行臨時(shí)排序

要保留列表元素原來(lái)的排列順序布卡,同時(shí)以特定的順序呈現(xiàn)他們雨让,可以使用函數(shù)sorted()。函數(shù)sorted()讓你能夠按照特定順序顯示列表元素忿等,同時(shí)不影響它們?cè)诹斜碇械脑寂帕许樞颉?/p>

cars = ['bmw','audi','toyota','subaru']

print("Here is the original list:")
print(cars)

print("Here is the sorted list:")
print(sorted(cars))

print("\nHere is the original list again:")
print(cars)
image.png

注意:調(diào)用函數(shù)sorted()后栖忠,列表元素的順序并沒(méi)有變。如果要按與字母順序相反的順序顯示列表贸街,也可以向函數(shù)sorted()傳遞參數(shù)reverse=True.

print(sorted(cars,reverse=True))

注意:在并非所有的值都是小寫(xiě)時(shí)庵寞,按字母順序排列列表要復(fù)雜些。決定排列順序時(shí)薛匪,有多種解讀大寫(xiě)字母的方式捐川,要指定準(zhǔn)確的排列順序,可能比我們這里所做的要復(fù)雜逸尖。

3.3.3 倒著打印列表

要反轉(zhuǎn)列表元素的排列順序古沥,可使用方法reverse()。

cars = ['bmw','audi','toyota','subaru']
print(cars)

cars.reverse()
print(cars)
image.png

注意:reverse()不是按與字母順序相反的順序排列列表元素娇跟,而只是反轉(zhuǎn)列表元素的排列順序岩齿。
方法reverse()永久性地修改列表元素的排列順序,但可隨時(shí)回復(fù)到原來(lái)的排列順序苞俘,只需要對(duì)列表再次調(diào)用reverse()盹沈。

3.3.4 確定列表的長(zhǎng)度

使用函數(shù)len()可快速獲悉列表的長(zhǎng)度。
python計(jì)算列表元素?cái)?shù)時(shí)從1開(kāi)始吃谣。


練習(xí).png

3.4 使用列表時(shí)避免索引錯(cuò)誤

第4章 操作列表

4.1 遍歷整個(gè)列表

需要對(duì)列表中的每個(gè)元素都執(zhí)行相同的操作時(shí)乞封,可使用python中的for循環(huán)。

magicians = ['alice','david','carolina']
for magician in magicians:
    pirint(magician)

4.1.1 深入地研究循環(huán)

編寫(xiě)for循環(huán)時(shí)岗憋,對(duì)于用于存儲(chǔ)列表中每個(gè)值的臨時(shí)變量肃晚,可指定任何名稱(chēng)衷旅。然而氯夷,選擇描述單個(gè)列表元素的有意義的名稱(chēng)大有幫助。(命名約定)
使用單數(shù)和復(fù)數(shù)式名稱(chēng)猬腰,可幫助你判斷代碼段處理的是單個(gè)列表元素還是整個(gè)列表。

4.1.2 在for循環(huán)中執(zhí)行更多的操作

magicians = ['alice','david','carolina']
for magician in magicians:
    print( magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")

4.1.3 在for循環(huán)結(jié)束后執(zhí)行一些操作

在for循環(huán)后面悍缠,沒(méi)有縮進(jìn)的代碼都只執(zhí)行一次卦绣,而不會(huì)重復(fù)執(zhí)行。

4.2 避免縮進(jìn)錯(cuò)誤

python根據(jù)縮進(jìn)來(lái)判斷代碼行與前一個(gè)代碼行的關(guān)系飞蚓。

4.2.1 忘記縮進(jìn)

4.2.2 忘記縮進(jìn)額外的代碼行

邏輯錯(cuò)誤

4.2.3 不必要的縮進(jìn)

4.2.4 循環(huán)后不必要的縮進(jìn)

4.2.5 遺漏了冒號(hào)

for語(yǔ)句末尾的冒號(hào)告訴python滤港,下一行是循環(huán)的第一行。

4.3 創(chuàng)建數(shù)字列表

列表非常適合用于存儲(chǔ)數(shù)字集合趴拧,而python提供了很多工具溅漾,可幫助你高效地處理數(shù)字列表。

4.3.1 使用函數(shù)range()

python函數(shù)range()讓你能夠輕松地生成一系列的數(shù)字著榴。

for value in range(1,5):
    print(value)
image.png

差一行為
要打印數(shù)字1~5添履,需要使用range(1,6)
要打印數(shù)字1~4,需要使用range(1,5)

4.3.2 使用range()創(chuàng)建數(shù)字列表

要?jiǎng)?chuàng)建數(shù)字列表脑又,可使用函數(shù)list()將range()的結(jié)果直接轉(zhuǎn)換為列表暮胧。將range()作為list()的參數(shù),輸出將是一個(gè)數(shù)字列表问麸。

numbers = list(range(1,6))
print(numbers)

[1,2,3,4,5]
使用函數(shù)range()時(shí)往衷,還可指定步長(zhǎng)。
e.g打印1~10內(nèi)的偶數(shù)

even_numbers = list(range(2,11,2))
print(even_numbers)

[2,4,6,8,10]
e.g打印1~10的平方數(shù)

squares = []
for value in range(1,11):
    square = value**2
    squares.append(square)
print(squares)

另一種方式

squares = []
for value in range(1,11):
    squares.append(value**2)
print(squares)

4.3.3 對(duì)數(shù)字列表執(zhí)行簡(jiǎn)單的統(tǒng)計(jì)計(jì)算

image.png

專(zhuān)門(mén)用于處理數(shù)字列表的python函數(shù)
min()
max()
sum()

4.3.4 列表解析

列表解析將for循環(huán)和創(chuàng)建新元素的代碼合并成一行严卖,并自動(dòng)附加新元素席舍。

squares = [value**2 for value in range(1,11)]
print(squares)

首先指定一個(gè)描述性的列表名,如squares,指定一個(gè)左方括號(hào)哮笆,并定義一個(gè)表達(dá)式来颤,用于生成你要存儲(chǔ)到列表中的值,本例表達(dá)式為value**2稠肘,然后編寫(xiě)一個(gè)for循環(huán)珊泳,用于給表達(dá)式提供值鲁冯,再加上右方括號(hào)。本例for循環(huán)為for value in range(1,11),將值1~10提供給表達(dá)式.
注意:這里的for語(yǔ)句末尾沒(méi)有冒號(hào)。

4.4 使用列表的一部分

列表的部分元素秧了,python稱(chēng)為切片跨扮。

4.4.1 切片

要?jiǎng)?chuàng)建切片帝嗡,可指定要使用的第一個(gè)元素的索引和最后一個(gè)元素的索引加1.
如,要輸出列表中的前三個(gè)元素璃氢,需要指定索引0~3哟玷,將輸出分別為0、1和2的元素一也。

players = ['charles','martina','michael','florence','eli']
print(players[0:3])
image.png

如果沒(méi)有指定第一個(gè)索引巢寡,python將自動(dòng)從列表開(kāi)頭開(kāi)始,末尾類(lèi)似椰苟。

players = ['charles','martina','michael','florence','eli']
print(players[:4])
print(players[2:])
print(players[-3:])

負(fù)數(shù)索引返回里列表末尾相應(yīng)距離的元素抑月,因此可輸出列表末尾的任何切片。

4.4.2 遍歷切片

要遍歷列表的部分元素舆蝴,可在for循環(huán)中使用切片谦絮。

players = ['charles','martina','michael','florence','eli']
print("Here are the first three players on my team:")
for player in players[:3]:
     print(player.title())

4.4.3 復(fù)制列表

要復(fù)制列表,可創(chuàng)建一個(gè)包含整個(gè)列表的切片须误,方法是同時(shí)省略起始索引和終止索引([:])挨稿。這讓python創(chuàng)建一個(gè)始于第一個(gè)元素,終止于最后一個(gè)元素的切片京痢,即復(fù)制整個(gè)列表奶甘。

my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods[:]

print("My favortie foods are:")
print(my_foods)

print("\nMy friend's foods are:")
print(friend_foods)

兩個(gè)列表

my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods[:]

my_foods.append('cannoli')
friend_foods.append('ice cream')

print("My favorite foods are:")
print(my_foods)

print("\nMy friend's favorite foods are:")
print(friend_foods)

4.5 元組

列表非常適合用于存儲(chǔ)在程序運(yùn)行期間可能變化的數(shù)據(jù)集。列表是可以修改的祭椰。python將不能修改 的值稱(chēng)為不可變的臭家,而不可變的列表被稱(chēng)為元組

4.5.1 定義元組

元組看起來(lái)猶如列表方淤,但使用圓括號(hào)而非方括號(hào)來(lái)標(biāo)識(shí)钉赁。定義元組后就可以使用索引來(lái)訪問(wèn)其元素,就像訪問(wèn)列表元素一樣携茂。

dimensions = (200,50)
print(dimensions[0])
print(dimensions[1])

4.5.2 遍歷元組中的所有值

for循環(huán)

dimensions = (200,50)
for dimension in dimensions:
    print(dimension)

4.5.3 修改元組變量

雖然不能修改元組的元素你踩,但可以給存儲(chǔ)元組的變量賦值。重新定義整個(gè)元組讳苦。

dimensions  = (200,50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions = (400,100)
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)

相比于列表带膜,元組是更簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。

4.6 設(shè)置代碼格式

代碼格式設(shè)置約定

4.6.1 格式設(shè)置約定

4.6.2 縮進(jìn)

建議每級(jí)縮進(jìn)都使用四個(gè)空格鸳谜,使用制表符來(lái)縮進(jìn)

4.6.3 行長(zhǎng)

  • 建議每行不超過(guò)80字符
  • 注釋的行長(zhǎng)都不超過(guò)72字符

4.6.4 空行

要將程序的不同部分分開(kāi)膝藕,可使用空行。

4.6.5 其他格式設(shè)置指南

python改進(jìn)提案 PEP8
- END- 2019/3/23 16:15-21:17

第5章 if語(yǔ)句

5.1 一個(gè)簡(jiǎn)單示例

cars = ['audi','bmw','subaru','toyota']

for car in cars:
    if car == 'bmw':
        print(car.upper())
    else:
        print(car.title())

5.2 條件測(cè)試

每條if語(yǔ)句的核心都是一個(gè)值為T(mén)rue或False的表達(dá)式咐扭,這種表達(dá)式被稱(chēng)為條件測(cè)試芭挽。python根據(jù)條件測(cè)試的值為T(mén)rue還是False來(lái)決定是否執(zhí)行if語(yǔ)句中的代碼滑废。如果條件測(cè)試的值為T(mén)rue,python就執(zhí)行緊跟在if語(yǔ)句后面的代碼袜爪;如果為False蠕趁,python就忽略這些代碼。

5.2.1 檢查是否相等

相等運(yùn)算符==

5.2.2 檢查是否相等時(shí)不考慮大小寫(xiě)

在python中檢查是否相等時(shí)區(qū)分大小寫(xiě)辛馆。例如妻导,兩個(gè)大小寫(xiě)不同的值會(huì)被視為不相等:


image.png

image.png

5.2.3 檢查是否不相等(!=)

requested_topping = 'mushrooms'
if requested_topping != 'anchovies':
    print("Hold the anchovies.")

5.2.4 比較數(shù)字

answer = 17
if anser != 42:
    print("That is not the correct answer.Please try again!")

5.2.5 檢查多個(gè)條件

關(guān)鍵字and和or

1.使用and檢查多個(gè)條件
age_0 = 22
age_1 = 18
(age_0 >= 21) and (age_1 >=21)
2.使用or檢查多個(gè)條件

5.2.6 檢查特定值是否包含在列表中

要判斷特定的值是否已包含在列表中,可使用關(guān)鍵字in怀各。

image.png

5.2.7 檢查特定值是否不包含在列表中

關(guān)鍵字not in

banned_users = ['andrew','carolina','david']
user = 'marie'

if user not in banned_users:
     print(user.title() + ", you can post a response if you wish.")

5.2.8 布爾表達(dá)式

布爾值通常用于記錄條件倔韭。

5.3 if語(yǔ)句

if語(yǔ)句有很多種,選擇使用哪種取決于要測(cè)試的條件數(shù)瓢对。

5.3.1 簡(jiǎn)單的if語(yǔ)句

最簡(jiǎn)單的if語(yǔ)句只有一個(gè)測(cè)試和一個(gè)操作:

if conditional_test:
    do something

示例

age = 19
if age >= 18:
    print("You are old enough to vote!")
    print("Have you registered to vote yet?')

5.3.2 if-else語(yǔ)句

age = 17
if age >= 18:
    print("You are old enough to vote!")
    print("Have you registered to vote yet?")
else:
    print("Sorry, you are too young to vote.")
    print("Please register to vote as soon as you turn 18!")

5.3.3 if-elif-else結(jié)構(gòu)

需要檢查超過(guò)兩個(gè)的情形寿酌。
python只執(zhí)行if-elif-else結(jié)構(gòu)中的一個(gè)代碼塊,它依次檢查每個(gè)條件測(cè)試硕蛹,直到遇到通過(guò)了的條件測(cè)試醇疼。測(cè)試通過(guò)后,python將執(zhí)行緊跟在它后面的代碼法焰,并跳過(guò)余下的測(cè)試秧荆。

age = 12

if age < 4:
    print("Your admission cost is $0.")
elif age < 18:
    print("Your admission cost is $5.")
else:
    print("Your admission cost is $10.")

為讓代碼更簡(jiǎn)潔,可不在if-elif-else代碼塊中打印門(mén)票價(jià)格埃仪,而只在其中設(shè)置門(mén)票價(jià)格乙濒。

age = 12

if age < 4:
   price = 0
elif age < 18:
    price = 5
else:
    price = 10

print("Your admission cost is $" + str(price) + ".")

5.3.4 使用多個(gè)elif代碼塊

age = 12

if age < 4:
   price = 0
elif age < 18:
    price = 5
elif age < 65:
    price = 10
else:
    price = 5

print("Your admission cost is $" + str(price) + ".")

5.3.5 省略else代碼塊

python并不要求if-elif結(jié)構(gòu)厚必須有else代碼塊。

age = 12

if age < 4:
   price = 0
elif age < 18:
    price = 5
elif age < 65:
    price = 10
elif age >= 65:
    price = 5

print("Your admission cost is $" + str(price) + ".")

5.3.6 測(cè)試多個(gè)條件

if-elif-else結(jié)構(gòu)功能強(qiáng)大卵蛉,但僅適合用于只有一個(gè)條件滿足的情況:遇到通過(guò)了的測(cè)試后颁股,python就跳過(guò)余下的測(cè)試。然而傻丝,有時(shí)候必須檢查你關(guān)心的所有條件甘有。在這種情況下,應(yīng)使用一系列不包含elif和else代碼塊的簡(jiǎn)單if語(yǔ)句葡缰。

requested_toppings = ['mushrooms','extra cheese']

if 'mushrooms' in requested_toppings:
    print("Adding mushrooms.")
if 'pepperoni' in requested_toppings:
    print("Adding pepperoni")
if 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")

print("\nFinished making your pizza.")

5.4 使用if語(yǔ)句來(lái)處理列表

5.4.1 檢查特殊元素

requested_toppings = ['mushrooms','green peppers','extra cheese']

for requested_topping in requested_toppings:
    if requested_topping == 'green peppers':
        print("Sorry, we are out of green peppers right now.")
    else:
        print("Adding " + requested_topping + ".")

print("\nFinished making your pizza!")

5.4.2 確保列表不是空的

requested_toppings = []

if requested_toppings:
  for requested_topping in requested_toppings:
      print("Adding " + requested_topping + ".")
  print("\nFinished making your pizza.")
else:
  print("Are you sure you want a plain pizza?")

在if語(yǔ)句中將列表名用在條件表達(dá)式中時(shí)亏掀,python將在列表至少包含1個(gè)元素時(shí)返回True,并在列表為空時(shí)返回False泛释。

5.4.3 使用多個(gè)列表

available_toppings = ['mushrooms','olives','green peppers',
                  'pepperoni','pineapple','extra cheese']
requested_toppings = ['mushrooms','french fries','extra cheese']

for requested_topping in requested_toppings:
    if requested_topping in available_toppings:
        print("Adding " + requested_topping + ".")
    else:
        print("Sorry, we don't have " + requested_topping + ".")

print("\nFinished making your pizza!")

5.5 設(shè)置if語(yǔ)句的格式

如==滤愕、>=和<=等比較運(yùn)算符兩邊各添加一個(gè)空格。

第6章 字典

字典可存儲(chǔ)的信息量幾乎不受限制.
學(xué)習(xí)存儲(chǔ)字典的列表胁澳、存儲(chǔ)列表的字典和存儲(chǔ)字典的字典该互。
理解字典后米者,你就能更準(zhǔn)確的為各種真實(shí)物體建模韭畸。

6.1 一個(gè)簡(jiǎn)單的字典

字典用放在花括號(hào){ }中的一系列鍵-值對(duì)表示宇智。鍵和值之間用冒號(hào)分隔,而鍵-值對(duì)之間用逗號(hào)分隔胰丁。

alien_0 = {'color':'green','points':5}

print(alien_0['color'])
print(alien_0['points'])

6.2 使用字典

字典是一系列鍵-值對(duì)随橘,每個(gè)都與一個(gè)相關(guān)聯(lián),你可以使用鍵來(lái)訪問(wèn)與之相關(guān)聯(lián)的值锦庸。與鍵相關(guān)聯(lián)的值可以是數(shù)字机蔗、字符串、列表乃至字典甘萧。事實(shí)上萝嘁,可將任何python對(duì)象用作字典的值。

6.2.1 訪問(wèn)字典中的值

要獲取與鍵相關(guān)聯(lián)的值扬卷,可依次指定字典名和放在方括號(hào)內(nèi)的鍵牙言。

alien_0 = {'color':'green','points':5}

new_points = alien_0['points']
print("You just earned " + str(new_points) + " points.")

6.2.2 添加鍵-值對(duì)

字典是一種動(dòng)態(tài)結(jié)構(gòu),可隨時(shí)在其中添加鍵-值對(duì)怪得。要添加鍵-值對(duì)咱枉,可依次指定字典名、用方括號(hào)括起的鍵和相關(guān)聯(lián)的值徒恋。

alien_0 = {'color':'green','points':5}
print(alien_0)

alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)

注意:鍵-值對(duì)的排列順序和添加順序不同蚕断。python不關(guān)心鍵值對(duì)的添加順序,而只關(guān)心鍵和值之間的關(guān)聯(lián)順序入挣。

6.2.3 先創(chuàng)建一個(gè)空字典

alien_0 = {}

alien_0['color'] = 'green'
alien_0['points'] = 5

print(alien_0)

6.2.4 修改字典中的值

要修改字典中的值亿乳,可依次指定字典名、用方括號(hào)括起來(lái)的鍵以及與該鍵相關(guān)聯(lián)的新值径筏。

alien_0 = {'color':'green'}
print("The alien is " + alien_0['color'] + ".")

alien_0['color'] = 'yellow'
print("The alien is now " + alien_0['color'] + ".")

另一例子

# -*- coding:utf-8 -*-
alien_0 = {'x_position':0,'y_positon':25,'speed':'medium'}
print("Original x_position: " + str(alien_0['x_position']))

# 向右移動(dòng)外星人
# 據(jù)外星人當(dāng)前速度決定將其移動(dòng)多遠(yuǎn)
if alien_0['speed'] == 'slow':
    x_increment = 1
elif alien_0['speed'] == 'medium':
    x_increment = 2
else:
    # 這個(gè)外星人的速度一定很快
    x_increment = 3

# 新位置等于老位置加上增量
alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x_position: " + str(alien_0['x_position']))

6.2.5 刪除鍵-值對(duì)

對(duì)于字典中不再需要的信息风皿,可使用del語(yǔ)句將相應(yīng)的鍵-值對(duì)徹底刪除。使用del語(yǔ)句時(shí)匠璧,必須指定字典名和要?jiǎng)h除的鍵桐款。

alien_0 = {'color':'green','points':5}
print(alien_0)

del alien_0['points']
print(alien_0)

6.2.6 由類(lèi)似對(duì)象組成的字典

前面的示例中,字典存儲(chǔ)的是一個(gè)對(duì)象(游戲中的一個(gè)外星人)的多種信息夷恍,但你也可以使用字典來(lái)存儲(chǔ)眾多對(duì)象的同一種信息魔眨。

favorite_languages = {
    'jen':'python',
    'sarah':'C',
    'edward':'ruby',
    'phil':'python',
    #在最后一個(gè)鍵值對(duì)后面加上逗號(hào),為以后在下一行添加鍵值對(duì)做好準(zhǔn)備
    }

print("sarah's favorite language is " + 
    favorite_languages['sarah'].title() +
    ".")

6.3 遍歷字典

遍歷字典的方式:可遍歷字典的所有鍵-值對(duì)酿雪、鍵或值遏暴。

6.3.1 遍歷所有的鍵-值對(duì)

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
    }

for key,value in user_0.items():
    print("\nKey: " + key)
    print("Value: " + value)

要編寫(xiě)用于遍歷字典的for循環(huán),可聲明兩個(gè)變量指黎,用于存儲(chǔ)鍵-值對(duì)中的鍵和值朋凉。對(duì)于這兩個(gè)變量,可使用任何名稱(chēng)醋安。
方法items()

for k,v in user_0.items()

注意:即使遍歷字典時(shí)杂彭,鍵-值對(duì)的返回順序也與存儲(chǔ)順序不同墓毒。python不關(guān)心鍵-值對(duì)的存儲(chǔ)順序,而只跟蹤鍵和值之間的關(guān)聯(lián)關(guān)系亲怠。

6.3.2 遍歷字典中的所有鍵

在不需要使用字典中的值時(shí)所计,方法keys()很有用。

for name in favorite_languages.keys():
    print(name.title())

6.3.3 按順序遍歷字典中的所有鍵

要以特定的順序返回元素团秽,一種方法是在for循環(huán)中對(duì)返回的鍵進(jìn)行排序主胧。可使用函數(shù)sorted()來(lái)獲得按特定順序排列的鍵列表的副本习勤。

for name in sorted(favorite_languages.keys()):

6.3.4 遍歷字典中的所有值

使用方法values()踪栋,返回一個(gè)值列表,而不包含任何鍵图毕。

for language in favorite_languages.values():

為剔除重復(fù)項(xiàng)己英,可使用集合(set)。集合類(lèi)似于列表吴旋,但每個(gè)元素都必須是獨(dú)一無(wú)二的损肛。

for language in set(favorite_languages.values()):

6.4 嵌套

將一系列字典存儲(chǔ)在列表中,或?qū)⒘斜碜鳛橹荡鎯?chǔ)在字典中荣瑟,這稱(chēng)為嵌套治拿。
可以在列表中嵌套字典、在字典中嵌套列表笆焰、在字典中嵌套字典

6.4.1 字典列表

alien_0 = {'color':'green','points':5}
alien_1 = {'color':'yellow','points':10}
alien_2 = {'color':'red','points':15}

aliens = [alien_0,alien_1,alien_2]

for alien in aliens:
    print(alien)

使用rang()生成30個(gè)外星人劫谅。

# -*- coding:utf-8 -*-
# 創(chuàng)建一個(gè)用于儲(chǔ)存外星人的空列表
aliens = []

# 創(chuàng)建30個(gè)綠色的外星人
for alien_number in range(30):
    new_alien = {'color':'green','points':5,'speed':'slow'}
    aliens.append(new_alien)

# 顯示前5個(gè)外星人
for alien in aliens[:5]:
    print(alien)
print("...")

# 顯示創(chuàng)建了多少個(gè)外星人
print("Total number of aliens: " + str(len(aliens)))

range()返回一系列數(shù)字,其唯一的用途是告訴python我們要重復(fù)這個(gè)循環(huán)多少次嚷掠。

# 創(chuàng)建一個(gè)用于存儲(chǔ)外星人的空列表
aliens = []

# 創(chuàng)建30個(gè)綠色的外星人
for alien_number in range(0,30):
new_alien = {'color':'green','points':5,'speed':'slow'}
aliens.append(new_alien)

for alien in aliens[0:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['points'] = 10
        alien['speed'] = 'medium'

# 顯示前五個(gè)外星人
for alien in aliens[0:5]:
    print(alien)

print("...")

6.4.2 在字典中存儲(chǔ)列表

每當(dāng)需要在字典中將一個(gè)鍵關(guān)聯(lián)到多個(gè)值時(shí)捏检,都可以在字典中嵌套一個(gè)列表。

# 存儲(chǔ)所點(diǎn)比薩的信息
pizza = {
    'crust':'thick',
    'toppings':['mushrooms','extra cheese'],
    }
# 概述所點(diǎn)的比薩
print("You ordered a " + pizza['crust'] + "-crust pizza " +
    "with the following toppings:")

for topping in pizza['toppings']:
    print("\t" + topping)

示例

favorite_languages = {
    'jen':['python','ruby'],
    'sarah':['c'],
    'edward':['ruby','go'],
    'phil':['python','haskell'],
    }

for name,languages in favortie_languages.items():
    print("\n" + name.title() + "'s favorite languages are:")
    for language in languages:
        print("\t" + language.title())

6.4.3 在字典中存儲(chǔ)字典

users = {
    'aeinstein':{
        'first':'albert',
        'last':'einstein',
        'location':'princeton',
        },
    'mcurie':{
        'first':'marie',
        'last':'curie',
        'location':'paris',
        },
    }

for username,user_info in users.items():
    print("\nUsername: " + username)
    full_name = user_info['first'] + " " + user_info['last']
    location = user_info['location']

print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())

第7章 用戶輸入和while循環(huán)

7.1 函數(shù)input() 的工作原理

message = input("Tell me something, and I will repeat it back to you:")
print(message)

函數(shù)input()接受一個(gè)參數(shù):即要向用戶顯示的提示或說(shuō)明不皆,讓用戶知道該如何做贯城。

7.1.1 編寫(xiě)清晰的程序

使用函數(shù)input()時(shí),應(yīng)指定清晰而易于明白的提示霹娄。
創(chuàng)建多行字符串的方式
有時(shí)候提示可能超過(guò)一行能犯,在這種情況下,可將提示存儲(chǔ)在一個(gè)變量中犬耻,再將該變量傳遞給函數(shù)input()踩晶。

prompt = "If you tell us who you are, we can personalize the   message you see."
prompt += "\nWhat is your first name?"

name = input(prompt)
print("\nHello, " + name + "!") 

7.1.2 使用int()來(lái)獲取數(shù)值的輸入

使用函數(shù)input()時(shí),python將用戶輸入解讀為字符串枕磁。
使用函數(shù)int()渡蜻,python將輸入視為數(shù)值。函數(shù)int()將數(shù)字的字符串表示轉(zhuǎn)換為數(shù)值表示。


image.png

將數(shù)值輸入用于計(jì)算和比較前茸苇,務(wù)必將其轉(zhuǎn)換為數(shù)值表示排苍。

height = input("How tall are you, in inches?")
height = int(height)

if height >= 36:
    print("\nYou're tall enough to ride!")
else:
    print("\nYou'll be able to ride when you're little older.")

7.1.3 求模運(yùn)算符

求模運(yùn)算符(%),將兩個(gè)數(shù)相除并返回余數(shù)税弃。
如果一個(gè)數(shù)可被另一個(gè)數(shù)整除,余數(shù)就為0凑队,因此求模運(yùn)算符將返回0.可利用這一點(diǎn)來(lái)判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù)则果。

number = input("Enter a number, and I'll tell you if it's ever or odd:")
number = int(number)

if number % 2 ==0:
    print("\nThe number " + str(number) + " is even.")
else:
    print("\nThe number " + str(number) + " is odd.")

7.1.4 在python2.7中獲取輸入

用函數(shù)raw_input()來(lái)提示用戶輸入

7.2 while循環(huán)簡(jiǎn)介

for循環(huán)用于針對(duì)集合中的每個(gè)元素的一個(gè)代碼塊。
while循環(huán)不斷地運(yùn)行漩氨,直到指定的條件不滿足為止西壮。

7.2.1 使用while循環(huán)

current_number = 1
while current_number <= 5:
    print(current_number)
    current_number += 1

7.2.2 讓用戶選擇何時(shí)推出

prompt = "\nTell me something, and I will repeat it back to you."
prompt += "\nEnter 'quit' to end the program."
message = ""
while message != 'quit':
    message = input(prompt)
    print(message)

創(chuàng)建一個(gè)變量message用于存儲(chǔ)用戶輸入的值。將變量message的初始值設(shè)置為空字符串“”叫惊,讓python首次執(zhí)行while循環(huán)代碼行時(shí)有可供檢查的東西款青。

7.2.3 使用標(biāo)志

在要求很多條件都滿足才繼續(xù)運(yùn)行的程序中,可定義一個(gè)變量霍狰,用于判斷整個(gè)程序是否處于活動(dòng)狀態(tài)抡草。這個(gè)變量被稱(chēng)為標(biāo)志
可讓程序在標(biāo)志為T(mén)rue時(shí)繼續(xù)運(yùn)行蔗坯,并在任何事件導(dǎo)致標(biāo)志的值為False時(shí)讓程序停止運(yùn)行谣辞。
(while語(yǔ)句中只需檢查一個(gè)條件——標(biāo)志的當(dāng)前值是否為T(mén)rue)
在程序中添加一個(gè)標(biāo)志澎现,標(biāo)志命名可指定任何名稱(chēng)。

prompt = "\nTell me something, and I will repeat it back to you."
prompt += "\nEnter 'quit' to end the program."

active = True
while active:
    message = input(prompt)

    if message == 'quit':
        active = False
    else:
        print(message)

標(biāo)志很有用:在其中的任何一個(gè)事件導(dǎo)致活動(dòng)標(biāo)志變成False時(shí),主游戲循環(huán)將退出擂啥。

7.2.4 使用break退出循環(huán)

要立刻退出while循環(huán),不再運(yùn)行循環(huán)中余下的代碼嘀掸,也不管條件測(cè)試的結(jié)果如何涯竟,可使用break語(yǔ)句。

prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.)"

while True:
    city = input(prompt)

    if city == 'quit':
        break
    else:
        print("I'd love to go to " + city.title() + "!")

注意:在任何python循環(huán)中都可使用break語(yǔ)句卸奉。

7.2.5 在循環(huán)中使用continue

要返回到循環(huán)開(kāi)頭钝诚,并根據(jù)條件測(cè)試結(jié)果決定是否繼續(xù)執(zhí)行循環(huán),可使用continue語(yǔ)句榄棵。

current_number = 0
while current_number <10:
    current_number += 1
    if current_number % 2 == 0:
        continue
    
    print(current_number)

如果結(jié)果為0敲长,就執(zhí)行continue語(yǔ)句,讓python忽略余下的代碼秉继,并返回到循環(huán)開(kāi)頭祈噪。


image.png

7.2.6 避免無(wú)限循環(huán)

如果程序陷入無(wú)限循環(huán),可按ctrl+C尚辑,也可關(guān)閉顯示程序輸出的終端窗口辑鲤。

7.3 使用while循環(huán)來(lái)處理列表和字典

for循環(huán)是一種遍歷列表的有效方式,但在for循環(huán)中不應(yīng)修改列表杠茬,否則將導(dǎo)致python難以跟蹤其中的元素月褥。要在遍歷列表的同時(shí)對(duì)其進(jìn)行修改弛随,可使用while循環(huán)。

7.3.1 在列表之間移動(dòng)元素

# -*- coding:utf-8 -*-
# 首先宁赤,創(chuàng)建一個(gè)待驗(yàn)證用戶列表
# 和一個(gè)用于存儲(chǔ)已驗(yàn)證用戶的列表
unconfirmed_users = ['alice','brian','candace']
confirmed_users = []

# 驗(yàn)證每個(gè)用戶舀透,直到?jīng)]有未驗(yàn)證用戶為止
# 將每個(gè)經(jīng)過(guò)驗(yàn)證的列表都移到已驗(yàn)證用戶列表中
while unconfirmed_users:
    current_user = unconfirmed_users.pop()
    print("Verifying user: " + current_user.title())
    confirmed_users.append(current_user)

# 顯示所有已驗(yàn)證的用戶
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
    print(confirmed_user.title())

7.3.2 刪除包含特定值的所有列表元素

方法remove()

pets = ['dog','cat','goldfish','cat','rabbit','cat']
print(pets)

while 'cat' in pets:
    pets.remove('cat')
print(pets)

7.3.3 使用用戶輸入來(lái)填充字典

# -*- coding:utf-8 -*-
responses = {}

# 設(shè)置一個(gè)標(biāo)志,指出調(diào)查是否繼續(xù)
polling_active = True

while polling_active:
    # 提示輸入被調(diào)查者的名字和答案
    name = input("\nWhat is your name?")
    response = input("Which mountain would you like to climb someday?")

    # 將答卷存儲(chǔ)在字典中
    responses[name] = response

    # 看看是否還有人要參與調(diào)查
    repeat = input("Would you like to let another person respond?(yes/no)")
    if repeat == 'no':
        polling_active = False

# 調(diào)查結(jié)束决左,顯示結(jié)果
print("\n --- Poll Results ---")
for name,response in responses.items():
    print(name + " would you like to climb " + response + ".")

- END - 2019/3/24

第8章 函數(shù)

函數(shù)是帶名字的代碼塊愕够,用于完成具體的工作。要執(zhí)行函數(shù)定義的特定任務(wù)佛猛,可調(diào)用該函數(shù)惑芭。

8.1 定義函數(shù)

# -*- coding:utf-8 -*-
def greet_user():
    """顯示簡(jiǎn)單的問(wèn)候語(yǔ)"""
    print("Hello!")

greet_user()

File "greeter4.py", line 3
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte

# -*- coding:GBK -*-
def greet_user():
    """顯示簡(jiǎn)單的問(wèn)候語(yǔ)"""
    print("Hello!")

greet_user()

竟然可以用了。

使用關(guān)鍵字def來(lái)告訴python你要定義一個(gè)函數(shù)继找。函數(shù)定義遂跟,向python指出了函數(shù)名,還可能在括號(hào)內(nèi)指出函數(shù)為完成其任務(wù)需要什么樣的信息婴渡。定義以冒號(hào)結(jié)尾幻锁。
緊跟在def greet_user():后面的所有縮進(jìn)構(gòu)成了函數(shù)體。"""顯示簡(jiǎn)單的問(wèn)候語(yǔ)"""是文檔字符串的注釋边臼。文檔字符串用三引號(hào)括起越败,python使用它們來(lái)生成有關(guān)程序中函數(shù)的文檔。
函數(shù)調(diào)用讓python執(zhí)行函數(shù)的代碼硼瓣,要調(diào)用函數(shù)究飞,可依次指定函數(shù)名以及用括號(hào)括起的必要信息。

8.1.1 向函數(shù)傳遞信息

# -*- coding:gbk -*-
def greet_user(username):
    """顯示簡(jiǎn)單的問(wèn)候語(yǔ)"""
    print("Hello, " + username.title() + "!")

greet_user('jesse')

在函數(shù)定義def greet_user()的括號(hào)內(nèi)添加username堂鲤,就可讓函數(shù)接受你給username指定的任何值亿傅。
代碼greet_uer('jesse')調(diào)用函數(shù)greet_user(),并向它提供執(zhí)行print語(yǔ)句所需的信息瘟栖。

實(shí)參和形參

在函數(shù)greet_user()的定義中葵擎,變量username是一個(gè)形參——函數(shù)完成其工作所需的一項(xiàng)信息。在代碼greet_user('jesse')中半哟,值'jesse'是一個(gè)實(shí)參酬滤。實(shí)參是調(diào)用函數(shù)時(shí)傳遞給函數(shù)的信息。我們調(diào)用函數(shù)時(shí)寓涨,將要讓函數(shù)使用的信息放在括號(hào)內(nèi)盯串。在greet_user('jesse')中,將實(shí)參'jesse'傳遞給了函數(shù)greet_user()戒良,這個(gè)值被存儲(chǔ)在形參username中体捏。

8.2 傳遞實(shí)參

函數(shù)定義中可能包含多個(gè)形參,因此函數(shù)調(diào)用中也可能包含多個(gè)實(shí)參。向函數(shù)傳遞實(shí)參的方式很多:位置實(shí)參几缭,要求實(shí)參的順序與形參的順序相同河泳;關(guān)鍵字實(shí)參,其中每個(gè)實(shí)參都由變量名和值組成年栓,還可使用列表和字典拆挥。
- END - 2019/3/25 21:40-22:32

8.2.1 位置實(shí)參

調(diào)用函數(shù)時(shí),python必須將函數(shù)調(diào)用中的每個(gè)實(shí)參都關(guān)聯(lián)到函數(shù)定義中的一個(gè)形參某抓。最簡(jiǎn)單的關(guān)聯(lián)方式是基于實(shí)參的順序纸兔,這種關(guān)聯(lián)方式被稱(chēng)為位置實(shí)參

# -*- coding:GBK -*-
def describe_pet(animal_type,pet_name):
    """顯示寵物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet('hamster','harry')
1.調(diào)用函數(shù)多次

在函數(shù)中搪缨,可根據(jù)需要使用任意數(shù)量的位置實(shí)參食拜,python將按順序?qū)⒑瘮?shù)調(diào)用中的實(shí)參關(guān)聯(lián)到函數(shù)定義中相應(yīng)的形參鸵熟。

2.位置實(shí)參的順序很重要

8.2.2 關(guān)鍵字實(shí)參

關(guān)鍵字實(shí)參是傳遞給函數(shù)的名稱(chēng)-值對(duì)副编。直接在實(shí)參中將名稱(chēng)和值關(guān)聯(lián)起來(lái),關(guān)鍵字實(shí)參讓你無(wú)需考慮函數(shù)調(diào)用中的實(shí)參順序流强,還清楚地指出了函數(shù)調(diào)用中各個(gè)值的用途痹届。

describe_pet(pet_name='harry',animal_type='hamster')

關(guān)鍵字實(shí)參的順序無(wú)關(guān)緊要,python知道各個(gè)值該存儲(chǔ)到哪個(gè)形參中打月。
注意:使用關(guān)鍵字實(shí)參時(shí)队腐,務(wù)必準(zhǔn)確地指定函數(shù)定義中的形參名。

8.2.3 默認(rèn)值

編寫(xiě)函數(shù)時(shí)奏篙,可給每個(gè)形參指定默認(rèn)值柴淘。在調(diào)用函數(shù)中,給形參提供了實(shí)參時(shí)秘通,python將使用指定的實(shí)參值为严;否則,將使用形參的默認(rèn)值肺稀。使用默認(rèn)值可簡(jiǎn)化函數(shù)調(diào)用第股。

# -*- coding:GBK -*-
def describe_pet(pet_name,animal_type='dog'):
    """顯示寵物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet('wille')
describe_pet(pet_name='wille')
describe_pet(pet_name='harry',animal_type='hamster')

注意:使用默認(rèn)值時(shí),在形參列表中必須先列出沒(méi)有默認(rèn)值的形參话原,再列出有默認(rèn)值的形參夕吻。這讓python依然能夠正確地解讀位置實(shí)參。

8.2.4 等效的函數(shù)調(diào)用

def describe_pet(pet_name,animal_type='dog'):

示例

# 一條名為willie的小狗
describe_pet('willie')
describe_pet(pet_name='willie')

#一只名為harry的倉(cāng)鼠
describe_pet('harry','hamster')
describe_pet(pet_name='harry',animal_type='hamster')
describe_pet(animal_type='hamster',pet_name='harry')

8.2.5 避免實(shí)參錯(cuò)誤

8.3 返回值

函數(shù)并非總是直接顯示輸出繁仁,相反涉馅,它可以處理一些數(shù)據(jù),并返回一個(gè)或一組值黄虱。函數(shù)返回的值被稱(chēng)為返回值控漠。在函數(shù)中,可使用return語(yǔ)句將值返回到調(diào)用函數(shù)的代碼行。返回值讓你能夠?qū)⒊绦虻拇蟛糠址敝毓ぷ饕频胶瘮?shù)中去完成盐捷,從而簡(jiǎn)化主程序偶翅。

8.3.1 返回簡(jiǎn)單值

# -*- coding:GBK -*-
def get_formatted_name(first_name,last_name):
    """返回整潔的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

musician = get_formatted_name('jimi','hendrix')
print(musician)

調(diào)用返回值的函數(shù)時(shí),需要提供一個(gè)變量(musician)碉渡,用于存儲(chǔ)返回的值聚谁。

8.3.2 讓實(shí)參變成可選的

有時(shí)候,需要讓實(shí)參變成可選的滞诺,這樣使用函數(shù)的人就只需要在必要時(shí)才提供額外的信息形导。可使用默認(rèn)值讓實(shí)參變成可選的习霹。

# -*- coding:GBK -*-
def get_formatted_name(first_name,last_name,middle_name=''):
    """返回整潔的姓名"""
    if middle_name:
        full_name = first_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name= first_name + ' ' + last_name
    return full_name.title()

musician = get_formatted_name('jimi','hendrix')
print(musician)

musician = get_formatted_name('john','hooker','lee')
print(musician)

在函數(shù)體中朵耕,檢查是否提供了中間名,python將非空字符串解讀為T(mén)rue淋叶。

8.3.3 返回字典

函數(shù)可返回任何類(lèi)型的值阎曹,包括列表和字典等較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

# -*- coding:GBK -*-
def build_person(first_name,last_name):
    """返回一個(gè)字典煞檩,其中包含有關(guān)一個(gè)人的信息"""
    person = {'first':first_name,'last':last_name}
    return person

musician = build_person('jimi','hendrix')
print(musician)

例二

# -*- coding:GBK -*-
def build_person(first_name,last_name,age=''):
    """返回一個(gè)字典处嫌,其中包含有關(guān)一個(gè)人的信息"""
    person = {'first':first_name,'last':last_name}
    if age:
        person['age'] = age
    return person

musician = build_person('jimi','hendrix',age=27)
print(musician)

新增可選形參,并將其默認(rèn)值設(shè)置為空字符串

8.3.4 結(jié)合使用函數(shù)和while循環(huán)

- END - 2019/3/26 18:55-21:08

# -*- coding:GBK -*-
def get_formatted_name(first_name,last_name):
    """返回整潔的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

# 這是一個(gè)無(wú)限循環(huán)!
while True:
    print("\nPlease tell me your name:")
    f_name = input("First name:")
    l_name = input("Last name:")

    formatted_name = get_formatted_name(f_name,l_name)
    print("\nHello, " + formatted_name + "!")

定義退出條件

 # -*- coding:GBK -*-
def get_formatted_name(first_name,last_name):
    """返回整潔的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

# 這是一個(gè)無(wú)限循環(huán)!
while True:
    print("\nPlease tell me your name:")
    print("(enter 'q' at any time to quit)")

    f_name = input("First name:")
    if f_name == 'q':
        break
    
    l_name = input("Last name:")
    if l_name == 'q':
        break
    
    formatted_name = get_formatted_name(f_name,l_name)
    print("\nHello, " + formatted_name + "!")

8.4 傳遞列表

# -*- coding:gbk -*-
def greet_users(names):
    """向列表中的每位用戶都發(fā)出簡(jiǎn)單的問(wèn)候"""
    for name in names:
        msg = "Hello, " + name.title() + "!"
        print(msg)
    
usernames = ['hannah','try','margot']
greet_users(usernames)

8.4.1 在函數(shù)中修改列表

將列表傳遞給函數(shù)后斟湃,函數(shù)就可以對(duì)其進(jìn)行修改熏迹。在函數(shù)中對(duì)這個(gè)列表所做的任何修改都是永久性的,這讓你能夠高效地處理大量的數(shù)據(jù)凝赛。

# -*- coding:gbk -*-
# 首先創(chuàng)建一個(gè)列表注暗,其中包含一些要打印的設(shè)計(jì)
unprinted_designs = ['iphone case','robot pendant','dodecahedron']
completed_models = []

# 模擬打印每個(gè)設(shè)計(jì),直到?jīng)]有未打印的設(shè)計(jì)為止
# 打印每個(gè)設(shè)計(jì)后墓猎,都將其移到列表completed_models中
while unprinted_designs:
    current_design = unprinted_designs.pop()

    # 模擬根據(jù)設(shè)計(jì)制作3D打印模型的過(guò)程
    print("Printing model: " + current_design)
    completed_models.append(current_design)

# 顯示打印好的所有模型
print("\nThe following models have been printed:")
for completed_model in completed_models:
    print(completed_model)

編寫(xiě)函數(shù)

# -*- coding:gbk -*-
def print_models(unprinted_designs,completed_models):
    """
    模擬打印每個(gè)設(shè)計(jì)捆昏,直到?jīng)]有未打印的設(shè)計(jì)為止
    打印每個(gè)設(shè)計(jì)后,都將其移到列表completed_models中
    """
    while unprinted_designs:
        current_design = unprinted_designs.pop()
    
        # 模擬根據(jù)設(shè)計(jì)制作3d打印模型的過(guò)程
        print("Printing model: " + current_design)
        completed_models.append(current_design)
    
def show_completed_models(completed_models):
    """顯示打印好的所有模型"""
    print("\nThe following models have been printed:")
    for completed_model in completed_models:
        print(completed_model)
    
unprinted_designs = ['iphone case','robot pendant','dodecahedron']
completed_models = []

print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)

每個(gè)函數(shù)都應(yīng)只負(fù)責(zé)一項(xiàng)具體的工作

8.4.2 禁止函數(shù)修改列表

有時(shí)候陶衅,需要禁止函數(shù)修改列表屡立。可向函數(shù)傳遞列表的副本而不是原件搀军,這樣函數(shù)所做的任何修改都只影響副本膨俐,而絲毫不影響原件。

print_models(unprinted_designs[:],completed_models)

雖然向函數(shù)傳遞列表的副本可保留原始列表的內(nèi)容罩句,但除非有充分的理由需要傳遞副本焚刺,否則還是應(yīng)該將原始列表傳遞給函數(shù),因?yàn)樽尯瘮?shù)使用現(xiàn)成列表可避免花時(shí)間和內(nèi)存創(chuàng)建副本门烂,從而提高效率乳愉,在處理大型列表時(shí)尤其如此兄淫。

8.5 傳遞任意數(shù)量的實(shí)參

# -*- coding:gbk -*-
def make_pizza(*toppings):
    """打印顧客點(diǎn)的所有配料"""
    print(toppings)

make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')

形參名*toppings中的星號(hào)讓python創(chuàng)建一個(gè)名為toppings的空元組,并將收到的所有值都封裝到這個(gè)元組中蔓姚。

# -*- coding:gbk -*-
def make_pizza(*toppings):
    """概述要制作的比薩"""
    print("\nMaking a pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)

make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')

- END - 2019/3/27 23:27

8.5.1 結(jié)合使用位置實(shí)參和任意數(shù)量實(shí)參

如果要讓函數(shù)接受不同類(lèi)型的實(shí)參捕虽,必須在函數(shù)定義中將接納任意數(shù)量實(shí)參的形參放在最后。python先匹配位置實(shí)參和關(guān)鍵字實(shí)參坡脐,再將余下的實(shí)參都收集到最后一個(gè)形參中泄私。

# -*- coding:gbk -*-
def make_pizza(size,*toppings):
    """概述要制作的比薩"""
    print("\nMaking a " + str(size) + 
      "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)
            
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')

8.5.2 使用任意數(shù)量的關(guān)鍵字實(shí)參

# -*- coding:gbk -*-
def build_profile(first,last,**user_info):
    """創(chuàng)建一個(gè)字典,其中包含我們知道的有關(guān)用戶的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
        profile[key] = value
    return profile

user_profile = build_profile('albert','einstein',
                        location='princeton',
                        field='physics')
print(user_profile)

形參**user_info中的兩個(gè)星號(hào)讓python創(chuàng)建一個(gè)名為user_info的空字典备闲,并將收到的所有名稱(chēng)-值對(duì)都封裝到這個(gè)字典中晌端。

8.6 將函數(shù)存儲(chǔ)在模塊中

函數(shù)的優(yōu)點(diǎn)之一是使用它們可將代碼塊與主程序分離。通過(guò)給函數(shù)指定描述性名稱(chēng)恬砂,可讓主程序容易理解得多咧纠。進(jìn)一步可將函數(shù)存儲(chǔ)在被稱(chēng)為模塊的獨(dú)立文件中,再將模塊導(dǎo)入到主程序中泻骤。import語(yǔ)句允許在當(dāng)前運(yùn)行的程序文件中使用模塊中的代碼漆羔。

通過(guò)將函數(shù)存儲(chǔ)在獨(dú)立的文件中,可隱藏程序代碼的細(xì)節(jié)瞪讼,將重點(diǎn)放在程序的高層邏輯上钧椰。這還能讓你在眾多不同的程序中重用函數(shù)粹断。將函數(shù)存儲(chǔ)在獨(dú)立文件中后符欠,可與其他程序員共用這些文件而不是整個(gè)程序。知道如何導(dǎo)入函數(shù)還能讓你使用其他程序員編寫(xiě)的函數(shù)庫(kù)瓶埋。

8.6.1 導(dǎo)入整個(gè)模塊

要讓函數(shù)是可導(dǎo)入的希柿,得先創(chuàng)建模塊。模塊是擴(kuò)展名為.py的文件养筒,包含要導(dǎo)入到程序中的代碼曾撤。
pizza4.py

# -*- coding:gbk -*-
def make_pizza(size,*toppings):
    """概述要制作的比薩"""
    print("\nMaking a " + str(size) +
    "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)

pizza4.py

# -*- coding:gbk -*-
import pizza4

pizza4.make_pizza(16,'pepperoni')
pizza4.make_pizza(12,'mushrooms','green peppers','extra cheese')

python讀取這個(gè)文件時(shí),代碼行import pizza4讓python打開(kāi)文件pizza4.py晕粪,并將其中的所有函數(shù)都復(fù)制到這個(gè)程序中挤悉。
語(yǔ)法:

module_name.function_name()

8.6.2 導(dǎo)入特定的函數(shù)

導(dǎo)入模塊中的特定函數(shù)

 from module_name import function_name

通過(guò)用逗號(hào)分隔函數(shù)名,可根據(jù)需要從模塊中導(dǎo)入任意數(shù)量的函數(shù):

from module_name import function_0,function_1,function_2

前一示例

from pizza4 import make_pizza

make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')

若使用這種方法巫湘,調(diào)用函數(shù)時(shí)就無(wú)需使用句點(diǎn)装悲。由于我們?cè)趇mport語(yǔ)句中顯式地導(dǎo)入了函數(shù)make_pizza(),因此調(diào)用它時(shí)只需指定其名稱(chēng)。

8.6.3 使用as給函數(shù)指定別名

如果要導(dǎo)入的函數(shù)的名稱(chēng)可能與程序中現(xiàn)有的名稱(chēng)沖突尚氛,或者函數(shù)的名稱(chēng)太長(zhǎng)诀诊,可指定簡(jiǎn)短而獨(dú)一無(wú)二的別名——函數(shù)的另一個(gè)名稱(chēng),類(lèi)似于外號(hào)阅嘶。

from pizza import make_pizza as mp

mp(16,'pepperoni')
mp(12,'mushrooms','green peppers','extra cheese')

指定別名的通用語(yǔ)法:

from module_name import function_name as fn

8.6.4 使用as給模塊指定別名

import pizza as p

p.make_pizza(16,'pepperoni')
p.make_pizza(12,'mushrooms','green peppers','extra cheese')

給模塊指定別名的通用語(yǔ)法:

import module_name as mn

8.6.5 導(dǎo)入模塊中的所有函數(shù)

使用星號(hào)(*)運(yùn)算符可讓python導(dǎo)入模塊中的所有函數(shù)

from pizza import *

make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')

由于導(dǎo)入了每個(gè)函數(shù)属瓣,可通過(guò)名稱(chēng)來(lái)調(diào)用每個(gè)函數(shù)载迄,而無(wú)需使用句點(diǎn)表示法。然而抡蛙,使用并非自己編寫(xiě)的大型模塊時(shí)护昧,最好不要采用這種導(dǎo)入方法:如果模塊中有函數(shù)的名稱(chēng)與你的項(xiàng)目中使用的名稱(chēng)相同,可能導(dǎo)致意想不到的結(jié)果:python可能遇到多個(gè)名稱(chēng)相同的函數(shù)或變量粗截,進(jìn)而覆蓋函數(shù)捏卓,而不是分別導(dǎo)入所有的函數(shù)。
最佳的做法是慈格,要么只導(dǎo)入你需要使用的函數(shù)怠晴,要么導(dǎo)入整個(gè)模塊并使用句點(diǎn)表示法。這讓代碼更清晰浴捆,更容易閱讀和理解蒜田。

8.7 函數(shù)編寫(xiě)指南

編寫(xiě)函數(shù)時(shí),需要牢記幾個(gè)細(xì)節(jié)选泻。

  • 應(yīng)給函數(shù)指定描述性名稱(chēng)冲粤,且只在其中使用小寫(xiě)字母和下劃線。(給模塊命名時(shí)同理)

  • 每個(gè)函數(shù)都應(yīng)包含簡(jiǎn)要地闡述其功能的注釋?zhuān)撟⑨寫(xiě)?yīng)緊跟在函數(shù)定義后面页眯,并采用文檔字符串格式梯捕。

  • 給形參指定默認(rèn)值時(shí),等號(hào)兩邊不要有空格窝撵。

    def function_name(parameter_0,parameter_1='default value')
    
  • PEP8建議代碼行的長(zhǎng)度不要超過(guò)79字符傀顾,這樣只要編輯器窗口適中,就能看到整行代碼碌奉。如果形參很多短曾,導(dǎo)致函數(shù)定義的長(zhǎng)度超過(guò)了79字符,可在函數(shù)定義中輸入左括號(hào)后按回車(chē)鍵赐劣,并在下一行按兩次Tab鍵嫉拐,從而將形參列表和只縮進(jìn)一層的函數(shù)體區(qū)分開(kāi)來(lái)。大多數(shù)編輯器都會(huì)自動(dòng)對(duì)齊后續(xù)參數(shù)列表行魁兼,使其縮進(jìn)程度與你給第一個(gè)參數(shù)列表行指定的縮進(jìn)程度相同婉徘。

    def function_name(
          parameter_0,parameter_1,parameter_2,
          parameter_3,parameter_4,parameter_5):
       function body...
    
  • 如果程序或模塊包含多個(gè)函數(shù),可使用兩個(gè)空行將相鄰的函數(shù)分開(kāi)咐汞,這樣將更容易知道前一個(gè)函數(shù)在什么地方結(jié)束盖呼,下一個(gè)函數(shù)從什么地方開(kāi)始。

  • 所有的import語(yǔ)句都應(yīng)放在文件開(kāi)頭碉考,唯一例外的情形是塌计,在文件開(kāi)頭使用了注釋來(lái)描述整個(gè)程序。
    - END - 2019/3/28 22:14
    - END - 2019/3/29-3/30 14:57 復(fù)習(xí)鞏固前8章內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侯谁,一起剝皮案震驚了整個(gè)濱河市锌仅,隨后出現(xiàn)的幾起案子章钾,更是在濱河造成了極大的恐慌,老刑警劉巖热芹,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱傀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伊脓,警方通過(guò)查閱死者的電腦和手機(jī)府寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)报腔,“玉大人株搔,你說(shuō)我怎么就攤上這事〈慷辏” “怎么了纤房?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)翻诉。 經(jīng)常有香客問(wèn)我炮姨,道長(zhǎng),這世上最難降的妖魔是什么碰煌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任舒岸,我火速辦了婚禮,結(jié)果婚禮上芦圾,老公的妹妹穿的比我還像新娘蛾派。我一直安慰自己,他們只是感情好堕扶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布碍脏。 她就那樣靜靜地躺著梭依,像睡著了一般稍算。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上役拴,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天糊探,我揣著相機(jī)與錄音,去河邊找鬼河闰。 笑死科平,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姜性。 我是一名探鬼主播瞪慧,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼部念!你這毒婦竟也來(lái)了弃酌?” 一聲冷哼從身側(cè)響起氨菇,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妓湘,沒(méi)想到半個(gè)月后查蓉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誉碴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年做瞪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惧蛹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹃共,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驶拱,到底是詐尸還是另有隱情及汉,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布屯烦,位于F島的核電站坷随,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏驻龟。R本人自食惡果不足惜温眉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翁狐。 院中可真熱鬧类溢,春花似錦、人聲如沸露懒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)懈词。三九已至蛇耀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坎弯,已是汗流浹背纺涤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抠忘,地道東北人撩炊。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像崎脉,于是被迫代替她去往敵國(guó)和親拧咳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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