3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【全网力荐】堪称最易学的Python基础入门教程

發(fā)布時間:2023/12/8 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【全网力荐】堪称最易学的Python基础入门教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

數(shù)據(jù)的名字和種類——變量和類型

初探數(shù)據(jù)種類

數(shù)據(jù)類型

數(shù)值運算

比較運算

變量和賦值

變量的好處

用賦值更新變量

變量和數(shù)據(jù)類型的關(guān)系

總結(jié)

數(shù)據(jù)類型

數(shù)值運算

數(shù)值比較

變量和賦值

一串?dāng)?shù)據(jù)怎么存儲——列表和字符串

列表(List)

字符串(String)

總結(jié)

不只有一條路——分支和循環(huán)

input()、print() 和 int() 函數(shù)

分支

while 循環(huán)

條件的與、或、取反

for 循環(huán)

總結(jié)

將代碼放進(jìn)盒子——函數(shù)

函數(shù)的初步理解

函數(shù)如何定義

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

函數(shù)有什么用

什么時候用函數(shù)

總結(jié)

多語言比較

知錯能改——錯誤處理、異常機(jī)制

為什么需要錯誤處理

如何處理錯誤

常見的異常類型

raise 語句主動拋出異常

總結(jié)

定制一個模子——類

查看數(shù)據(jù)類型

類的定義

類的實例化

對象屬性

對象方法

總結(jié)

更大的代碼盒子——模塊和包

什么是模塊

模塊的導(dǎo)入

執(zhí)行模塊時傳入?yún)?shù)

什么是包

包的導(dǎo)入

為什么需要模塊和包

總結(jié)

練習(xí)——密碼生成器

密碼生成器要求

實現(xiàn)思路

實現(xiàn)

完整代碼

運行示例

補(bǔ)充說明


Hello,你好呀,我是灰小猿,一個超會寫bug的程序猿!

最近發(fā)現(xiàn)很多開始學(xué)習(xí)編程的小伙伴苦于編程入門比較困難,而且有很多想學(xué)習(xí)編程卻苦于沒有資源的小伙伴,所以今天在這里為大家爆肝Python基礎(chǔ)入門的相關(guān)技術(shù),適合剛開始接觸Python或苦于編程入門的小伙伴們,建議收藏認(rèn)真閱讀!相信會對大家的Python學(xué)習(xí)助一臂之力的!

本文持續(xù)更新,歡迎小伙伴收藏關(guān)注!

話不多說直接開肝!

?

數(shù)據(jù)的名字和種類——變量和類型

初探數(shù)據(jù)種類

在正式開始學(xué)習(xí)這個小節(jié)之前你要明白,現(xiàn)在我們是在學(xué)習(xí)寫程序。那么在寫程序之前你要知道程序的作用是什么?

程序的主要作用是處理數(shù)據(jù)。數(shù)據(jù)的種類有很多,我們在手機(jī)和電腦上看到的那些文字、數(shù)字、圖片、視頻、頁面樣式等等都是數(shù)據(jù)。這些數(shù)據(jù)都是由程序來處理并顯示到屏幕上的。

雖然數(shù)據(jù)的種類形形色色,并且有些看起來比較復(fù)雜,但是在編程時它們實際上都是由一些非常基本的數(shù)據(jù)形式(或經(jīng)過組合)來表示。這些基本數(shù)據(jù)形式有哪些呢?比如有常用到的數(shù)字和字符,以及其它的諸如數(shù)組、字節(jié)序列等形式。

以數(shù)字和字符為例,為大家介紹下在代碼中它們是怎么表示的。

對于數(shù)字,數(shù)字在代碼中的表示形式和平時的電腦輸入一樣,直接書寫即可:

123 3.14159

對于字符,和平時的書寫稍有不同,Python 代碼中表示字符時一定要給字符括上單引號或雙引號:

'How are you?' '嗨!'

這些不同的數(shù)據(jù)表示(書寫)形式,對應(yīng)著不同的數(shù)據(jù)種類,而不同的數(shù)據(jù)種類又具有不同的功能或者作用。

我們將代碼中的數(shù)據(jù)種類稱為數(shù)據(jù)類型,也就是數(shù)據(jù)的類型。

數(shù)據(jù)類型

代碼中的所有數(shù)據(jù)都是有類型的。

數(shù)字所對應(yīng)的數(shù)據(jù)類型有整數(shù)型以及浮點型。整數(shù)型表示整數(shù)數(shù)字,比如:0,-59,100。浮點型表示小數(shù)數(shù)字,如 -3.5,0.25,0.0。

字符所對應(yīng)的數(shù)據(jù)類型叫字符串,所謂字符串就是一串字符。它里面可以是任意語言的字符,比如 '哼哼哈嘿','Good Good Study'。當(dāng)然字符串里也可以只有一個字符,比如 'a'。

有一種表示「是」或「否」的類型,叫做布爾型。它的值叫布爾值,只有 True 和 False 兩種取值。這就好比考試時的判斷題,結(jié)果只能二選一,要么「是」要么「否」。

另外還有一種很特別的類型:None 型,表示什么都沒有,它就一個取值 None。

說明:為了不增加大家的記憶負(fù)擔(dān),這里只介紹這五種基本數(shù)據(jù)類型,后續(xù)的我們慢慢掌握。

考大家一個問題,在代碼中 1000 和 '1000' 是相同的東西嗎?答案是不同,一個是數(shù)字,一個是字符串,數(shù)據(jù)類型不同。

數(shù)值運算

對于整數(shù)型和浮點型,因為它們都被用來表示數(shù)值,理所應(yīng)當(dāng)這二者可以做數(shù)值運算,也就是加減乘除等操作。

我們進(jìn)入 Python 解釋器交互模式中,輸入代碼試驗一下這些數(shù)值運算:

  • 加法

    33+725

    >>> 33+725
    758

  • 減法

    12-24

    >>> 12-24
    -12

  • 乘法

    8*12.5

    >>> 8*12.5
    100.0

  • 除法

    1/3

    >>> 1/3
    0.3333333333333333

  • 除余

    10%3

    >>> 10%3
    1

可以看到,數(shù)值的加(+)、減(-)、乘(*)、除(/)、除余(%)都可以被計算。這些操作也是多種程序語言所通用的,除此之外 Python 還內(nèi)置了次方運算(**)和整除(//):

  • 次方

    2**3

    >>> 2**3
    8

  • 整除

    9//2

    >>> 9//2
    4

這恐怕是 Python 的最簡單的用法了——當(dāng)作計算器!

說明:通常我們?yōu)榱嗣烙^,會在上面的運算符號的左右各加上一個空格,如 12 - 24,2 ** 3。

之后的代碼示例中我們會添加空格。

比較運算

整數(shù)型和浮點型除了數(shù)值運算外,還可以做比較運算,也就是比較兩個數(shù)值的大小。比較的結(jié)果是布爾值。如:

2 > 3

>>> 2 > 3
False

2 <= 3

>>> 2 <= 3
True

2 == 3

>>> 2 == 3
False

比較運算的運算符可以是大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==),不等于(!=)。其寫法與數(shù)學(xué)中的比較運算很相似,但不同的是「等于」和「不等于」,尤其注意「等于」是用兩個等號 == 表示。

變量和賦值

剛才我們學(xué)習(xí)了數(shù)值運算,那我們現(xiàn)在來算算一周有多少秒,一年有多少秒。

首先我們不難得出一天有 60 * 60 * 24 秒。我們可以暫時把這個結(jié)果用某種方式記錄下來,以便后續(xù)使用。用什么方式記錄呢?我們可以使用變量。

變量其實就是編程者給代碼中的某個數(shù)據(jù)所取的名字,之后的編程過程中使用這個名字就相當(dāng)于使用它背后的數(shù)據(jù)。簡單地來理解的話,我們可以把變量看作是代碼中用于保存數(shù)據(jù)的臨時容器。

創(chuàng)建變量的動作我們稱之為定義變量。如下是定義變量的方法:

seconds_per_day = 60 * 60 * 24

在這里我們起了個名字 seconds_per_day,并且通過符號 = 把 60 * 60 * 24 的計算結(jié)果給了它。seconds_per_day 這個名字就是我們所定義的變量,它的值(也就是其背后的數(shù)據(jù))是 60 * 60 * 24 的實際運算結(jié)果。也就是說我們將一天的秒數(shù) 60 * 60 * 24 保存在了變量 seconds_per_day 中。

等號(=) 在代碼中是賦值的意思,表示將 = 右邊的值賦予 = 左邊的變量。注意賦值用等號 = 表示,而「等于」用 == (連續(xù)兩個等號)表示。

執(zhí)行剛才的代碼后,緊接著輸入 seconds_per_day 可以看到這個變量的值:

>>> seconds_per_day
86400

回到「一周有多少秒」的問題上去。我們有了表示一天的秒數(shù)的 seconds_per_day 變量,那我們的程序就可以這樣寫下去:

seconds_per_day * 7

>>> seconds_per_day * 7
604800

一天的秒數(shù)乘以七(天),最終結(jié)果是 604800,沒有任何問題。

剛才的完整連貫代碼是:

seconds_per_day = 60 * 60 * 24 seconds_per_day * 7

變量的好處

你可能會說「一周的秒數(shù),直接計算 60 * 60 * 24 * 7 不就好了,也用不著使用變量」?是的,有時確實可以不使用變量。但使用變量有一個好處,那就是可以暫存一個中間結(jié)果,方便之后去重復(fù)利用它。

比如我們現(xiàn)在還想要再算一下「一年有多少秒」,因為前面已經(jīng)算好了一天的秒數(shù) seconds_per_day,所以可以直接拿來利用:

seconds_per_day * 365

>>> seconds_per_day * 365
31536000

除此之外變量的好處還有,你可以通過妥當(dāng)?shù)淖兞棵謥砀纳瞥绦虻目勺x性(閱讀的容易程度)。比如我們在代碼里寫下 60 * 60 * 24,別人(包括未來的你自己)在閱讀時很難一下子理解這串運算表示什么。但是如果這樣寫呢: seconds_per_day = 60 * 60 * 24。噢,原來是指一天的秒數(shù)。

用賦值更新變量

前面內(nèi)容中的變量是在定義的時候被賦值的,其實變量被定義后也可以反復(fù)給這個變量賦予新的值,這樣變量中的數(shù)據(jù)就被更新了。如:

>>> day = 1
>>> day
1
>>> day = 2
>>> day
2
>>> day = 3
>>> day
3

變量和數(shù)據(jù)類型的關(guān)系

變量用來保存數(shù)據(jù),而數(shù)據(jù)類型用來指明數(shù)據(jù)的種類。

剛才我們使用了 seconds_per_day = 60 * 60 * 24 語句來定義變量 seconds_per_day,并將它賦值為 60 * 60 * 24。因為變量 seconds_per_day 中保存的是個整數(shù)型的值,所以我們說 seconds_per_day 是個整數(shù)型(的)變量。

總結(jié)

數(shù)據(jù)類型

這個章節(jié)中我們提到的 Python 基礎(chǔ)數(shù)據(jù)類型有:

類型表示取值示例
整數(shù)型整數(shù)-59,100
浮點型小數(shù)-3.5,0.01
字符串文本'哼哼哈嘿','Good Good Study'
布爾型是與非True,False
None 型什么都沒有None

Python 中的數(shù)據(jù)類型不止這些,之后會漸漸涉及,表格中的這些類型也會在之后被應(yīng)用到。

數(shù)值運算

數(shù)值運算的符號有:

符號含義示例
+加法1 + 1
-減法2 - 3
*乘法4 * 5
/除法6 / 7
%取余8 % 9
**次方2 ** 3(2 的 3 次方)
//整除5 // 4

數(shù)值比較

數(shù)值比較的符號有:

符號含義
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于

上面的內(nèi)容看起來羅列了很多,但其實不會帶來記憶負(fù)擔(dān)。數(shù)值運算和數(shù)值比較與數(shù)學(xué)上的概念和符號大致相同,略有區(qū)別而已。

變量和賦值

我們通過以下形式來定義變量和賦值:

變量名 = 數(shù)據(jù)值

多語言比較:

「多語言比較」這部分內(nèi)容,是為讓大家了解本章節(jié)所介紹的語言基本特性在其它語言中是如何表達(dá)的。大家可以了解體會它們之間的相識之處。

不同于動態(tài)類型的 Python,在靜態(tài)類型的語言中數(shù)據(jù)類型還有長度一說,也就是類型所能容納的數(shù)據(jù)大小。并且變量在定義時還需先聲明它的類型。以整數(shù)型為例。Java 中的整數(shù)型根據(jù)長度的不同分為:byte(1 字節(jié))、short(2 字節(jié))、int(4 字節(jié))、long(8 字節(jié)),浮點型分為 float(4 字節(jié))、double(8 字節(jié))。其它語言也有一些類似。C/C++ 中的整數(shù)型有「有無符號」之分(如 unsigned int 表示無符號的 int 型,也就是說這只能表示 0 和正數(shù),不能表示負(fù)數(shù))。

Java 定義變量并初始化:

int yearDays = 365

C/C++ 定義變量并初始化:

int yearDays = 365

把 C 和 C++ 合并稱為 C/C++,是因為 C++ 基本上是 C 的強(qiáng)大很多的超集,雖然 C++ 嚴(yán)格來說不是 100% 兼容 C,但幾乎是兼容的。

Go 語言定義變量并初始化:

var yearDays int = 365

Go 語言中的變量定義需要加上關(guān)鍵字 var,且數(shù)據(jù)類型(這里是 int)放在變量名后面。或者采用另一種寫法:

yearDays := 365

這種寫法不但可以省略關(guān)鍵字 var 還可以省略數(shù)據(jù)類型,數(shù)據(jù)類型可直接由編譯器推導(dǎo)出來。

以上語言在變量定義后,都可通過下述語句再次賦值:

yearDays = 366

?

一串?dāng)?shù)據(jù)怎么存儲——列表和字符串

上一節(jié)中講了數(shù)據(jù)類型,有一個問題,之前所介紹的數(shù)據(jù)類型大多是用來表示單個數(shù)據(jù)的。比如整數(shù)型,一個整數(shù)型的變量只能保存一個整數(shù)。又如布爾型,一個布爾型的變量只能保存一個布爾值。浮點型和 None 型也是如此。要是此刻有一系列的數(shù)據(jù),那該怎么在程序里保存和使用呢?

舉個栗子:當(dāng)我的只有一個電話號碼的時候,我可以使用整數(shù)型來表示,并保存在變量里:

tel = 13011110000

但如果有十個電話號碼,該怎么來表示和使用它們呢?

13011110000
18022221111
13433332222
13344443333
17855554444
13866665555
15177776666
13388887777
18799998888
17800009999

你可能會說,「那就用十個變量」,像這樣:

tel01 = 13011110000 tel02 = 18022221111 ... tel10 = 17800009999

或者「把它們用逗號拼在一起然后放到字符串里」:

tels = '13011110000,18022221111,13433332222,13344443333,17855554444,13866665555,15177776666,13388887777,18799998888,17800009999'

是的,看起來這似乎能解決問題。但是這兩種辦法的弊端也很明顯。第一種使用多個變量的方式,在數(shù)據(jù)量很大的情況下使用起來會十分繁瑣;第二種使用字符串的方式,如果我們需要對其中的某些數(shù)據(jù)做處理,那這種方式就很不方便靈活了。

這時我們可以選擇使用列表。

列表(List)

列表是一種用于保存批量數(shù)據(jù)的數(shù)據(jù)類型。它和整數(shù)型、布爾型等數(shù)據(jù)類型一樣都被內(nèi)置在 Python 中。

列表的寫法

列表的寫法為 [ 數(shù)據(jù)項1, 數(shù)據(jù)項2, ..., 數(shù)據(jù)項N ],方括號就代表列表,每個數(shù)據(jù)項放在方括號中并用逗號分隔。

如之前的那一串電話號碼可以這樣來保存:

tels = [13011110000, 18022221111, 13433332222, 13344443333, 17855554444, 13866665555, 15177776666, 13388887777, 18799998888, 17800009999]

擴(kuò)展:為了方便閱讀,我們也可以把把這個列表寫成多行的形式:

tels = [13011110000, 18022221111, 13433332222, 13344443333, 17855554444, 13866665555, 15177776666, 13388887777, 18799998888, 17800009999 ]

每個數(shù)據(jù)項一行,這樣是不是更好看了!

在解釋器的交互模式中輸入這樣的多行代碼時,我們會發(fā)現(xiàn)第一行的提示符是 >>>,之后每行的提示符會變成 ...,直到完成了多行輸入則又變回 >>>。如:

>>> tels = [
… 13011110000,
… 18022221111,
… 13433332222
… ]
>>>

列表中的數(shù)據(jù)可以是任意類型的。比如整數(shù)型、字符串類型和布爾類型等:

[100, 'about', True]

列表索引

列表中的每個數(shù)據(jù)項都是有先后次序的,最前面的數(shù)據(jù)項的位置編號為 0,之后依次是 1 ,2 …… N,這個位置編號在編程中的術(shù)語叫做索引(Index)。注意 Python 中索引是從 0 開始計數(shù)的,0 即代表第一個位置。

可以通過符號 [] 來獲取某個索引所對應(yīng)的數(shù)據(jù)項。比如:

>>> fruits = [‘a(chǎn)pple’, ‘banana’, ‘cherry’, ‘durian’]
>>> fruits[0]
’apple’
>>> fruits[2]
’cherry’

上面的 fruits 有 4 項數(shù)據(jù),所以最大的索引是 3。如果我們強(qiáng)行要用更大的索引值去取數(shù)據(jù)會怎樣呢,來試一下:

>>> fruits[4]
Traceback (most recent call last):
???? File “”, line 1, in
IndexError: list index out of range

可以看到代碼直接就報錯了,具體信息為「list index out of range」,列表索引超出范圍。

擴(kuò)展:這是 Python 的典型報錯形式,這里有三行內(nèi)容(也可能會有很多行),前兩行是錯誤定位,描述出錯的位置(如某文件的某行),后面是錯誤描述,指出這是個 IndexError 錯誤,具體信息為「list index out of range」。

若大家在寫代碼時遇到錯誤,可以按照這種方法嘗試自己分析錯誤信息。

除了通過索引去獲取值,也可以通過索引去改變列表中某項數(shù)據(jù)的值。通過賦值的方式來實現(xiàn):

fruits[0] = 'pear'

>>> fruits[0]
‘a(chǎn)pple’

>>> fruits[0] = 'pear’
>>> fruits[0]
‘pear’

列表的長度

列表中數(shù)據(jù)項的個數(shù),叫做列表(的)長度

想要獲得列表的長度可以使用 len() 這個東西。像這樣:

len(fruits)

>>> len(fruits)
4

>>> len([1, 2, 3, 4, 5, 6, 7])
7

說明:len() 是 Python 中的內(nèi)置函數(shù)。函數(shù)的概念會在之后的章節(jié)中介紹。

向列表添加數(shù)據(jù)

之前使用時,列表中的數(shù)據(jù)在一開始就已經(jīng)被確定下來了,并一直保持著這個長度。但在很多時候,我們需要隨時向列表中添加數(shù)據(jù)。

向列表的末尾添加數(shù)據(jù)可以用 .append()這個東西,它的寫法是:

列表.append(新數(shù)據(jù))

看一個示例。這里首先創(chuàng)建了一個空的列表,將其變量命名為 fruits,然后通過 .append() 向其中添加內(nèi)容。

>>> fruits = []
>>> fruits
[]

>>> fruits.append(‘pear’)
>>> fruits
[‘pear’]

>>> fruits.append(‘lemon’)
>>> fruits
[‘pear’, ‘lemon’]

擴(kuò)展:append() 是列表的方法。「方法」具體是什么我們在之后的面向?qū)ο笳鹿?jié)中介紹。這里暫且把方法理解為某個數(shù)據(jù)類型自帶的功能,如 append() 是列表自帶的功能。

?

字符串(String)

字符串也可以保存批量數(shù)據(jù),只不過其中的數(shù)據(jù)項只能是字符。

我們在前一個章節(jié)中介紹過字符串,字符串是用來表示文本的數(shù)據(jù)類型。字符串以單引號或雙引號以及包裹在其中的若干字符組成,如:

'good good study' '100' '江畔何人初見月,江月何年初照人'

字符串索引

從形式上我們不難看出,字符串中的字符也是有先后次序的。字符串是字符的有序序列,所以也具有索引。也可以根據(jù)索引取出其中某一個字符。其索引使用方式和列表相同:

'good good study'[3]

>>> ‘good good study’[3]
‘d’

也可以先把字符串保存在變量里,然后在變量上使用索引。結(jié)果是一樣的:

words = 'good good study' words[3]

>>> words = ‘good good study’
>>> words[3]
‘d’

有一點需要注意,字符串不能像列表那樣通過索引去改變數(shù)據(jù)項的值。因為字符串類型的值是不可變的(Immutable),我們不能在原地修改它其中的某個字符。

>>> words = ‘good good study’
>>> words[3] = 'b’
Traceback (most recent call last):
???? File “”, line 1, in
TypeError: ‘str’ object does not support item assignment

上面報出一個 TypeError 錯誤,具體信息為「‘str’ object does not support item assignment」,其中「‘str’ object」指的就是字符串,它不支持直接為其中某一個項(字符)賦值。

字符串長度

字符串中字符的個數(shù)也就是字符串的長度(包括空格在內(nèi)的所有空白符號)。

獲取字符串長度的方式和列表一樣,也是使用 len():

len('good good study')

>>> len(‘good good study’)
15

?

總結(jié)

如果我們想要保存和表示批量數(shù)據(jù),可以使用 Python 中的列表(List)類型。列表是有序序列,能保存任意類型的數(shù)據(jù)項,可以通過索引(Index)來獲取和修改其中某一個數(shù)據(jù)項,可以通過 len() 函數(shù)來獲取列表的長度,也可以通過 .append() 在列表末尾追加數(shù)據(jù)項。

如果數(shù)據(jù)是文本,那么可以用字符串類型(String)來表示。字符串類型是字符的有序序列,可以通過索引獲取某個位置的字符,也可以通過 len() 函數(shù)來獲取長度。

Python 中的列表和字符串還有很多功能,之后講「數(shù)據(jù)結(jié)構(gòu)」時為大家一一介紹。


多語言比較:

數(shù)組是保存和表示批量數(shù)據(jù)的最基本的結(jié)構(gòu),它也是構(gòu)造字符串、集合和容器的基石。

Python 中沒有數(shù)組概念,取而代之的是列表這種更高級的數(shù)據(jù)結(jié)構(gòu),列表涵蓋了數(shù)組的功能并提供了更多且更強(qiáng)大的功能。

Java 中,用 類型[] 的寫法來表示數(shù)組:

// 定義數(shù)組 int numbers[];// 定義數(shù)組并用指定值初始化: int numbers[] = {1, 2, 3};

C/C++ 定義數(shù)組:

// 定義數(shù)組 int numbers[3];// 定義數(shù)組并用指定值初始化: int numbers[] = {1, 2, 3};

Go 語言定義數(shù)組:

// 定義數(shù)組 var numbers [3] int// 定義數(shù)組并用指定值初始化: var numbers = [3]int {1, 2, 3}

?

不只有一條路——分支和循環(huán)

前面的章節(jié)中我們學(xué)習(xí)了數(shù)據(jù)類型、變量、賦值、數(shù)值運算,并且用這些知識編寫程序來做一些簡單的運算,比如「計算一年有多少秒」。像這樣的程序,執(zhí)行流程是完全固定的,每個步驟事先確定好,運行時一步一步地線性地向下執(zhí)行。

但是很多時候程序的功能會比較復(fù)雜,單一的執(zhí)行流程并無法滿足要求,程序在運行時可能需要對一些條件作出判斷,然后選擇執(zhí)行不同的流程。這時就需要分支循環(huán)語句了。

?

input()、print() 和 int() 函數(shù)

在開始學(xué)習(xí)分支和循環(huán)前,為了可以讓程序與我們交互,先來學(xué)習(xí)三個函數(shù)。至于什么是函數(shù),我們暫且把它看作是程序中具有某種功能的組件,下一小節(jié)中將會詳細(xì)介紹函數(shù)的概念。

input() 函數(shù)

如果想要通過命令行與程序交互,可以使用 input() 函數(shù)。

input() 函數(shù)可以在代碼執(zhí)行到此處時輸出顯示一段提示文本,然后等待我們的輸入。在輸入內(nèi)容并按下回車鍵后,程序?qū)⒆x取輸入內(nèi)容并繼續(xù)向下執(zhí)行。讀取到的輸入內(nèi)容可賦值給變量,供后續(xù)使用。寫法如下:

讀取到的輸入 = input('提示文本')

>>> age = input(‘請輸入你的年齡:’)
請輸入你的年齡:30
>>> age
’30’

這行代碼會在命令行中顯示「請輸入你的年齡:」,然后等待輸入,讀取到輸入內(nèi)容后賦值給 age 變量。

input() 返回的結(jié)果是字符串類型,如 '30'。如果我們需要整數(shù)型,可以使用 int() 函數(shù)進(jìn)行轉(zhuǎn)換。

int() 函數(shù)

int() 函數(shù)可以將字符串、浮點型轉(zhuǎn)換整數(shù)型。寫法為:

int(字符串或浮點數(shù))

將字符串類型 ‘1000’ 轉(zhuǎn)換為整數(shù)型 1000:

>>> int(‘1000’)
1000

將浮點數(shù) 3.14 轉(zhuǎn)化為整數(shù):

>>> int(3.14)
3

print() 函數(shù)

print() 函數(shù)可以將指定的內(nèi)容輸出到命令行中。寫法如下:

print('要輸出的內(nèi)容')

>>> print(‘Hello World!’)
Hello World!
>>> print(‘你的年齡是’, 20)
你的年齡是 20

要輸出的內(nèi)容放在括號中,多項內(nèi)容時用逗號分隔,顯示時每項以空格分隔。

input()、print() 示例

我們可以把 input() 和 print() 結(jié)合起來。如下面這兩行代碼將在命令行中提示「請輸入你的年齡:」,然后等待輸入,手動輸入年齡后按下回車鍵,將顯示「你的年齡是 x」。

age = input('請輸入你的年齡:') print('你的年齡是', age)

我們把代碼保存到文件中,文件命名為 age.py, 然后執(zhí)行下:

? ~ python3 age.py
請輸入你的年齡:18
你的年齡是 18

?

分支

上一個例子很簡單,接收一個輸入內(nèi)容然后把該內(nèi)容顯示出來。現(xiàn)在難度升級。在剛才代碼的基礎(chǔ)上,如果所輸入的年齡小于 18 歲,那么在最后再顯示一句勉勵語——「好好學(xué)習(xí),天天向上」。如何來實現(xiàn)?

if 語句

如果想要表達(dá)「如果……」或者「當(dāng)……」這種情形,需要用到 if 語句。它的寫法是:

if 條件:代碼塊

它的執(zhí)行規(guī)則是,若「條件」?jié)M足,則執(zhí)行 if 下的「代碼塊」,若「條件」不滿足則不執(zhí)行。

條件滿足指的是,條件的結(jié)果為布爾值 True,或非零數(shù)字,或非空字符串,或非空列表。

代碼塊就是一段代碼(可以是一行或多行),這段代碼作為一個整體以縮進(jìn)的形式嵌套在 if 下面。按照通常的規(guī)范,縮進(jìn)以 4 個空格表示。

回到我們之前的需求上,「當(dāng)年齡小于 18 歲」就可以通過 if 語句來實現(xiàn)。完整代碼如下:

age = int(input('請輸入你的年齡:')) # 注意此處用 `int()` 將 `input()` 的結(jié)果由字符串轉(zhuǎn)換為整數(shù)型 print('你的年齡是', age)if age < 18:print('好好學(xué)習(xí),天天向上')

保存在文件中,執(zhí)行一下看看:

? ~ python3 age.py
請輸入你的年齡:17
你的年齡是 17
好好學(xué)習(xí),天天向上

? ~ python3 age.py
請輸入你的年齡:30
你的年齡是 30

可以看到,當(dāng)所輸入的年齡小于 18 時,程序在最后輸出了「好好學(xué)習(xí),天天向上」,而輸入年齡大于 18 時則沒有。

else 語句

又在上面的基礎(chǔ)上,如果輸入的年齡大于等于 18 歲,輸出「革命尚未成功,同志任需努力」。該如何實現(xiàn)?

我們可以在 if 語句之后緊接著使用 else 語句,當(dāng) if 的條件不滿足時,將直接執(zhí)行 else 的代碼塊。寫法如下:

if 條件:代碼塊 1 else:代碼塊 2

若條件滿足,則執(zhí)行代碼塊 1,若不滿足則執(zhí)行代碼塊 2。所以之前的需求我們可以這樣實現(xiàn):

age = int(input('請輸入你的年齡:')) print('你的年齡是', age)if age < 18:print('好好學(xué)習(xí),天天向上') else:print('革命尚未成功,同志仍需努力')

執(zhí)行下看看:

? ~ python3 age.py
請輸入你的年齡:18
你的年齡是 18
革命尚未成功,同志任需努力

? ~ python3 age.py
請輸入你的年齡:17
你的年齡是 17
好好學(xué)習(xí),天天向上

elif 語句

我們可以看到,if 和 else 表達(dá)的是「如果……否則……」這樣的二元對立的條件,非此即彼。但有時我們還需要表達(dá)「如果……或者……或者……否則……」這樣多個條件間的選擇。

舉個例子,下表是年齡和其對應(yīng)的人生階段。

年齡人生階段
0-6 歲童年
7-17 歲少年
18-40 歲青年
41-65 歲中年
65 歲之后老年

當(dāng)我們在程序中輸入一個年齡時,輸出對應(yīng)的人生階段。該如何實現(xiàn)?我們先用漢語來描述一下代碼邏輯(這種自然語言描述的代碼邏輯,也叫作偽代碼):

如果年齡小于等于 6:輸出童年 如果年齡介于 7 到 17:輸出少年 如果年齡介于 18 到 40:輸出青年 如果年齡介于 41 到 65:輸出中年 否則:輸出老年

可以看到,我們需要依次進(jìn)行多個條件判斷。要實現(xiàn)它就要用到 elif 語句了,字面上它是 else if 的簡寫。

elif 置于 if 和 else 之間,可以有任意個:

if 條件 1:代碼塊 1 elif 條件 2:代碼塊 2 else代碼塊 3

之前根據(jù)年齡輸出人生階段的需求,可以這樣實現(xiàn):

age = int(input('請輸入年齡:'))if age <= 6:print('童年') elif 7 <= age <=17:print('少年') elif 18 <= age <= 40:print('青年') elif 41 <= age <= 65:print('中年') else:print('老年')

? ~ python3 age.py
請輸入年齡:3
童年
? ~ python3 age.py
請輸入年齡:17
少年
? ~ python3 age.py
請輸入年齡:30
青年
? ~ python3 age.py
請輸入年齡:65
中年
? ~ python3 age.py
請輸入年齡:100
老年

分支語句小結(jié)

如上所述,if 可以配合 elif 和 else 一起使用。代碼執(zhí)行時,將會從第一個條件開始依次驗證判斷,若其中某個條件滿足,則執(zhí)行對應(yīng)的代碼塊,此時后續(xù)條件將直接跳過不再驗證。

一個 if-elif-else 組合中,elif 可出現(xiàn)任意次數(shù),else 可出現(xiàn) 0 或 1 次。

?

while 循環(huán)

之前介紹的 if 語句,是根據(jù)條件來選擇執(zhí)行還是不執(zhí)行代碼塊。我們還有一種很重要的場景——根據(jù)條件來判斷代碼塊該不該被重復(fù)執(zhí)行,也就是循環(huán)

在 Python 中可以使用 while 語句來執(zhí)行循環(huán)操作,寫法如下:

while 條件:代碼塊

它的執(zhí)行流程是,從 while 條件這句出發(fā),判斷條件是否滿足,若滿足則執(zhí)行代碼塊,然后再次回到 while 條件,判斷條件是否滿足……循環(huán)往復(fù),直到條件不滿足。

可以看到,如果這里的條件一直滿足且固定不變,那么循環(huán)將無窮無盡地執(zhí)行下去,這稱之為死循環(huán)。一般情況下我們很少會刻意使用死循環(huán),更多的是讓條件處于變化中,在循環(huán)的某一時刻條件不被滿足然后退出循環(huán)。

循環(huán)示例

舉個例子,如何輸出 100 次「你很棒」?

顯然我們可以利用循環(huán)來節(jié)省代碼,對循環(huán)條件做一個設(shè)計,讓它剛好執(zhí)行 100 次后結(jié)束。

count = 0while count < 100:print('你很棒')count = count + 1

利用一個計數(shù)器 count 讓它保存循環(huán)的次數(shù),當(dāng) count 小于 100 就執(zhí)行循環(huán),代碼塊每執(zhí)行一次就給 count 加 1。我們在大腦中試著來模擬這個流程,用大腦來調(diào)試(Debug)。

將代碼寫入文件 loop.py,執(zhí)行下看看:

? ~ python3 loop.py
你很棒
你很棒
你很棒

程序?qū)⑷珙A(yù)期輸出 100 行「你很棒」。

擴(kuò)展:count = count + 1 可以簡寫為 count += 1

?

條件的與、或、取反

if 語句和 while 語句中的條件可以由多個語句組合表達(dá)。

and 關(guān)鍵字

要表達(dá)多個條件同時滿足的情況,可以使用 and 關(guān)鍵字。使用 and 關(guān)鍵字時,在所有并列的條件均滿足的情況下結(jié)果為 True。至少一個條件不滿足時結(jié)果為 False。如:

>>> 2 > 1 and ‘a(chǎn)bc’ == ‘a(chǎn)bc’ and True
True
>>> 1 > 0 and 0 != 0
False

在 if 語句中可以這樣使用 and 關(guān)鍵字 :

if 條件1 and 條件2 and 條件N:代碼塊

上述 if 語句只有在所有的條件均滿足的情況下,代碼塊才會被執(zhí)行。

例如我們假設(shè)把年齡大于 30 并且為男性的人稱為大叔,「年齡大于 30 」和「男性」是兩個判斷條件,并且需要同時滿足,這種情況就可以用 and 關(guān)鍵字來表達(dá)。如:

if age > 30 and sex == 'male':print('大叔')

or 關(guān)鍵字

要表達(dá)多個條件中至少一個滿足即可的情況,可以使用 or 關(guān)鍵字。使用 or 關(guān)鍵字時,并列的條件中至少有一個滿足時,結(jié)果為 True。全部不滿足時結(jié)果為 False。

在 if 語句中可以這樣使用 or 關(guān)鍵字 :

if 條件1 or 條件2 or 條件N:代碼塊

上述 if 語句中只要有任意一個(或多個)條件滿足,代碼塊就會被執(zhí)行。

not 關(guān)鍵字

not 關(guān)鍵字可以將一個布爾值取反。如:

>>> not True
False
>>>
>>> not 1 > 0
False

用在 if 語句和 while 語句的條件上時,條件的結(jié)果被反轉(zhuǎn)。

在 if 語句中可以這樣使用 not 關(guān)鍵字 :

if not 條件:代碼塊

上述 if 語句在條件不滿足時執(zhí)行代碼塊,條件滿足時反而不執(zhí)行,因為 not 關(guān)鍵字對結(jié)果取了反。

?

for 循環(huán)

前面介紹了 while 循環(huán),在 Python 中還有一種循環(huán)方式——for 循環(huán)。

for 循環(huán)更多的是用于從頭到尾地去掃描列表、字符串這類數(shù)據(jù)結(jié)構(gòu)中的每一個項,這種方式叫做遍歷迭代

for 循環(huán)寫法為:

for 項 in 序列:代碼塊

其執(zhí)行過程是,反復(fù)執(zhí)行 for 項 in 序列 語句和其代碼塊,項 的值依次用序列的各個數(shù)據(jù)項替換,直到序列的所有項被遍歷一遍。

比如,有個列表為 ['apple', 'banana', 'cherry', 'durian'],我們想依次輸出它的每個列表項,就可以用 for 循環(huán)。

fruit_list = ['apple', 'banana', 'cherry', 'durian']for fruit in fruit_list:print(fruit)

將代碼寫入 for.py,執(zhí)行下:

? ~ python3 for.py
apple
banana
cherry
durian

可以看到,

  • 第一次循環(huán)時, fruit 的值為 apple
  • 第二次循環(huán)時, fruit 的值為 banana
  • 第三次循環(huán)時, fruit 的值為 cherry
  • 第四次循環(huán)時, fruit 的值為 durian
  • 每次循環(huán)時 fruit 都自動被賦予新的值,直到 fruit_list 的所有列表項遍歷完,循環(huán)退出。

    ?

    總結(jié)

    input() 函數(shù)可以在程序運行到此處時輸出一段提示文本,然后停留在此等待我們的輸入,輸入內(nèi)容后按下回車鍵,程序?qū)⒆x取輸入內(nèi)容并向下執(zhí)行。寫法為:

    age = input('請輸入你的年齡:')

    print() 函數(shù)可以將內(nèi)容輸出到命令行中,內(nèi)容放到括號中,多項內(nèi)容時可用逗號分隔。寫法為:

    print('你的年齡是', 20)

    int() 函數(shù)可以將字符串、浮點型轉(zhuǎn)換整數(shù)型。寫法為:

    int(字符串或浮點數(shù))

    if,elif,else 組合使用,根據(jù)條件來選擇對應(yīng)的執(zhí)行路徑。寫法為:

    if 條件 1:代碼塊 1 elif 條件 2:代碼塊 2 else:代碼塊 3

    while 語句來用執(zhí)行循環(huán)操作,根據(jù)條件來判斷代碼塊該不該被重復(fù)執(zhí)行。寫法為:

    while 條件:代碼塊

    for 循環(huán)通常用于執(zhí)行遍歷操作。寫法為:

    for 項 in 序列:代碼塊

    多語言比較:

    Java 中的分支語句:

    if (條件1) {代碼塊1 } else if (條件2) {代碼塊2 } else {代碼塊3 }

    C/C++ 中的分支語句:

    if (條件1) {代碼塊1 } else if (條件2) {代碼塊2 } else {代碼塊3 }

    Go 中的分支語句:

    if 條件1 {代碼塊1 } else if 條件2 {代碼塊2 } else {代碼塊3 }

    Java 中的循環(huán):

    for (int i=0; i < 100; i++) {代碼塊 }// 或 for each 形式 for (int number: numbers) {代碼塊 }

    C/C++ 中的循環(huán):

    for (int i=0; i < 100; i++) {代碼塊 }

    Go 中的循環(huán):

    for i := 0; a < 100; i++ {代碼塊 }// 相當(dāng)于 while for 條件 {代碼塊 }// for each 形式 for index, item := range numbers {代碼塊 }

    ?

    將代碼放進(jìn)盒子——函數(shù)

    我們之前介紹過一些函數(shù),如 print()、int()、input() 等。直接使用它們就可以獲得一些功能,如向命令行輸出內(nèi)容、轉(zhuǎn)換數(shù)字、獲取命令行輸入,那么它們到底是什么呢?

    ?

    函數(shù)的初步理解

    大家應(yīng)該都非常熟悉數(shù)學(xué)上的函數(shù),簡單來說數(shù)學(xué)上的函數(shù)就是一個映射關(guān)系,給定一個 x,經(jīng)映射后將得到 y 值,至于這其中的映射關(guān)系我們可以直接把它抽象為 y=f(x)。

    程序中的函數(shù)與數(shù)學(xué)上的函數(shù)有一絲類似,我們也可以把它抽象地看作一個映射關(guān)系,給定輸入?yún)?shù)后,經(jīng)函數(shù)映射,返回輸出結(jié)果。如之前我們使用過的 int() 和 len():

    數(shù)字 = int(字符串) 長度 = len(列表)

    給定輸入值,經(jīng)函數(shù)處理,返回輸出值,這是函數(shù)最單純的模式。

    ?

    函數(shù)如何定義

    Python 中函數(shù)的定義方式如下:

    def 函數(shù)名(參數(shù)1, 參數(shù)2, ...):代碼塊

    函數(shù)的輸入值叫做函數(shù)參數(shù),如上面的「參數(shù)1」、「參數(shù)2」。函數(shù)參數(shù)的個數(shù)可以是任意個,如 0 個、1 個或多個。需要注意參數(shù)是有順序的,使用時要按對應(yīng)位置傳遞參數(shù)。

    函數(shù)內(nèi)部的代碼塊就是函數(shù)的實現(xiàn)。所有的函數(shù)功能都實現(xiàn)于此。

    函數(shù)的輸出結(jié)果叫函數(shù)的返回值。函數(shù)可以沒有返回值,也可以有一個或多個返回值。返回值通過 return 語句傳遞到函數(shù)外部,如:

    def add(x, y):return x + y

    函數(shù)定義示例

    我們來編寫一個函數(shù)試試,這個函數(shù)的需要的參數(shù)是年齡,返回值是年齡對應(yīng)的人生階段。

    年齡人生階段
    0-6 歲童年
    7-17 歲少年
    18-40 歲青年
    41-65 歲中年
    65 歲之后老年

    這個功能好像有點眼熟,沒錯,上一章節(jié)中我們完成過這個功能,現(xiàn)在把這個功能改寫成函數(shù)。

    可以這樣來定義這個函數(shù):

    def stage_of_life(age):if age <= 6:return '童年'elif 7 <= age <=17:return '少年'elif 18 <= age <= 40:return '青年'elif 41 <= age <= 65:return '中年'else:return '老年'

    我們給函數(shù)起名為 stage_of_life,需要一個參數(shù) age,最終通過 return 語句返回對應(yīng)的人生階段,這個人生階段就是函數(shù)的返回值。

    這里雖然有多個 return 語句,但是實際上每次函數(shù)使用時,只會有一個 return 語句被執(zhí)行。

    副作用

    上面這個示例中,給定一個參數(shù) age,便返回對應(yīng)的人生階段。函數(shù)內(nèi)部只是做了一個映射,并沒有對程序和系統(tǒng)的狀態(tài)作出影響,這樣的函數(shù)是純函數(shù)

    純函數(shù)是函數(shù)的一個特例,更普遍的情況是,函數(shù)包含一些會引起程序或系統(tǒng)狀態(tài)變化的操作,如修改全局變量、命令行輸入輸出、讀寫文件等,這樣的變化叫做函數(shù)的副作用

    副作用并不是不好的作用,它只是函數(shù)在輸入值和輸出值間映射之外,所附帶的作用。副作用在有些時候是不可避免的。

    因為有了副作用,函數(shù)就不必完全遵從 輸入 -> 映射 -> 輸出 這種模式,函數(shù)可以在沒有參數(shù)或返回值的情況下,擁有其功能。如果你看到一個函數(shù)沒有參數(shù)或返回值,要自然的想到,那是副作用在發(fā)揮作用。

    沒有參數(shù)沒有返回值:

    def say_hello():print('hello')

    有參數(shù)沒有返回值:

    def say_words(words):print(words)

    沒有參數(shù)有返回值:

    def pi():return 3.14159

    ?

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

    函數(shù)定義完成后,就可以在后續(xù)的代碼中使用它了,對函數(shù)的使用叫做函數(shù)調(diào)用

    以前我們調(diào)用過 int()、len(),它們是內(nèi)置在 Python 語言中的函數(shù),也就是內(nèi)置函數(shù)。現(xiàn)在我們自己定義了 stage_of_life,調(diào)用的方式是一樣的:

    def stage_of_life(age):if age <= 6:return '童年'elif 7 <= age <=17:return '少年'elif 18 <= age <= 40:return '青年'elif 41 <= age <= 65: return '中年'else:return '老年'stage = stage_of_life(18) print(stage)

    用參數(shù)的形式將數(shù)據(jù)傳遞給函數(shù),用賦值語句來接收返回值。

    需要說明的是

    • 函數(shù)有多個參數(shù)時,參數(shù)是有順序的,要按對應(yīng)位置將參數(shù)傳遞進(jìn)去。

      >>> def minus(x, y):
      … return x - y

      >>> minus(1, 3)
      -2
      >>> minus(3, 1)
      2

    • 函數(shù)需要先經(jīng)過定義,之后才能被調(diào)用,否則解釋器將找不到這個函數(shù)名,也就無法調(diào)用它。

      未定義函數(shù)便直接調(diào)用,解釋器將報出「名字未定義」的錯誤:

      >>> stage = abc(18)
      Traceback (most recent call last):
      File “”, line 1, in
      NameError: name ‘a(chǎn)bc’ is not defined

    ?

    函數(shù)有什么用

    從形式上來看,函數(shù)將一段代碼包裹起來,調(diào)用函數(shù)就像當(dāng)于執(zhí)行那段代碼。代碼所需要的數(shù)據(jù)我們可以通過函數(shù)參數(shù)的形式傳遞進(jìn)去,代碼的執(zhí)行結(jié)果通過返回值出傳遞出來。那么函數(shù)到底有什么用呢?

    抽象

    函數(shù)的價值主要體現(xiàn)在調(diào)用時,而不是定義時。調(diào)用時函數(shù)就像個盒子,使用者不需要了解其中有什么代碼,是什么樣的邏輯,只要知道怎么使用它的功能就足夠了。以 len() 函數(shù)為例,我們不知道這個函數(shù)的原理,但是能用它達(dá)到我們獲取列表長度的目的,這就是它的重要價值。

    簡單來說函數(shù)的主要作用是抽象,屏蔽繁雜的內(nèi)部細(xì)節(jié),讓使用者在更高的層次上簡單明了地使用其功能。我們之前說過「計算機(jī)的世界里最重要的原理之一就是抽象」,函數(shù)就是其一個體現(xiàn)。

    代碼復(fù)用

    因為具有抽象的好處,函數(shù)也延伸出另一個作用——復(fù)用,或者叫代碼復(fù)用。也就是便于重復(fù)使用,節(jié)省代碼。舉個例子,假如我們想用程序計算并輸出 -33,456,-0.03 的絕對值,不用函數(shù)時我們這樣寫:

    number = -33 if number > 0:print(number) else:print(-number)number = 456 if number > 0:print(number) else:print(-number)number = -0.03 if number > 0:print(number) else:print(-number)

    顯然有大量重復(fù)的代碼,這些重復(fù)代碼是可以避免的。用函數(shù)修改后如下:

    def print_absolute(number):if number > 0:print(number)else:print(-number) print_absolute(-33) print_absolute(456) print_absolute(-0.03)

    代碼量減少很多,也能應(yīng)對未來的相同需求,這就是復(fù)用的好處。

    ?

    什么時候用函數(shù)

    看了上面函數(shù)的好處之后,想必你已經(jīng)知道在什么時候用函數(shù)了吧?

    • 需要通過函數(shù)的形式把這些復(fù)雜性隔離出來,之后在使用時只需調(diào)用這個函數(shù)即可,清晰且優(yōu)雅。

    • 需要復(fù)用時。一段相似甚至完全一致的代碼在多處被使用,可以考慮將這段代碼定義為函數(shù),然后在各處去調(diào)用它。

    ?

    總結(jié)

    函數(shù)的主要作用是抽象和代碼復(fù)用。

    Python 中函數(shù)的定義方法:

    def 函數(shù)名(參數(shù)1, 參數(shù)2, ...):代碼塊

    返回值通過 return 語句傳遞到函數(shù)外部。


    多語言比較

    Java 中所有的函數(shù)都需要定義在類中,類中的函數(shù)也叫做方法。

    Java 中定義函數(shù):

    int add(int x, int y) {return x + y }

    C/C++ 中定義函數(shù):

    int add(int x, int y) {return x + y }

    Go 中定義函數(shù):

    func max(x, y int) int {return x + y }

    ?

    知錯能改——錯誤處理、異常機(jī)制

    為什么需要錯誤處理

    我們之前寫的代碼能夠正常運行是建立在一個前提之下的,那就是假設(shè)所有的命令行輸入或者函數(shù)參數(shù)都是正確無誤的,并且執(zhí)行過程中每個環(huán)節(jié)都是可靠和符合預(yù)期的。

    當(dāng)然,在程序的實際開發(fā)和使用過程中,這個前提是不能成立的,所有的假設(shè)都無法完全保證。比如:

    • 用戶與程序交互時輸入不滿足規(guī)則的內(nèi)容。如,本應(yīng)該輸入年齡的地方輸入了一個漢字,或者年齡的取值為負(fù)數(shù),或者年齡遠(yuǎn)遠(yuǎn)超出人的正常壽命
    • 函數(shù)或模塊的使用者采用非預(yù)期的使用方式。如,函數(shù)期望的參數(shù)是整數(shù)型,結(jié)果傳遞了一個列表
    • 程序外部的環(huán)境發(fā)生變化等。如:讀取文件時,系統(tǒng)中不存在該文件;網(wǎng)絡(luò)傳輸時,發(fā)生連接故障
    • ……

    這些錯誤發(fā)生在程序運行階段,無法在編碼階段預(yù)知到它們是否會發(fā)生,但我們可以未雨綢繆,在代碼中對潛在錯誤做出處理,以避免對程序運行造成破壞性影響。

    說明:開發(fā)程序過程中還有一種常見的錯誤,就是開發(fā)者編寫代碼時的語法錯誤、編譯錯誤以及運行時的 Bug。這些錯誤可以在開發(fā)時通過測試、調(diào)試、日志診斷等手段予以發(fā)現(xiàn)和解決,并不屬于本章節(jié)所講的錯誤處理機(jī)制的范疇。且不能用錯誤處理機(jī)制來規(guī)避 Bug

    如何處理錯誤

    首先錯誤發(fā)生時,需要先捕獲到該錯誤,然后根據(jù)具體的錯誤內(nèi)容或類型,選擇后續(xù)處理的方式。

    在 Python 中大多數(shù)情況下,錯誤是以拋出異常的形式報告出來。如列表的索引越界異常:

    >>> fruit = ['apple', 'banana'][2] Traceback (most recent call last): &nbsp;&nbsp;&nbsp;&nbsp; File "<stdin>", line 1, in <module> IndexError: list index out of range

    上面提示發(fā)生了「IndexError」錯誤,這個 IndexError 就是異常的一種。在這里它直接被解釋器捕捉到,然后將錯誤信息輸出到了命令行中。

    我們也可以自己來捕獲異常,然后自定義處理方式。

    try-except 語句捕獲異常

    異常的捕獲使用 try-except 語句:

    try:代碼塊1 except:代碼塊2

    執(zhí)行流程是,從 try 下的 代碼塊1 開始執(zhí)行,若其中有異常拋出,那么異常將會被捕獲,直接跳轉(zhuǎn)并執(zhí)行 except 下的 代碼塊2 。若 代碼塊1 一切正常,并沒有異常拋出,那么 代碼塊2 將不會被執(zhí)行。

    也就是說 代碼塊1 是我們想要正常運行的代碼,而 代碼塊2 是當(dāng)錯誤發(fā)生時用于處理錯誤的代碼。

    來看一個使用 try-except 時發(fā)生異常的例子:

    >>> try:
    … ???? fruit = [‘a(chǎn)pple’, ‘banana’][2]
    … ???? print(fruit)
    … except:
    … ???? print(‘列表索引越界啦’)

    列表索引越界啦

    這里的執(zhí)行流程是,執(zhí)行 try 下的 ['apple', 'banana'][2],此時由于索引越界而產(chǎn)生異常,代碼 print(fruit) 將被跳過,轉(zhuǎn)而執(zhí)行 except 下的 print('列表索引越界啦')。

    再來看一個無異常的例子:

    >>> try:
    … ???? fruit = [‘a(chǎn)pple’, ‘banana’, ‘cherry’][2]
    … ???? print(fruit)
    … except:
    … ???? print(‘列表索引越界啦’)

    cherry

    可以看到無異常拋出時,try 下的代碼被全部執(zhí)行,except 下的代碼不會被執(zhí)行。

    捕獲指定的異常

    之前我們沒有直接指定要捕獲的異常類型,所以所有類型的異常都會被捕獲。

    我們也可以顯式地指定要捕獲的異常種類。方法是:

    try:代碼塊1 except 異常X as e:代碼塊2

    和之前的區(qū)別在于,多出了 異常X as e 這一部分。異常X 是指定的要捕獲的異常名,如 IndexError、NameError。as e 語句是將異常對象賦予變量 e,這樣 e 就可以在 代碼塊2 中使用了,如獲取錯誤信息。

    如下是捕獲指定異常的例子:

    >>> try:
    … ???? fruit = [‘a(chǎn)pple’, ‘banana’][2]
    … except IndexError as e:
    … ???? print(‘出現(xiàn)索引越界錯誤:’, e)

    出現(xiàn)索引越界錯誤: list index out of range

    這里我們顯式地指定要捕獲 IndexError 異常,并且將異常中的錯誤信息輸出出來。

    顯式指定異常時,只有被指定的異常會被捕獲,其余異常將會被忽略。

    捕獲指定的多個異常

    上面是指定并捕獲一個異常,當(dāng)然也可以在一個 try 語句下指定并捕獲多個異常。有兩種方式:

    try:代碼塊1 except (異常X, 異常Y, 異常Z) as e:代碼塊2 try:代碼塊1 except 異常X as e:代碼塊2 except 異常Y as e:代碼塊3 except 異常Z as e:代碼塊4

    如上,第一種方式是將多個異常放在一個 except 下處理,第二種方式將多個異常分別放在不同的 except 下處理。無論用哪種方式,異常拋出時,Python 會根據(jù)異常類型去匹配對應(yīng)的 except 語句,然后執(zhí)行其中代碼塊,若異常類型未能匹配到,則異常會繼續(xù)拋出。那么這兩種方式有什么區(qū)別呢?

    • 第一種方式適用于多種異常可用相同代碼進(jìn)行處理的情況。
    • 第二種情況適用于每個異常需要用不同代碼進(jìn)行處理的情況。

    try-except-finally 語句

    在之前介紹的 try-except 語句之后,還可以緊跟 finall 語句,如下:

    try:代碼塊1 except 異常X as e:代碼塊2 finally:代碼塊3

    它的執(zhí)行流程是,

  • 首先執(zhí)行 代碼塊1
  • 若發(fā)生異常則執(zhí)行 代碼塊2,否則跳過 代碼塊2
  • 無論是否發(fā)生異常都執(zhí)行 代碼塊3
  • 也就是說在 try-except 執(zhí)行流程的基礎(chǔ)上,緊接著執(zhí)行 finally 下的代碼塊,且 finally 下的代碼必定會被執(zhí)行。

    finally 有什么用?舉個例子,我們有時會在 try 下使用一些資源(比如文件、網(wǎng)絡(luò)連接),而無論過程中是否有異常產(chǎn)生,我們在最后都應(yīng)該釋放(歸還)掉這些資源,這時就可以將釋放資源的代碼放在 finally 語句下。

    常見的異常類型

    下表中是 Python 常見的內(nèi)置異常:

    異常名含義
    Exception大多數(shù)異常的基類
    SyntaxError無效語法
    NameError名字(變量、函數(shù)、類等)不存在
    ValueError不合適的值
    IndexError索引超過范圍
    ImportError模塊不存在
    IOErrorI/O 相關(guān)錯誤
    TypeError不合適的類型
    AttributeError屬性不存在
    KeyError字典的鍵值不存在
    ZeroDivisionError除法中被除數(shù)為 0

    除此之外內(nèi)置異常還有很多,待日后慢慢積累掌握。

    raise 語句主動拋出異常

    之前的示例中,異常是在程序遇到錯誤無法繼續(xù)執(zhí)行時,由解釋器所拋出,我們也可以選擇自己主動拋出異常。

    主動拋出異常的方法是使用 raise 語句:

    raise ValueError()

    也可以同時指明錯誤原因:

    raise ValueError("輸入值不符合要求")

    我們用示例來學(xué)習(xí)為什么要主動拋出異常,以及如何主動拋出異常。

    之前我們在學(xué)習(xí)函數(shù)的時候?qū)戇^這樣一個函數(shù):

    def stage_of_life(age):if age <= 6:return '童年'elif 7 <= age <=17:return '少年'elif 18 <= age <= 40:return '青年'elif 41 <= age <= 65: return '中年'else:return '老年'

    顯然這個函數(shù)沒有應(yīng)對可能出錯的情況。比如函數(shù)的 age 參數(shù)不能任意取值,要符合人類的年齡范圍才行,如果取值超出范圍就需要向函數(shù)調(diào)用方報告錯誤,這時就可以采取主動拋出異常的方式。

    我們在函數(shù)內(nèi)檢驗輸入值的有效性,若輸入有誤則向外拋出異常,新增第 2 和第 3 行代碼:

    def stage_of_life(age):if age < 0 or age > 150:raise ValueError("年齡的取值不符合實際,需要在 0 到 150 之間")if age <= 6:return '童年'elif 7 <= age <=17:return '少年'elif 18 <= age <= 40:return '青年'elif 41 <= age <= 65: return '中年'else:return '老年'

    這里檢查 age 的范圍是否在 0~150 之間,若不是則使用 raise 拋出 ValueError 異常,表示取值錯誤。

    用不為 0——150 的數(shù)字執(zhí)行下函數(shù)看看:

    >>> stage_of_life(-11)
    Traceback (most recent call last):
    ???? File “”, line 1, in
    ???? File “”, line 3, in stage_of_life
    ValueError: 年齡的取值不符合實際,需要在 0 到 150 之間

    >>> stage_of_life(160)
    Traceback (most recent call last):
    ???? File “”, line 1, in
    ???? File “”, line 3, in stage_of_life
    ValueError: 年齡的取值不符合實際,需要在 0 到 150 之間

    總結(jié)

    在 Python 中大多數(shù)情況下,錯誤是以拋出異常的方式報告出來,可以針對潛在的異常來編寫處理代碼。

    可使用 try-except 語句捕獲異常

    異常的捕獲使用 try-except 語句:

    try:代碼塊1 except 異常X as e:代碼塊2

    捕獲多個異常:

    try:代碼塊1 except (異常X, 異常Y, 異常Z) as e:代碼塊2 try:代碼塊1 except 異常X as e:代碼塊2 except 異常Y as e:代碼塊3 except 異常Z as e:代碼塊4

    finally 語句緊接著 try-except 的流程執(zhí)行:

    try:代碼塊1 except 異常X as e:代碼塊2 finally:代碼塊3

    使用 raise 語句可主動拋出異常:

    raise ValueError()

    ?

    定制一個模子——類

    查看數(shù)據(jù)類型

    Python 中內(nèi)置有這么一個函數(shù),通過它可以查看變量或值的數(shù)據(jù)類型,它就是 type()。像這樣來使用:

    type(變量或值)

    執(zhí)行幾個例子看看:

    >>> type(100)
    <class ‘int’>

    >>> type(3.14)
    <class ‘float’>

    >>> type(‘words’)
    <class ‘str’>

    >>> type(True)
    <class ‘bool’>

    >>> type(None)
    <class ‘NoneType’>

    >>> type([1, 2, 3])
    <class ‘list’>

    執(zhí)行的結(jié)果是 <class '類型'> 形式,其中類型的含義是:

    類型含義
    int整數(shù)型
    float浮點型
    str字符串類型
    bool布爾型
    NoneTypeNone 類型
    list列表類型

    上表中的這些數(shù)據(jù)類型,都內(nèi)置在 Python 中。

    那 <class '類型'> 中的 class 是指什么呢?

    ?

    class 是指面向?qū)ο缶幊谭妒街械囊粋€概念——。Python 中的數(shù)據(jù)類型就是類,一個類對應(yīng)一種數(shù)據(jù)類型。類的具體對象中可以保存若干數(shù)據(jù),以及用于操作這些數(shù)據(jù)的若干函數(shù)。

    我們來看一個例子:

    我們常用的字符串類型,就是名為 str 的類。一個 str 中可以保存若干字符,并且針對這些字符提供了一系列的操作函數(shù)。

    如 'hello' 就是一個 str 對象,我們可以把這個對象賦值給變量:

    >>> words = ‘hello’
    >>> words
    ’hello’

    str 對象自帶的 find() 函數(shù),可用于獲取字符的索引:

    >>> words.find(‘e’)
    1

    str 對象自帶的 upper() 函數(shù),可用于獲取英文字符的大寫形式:

    >>> words.upper()
    ‘HELLO’

    除此 str 之外,前面列表中的那些數(shù)據(jù)類型也都是類。

    ?

    類的定義

    像 str、int、list 這樣的類,是被預(yù)先定義好并且內(nèi)置在 Python 中的。

    當(dāng)然,我們也可以自己來定義類。

    類的定義方法是:

    class 類名:代碼塊

    如:

    class A:pass

    這里定義了一個非常簡單的類,名為 A。pass 是占位符,表示什么都不做或什么都沒有。

    ?

    類的實例化

    我們把類看作是自定義的數(shù)據(jù)類型,既然是類型,那么它只能用來表示數(shù)據(jù)的種類,不能直接用于保存數(shù)據(jù)。想要保存數(shù)據(jù),就需要先創(chuàng)建一個屬于這種類型的類似于容器的東西,這種容器就叫做對象(或稱實例)。通過類產(chǎn)生對象的過程叫實例化

    打個比方,類就相當(dāng)于圖紙,對象就相當(dāng)于按照圖紙所生產(chǎn)出來的產(chǎn)品。圖紙能決定產(chǎn)品的內(nèi)部構(gòu)造以及所具有的功能,但圖紙不能替代產(chǎn)品被直接使用。類能決定對象能保存什么樣的數(shù)據(jù),以及能擁有什么樣的函數(shù),但類不直接用來保存數(shù)據(jù)。

    定義好類以后,可以像這樣實例化對象:

    變量 = 類名()

    通過 類名() 這樣類似函數(shù)調(diào)用的方式生成出對象,并將對象賦值給 變量。

    如實例化之前的類 A 并將對象賦值為 a:

    >>> class A:
    …???? pass

    >>> a = A()

    查看變量 a 的類型:

    >>> type(a)
    <class ‘__main__.A’>

    可以看到類型是 __main__.A,表示模塊 __main__ 下的 A 類。模塊的概念后續(xù)章節(jié)中介紹,現(xiàn)在只需關(guān)注類即可。

    可以看看 a 是什么:

    >>> a
    <__main__.A object at 0x103d8e940>

    a 是 A 的對象,位于內(nèi)存的 0x103d8e940 地址。

    ?

    對象屬性

    之前定義的 A 類是一個空的類,像一個空殼子,它的對象 a 并沒有保存任何數(shù)據(jù)。

    想要在對象中保存數(shù)據(jù)該怎么做呢?

    可以像這樣來定義類,實例化的時候就可以用參數(shù)的形式將數(shù)據(jù)傳入,并保存在對象中:

    class 類名:def __init__(self, 數(shù)據(jù)1, 數(shù)據(jù)2, ...):self.數(shù)據(jù)1 = 數(shù)據(jù)1self.數(shù)據(jù)2 = 數(shù)據(jù)2...

    和之前相比類的內(nèi)部多了一個函數(shù) __init__(),__init__() 函數(shù)一方面可以接收要保存在對象中的數(shù)據(jù),另一方面也可以在實例化類的時候做一些初始化工作。

    我們通過實際例子來學(xué)習(xí)。之前介紹的類(數(shù)據(jù)類型)要么保存一個數(shù)據(jù),要么保存多個數(shù)據(jù),假如現(xiàn)在想要一個不多不少只保存兩個數(shù)據(jù)的類,這就需要我們自己來定義了。如下:

    class Pair:def __init__(self, first, second):self.first = firstself.second = second

    我們將這個類命名為 Pair,即表示數(shù)據(jù)對。

    它的 __init__() 函數(shù)有三個參數(shù):

  • 第一個是 self,它是類中函數(shù)默認(rèn)的第一個參數(shù),表示對象自身。我們可以將數(shù)據(jù)賦值給 self.數(shù)據(jù)名,這樣數(shù)據(jù)就保存在對象中了
  • first 是數(shù)據(jù)對的第一個值
  • second 是數(shù)據(jù)對的第二個值
  • 實例化的時候像這樣傳入數(shù)據(jù):

    pair = Pair(10, 20)

    這個過程中會自動調(diào)用 __init__() 函數(shù),并將 10 傳給了 first 參數(shù),將 20 傳給了 second 參數(shù),而 __init__() 的第一個參數(shù) self 是不需要傳值的,Python 會自動填充這個參數(shù)。

    實例化之后我們可以通過 pair 對象來獲取數(shù)據(jù)對中的數(shù)據(jù),像這樣:

    pair.first pair.second

    >>> pair = Pair(10, 20)

    >>> pair.first
    10
    >>> pair.second
    20

    通過 pair = Pair(10, 20) 來實例化 Pair 類,得到對象的變量 pair,使用 pair.first、pair.second 就可以獲得對象中保存的數(shù)據(jù)了。

    first 和 second 叫做 Pair 類的對象屬性,一般也可以直接叫作屬性。

    我們不僅可以通過對象獲取對象屬性的值,也能修改對象屬性值。如:

    >>> pair = Pair(10, 20)

    >>> pair.first = 1000
    1000
    >>> pair.first
    1000

    ?

    對象方法

    剛才在類中定義了對象屬性,也可以在類中定義一些函數(shù)。這樣的函數(shù)可直接由對象調(diào)用,例如我們之前學(xué)過的 list.append() 。

    定義在類中,供對象調(diào)用的函數(shù)稱為對象方法,一般也可以直接叫作方法。定義方式如下:

    class 類名:def 函數(shù)1(self, 參數(shù)1, 參數(shù)2):...

    定義對象方法時第一個參數(shù)默認(rèn)使用 self,定義時必須有這個參數(shù),但是調(diào)用時不必傳遞。之前介紹過的 __init__() 就是一個對象方法,不過是個特殊的對象方法。

    我們在之前 Pair 類的基礎(chǔ)上定義一個方法,功能是交換對象的 first 和 second 屬性的值。來實現(xiàn)一下:

    class Pair:def __init__(self, first, second):self.first = firstself.second = seconddef swap(self):self.first, self.second = self.second, self.first

    這個方法被命名為 swap,無需傳遞參數(shù),內(nèi)部通過

    self.first, self.second = self.second, self.first

    實現(xiàn)了 self.first 和 self.second 兩個值的交換。

    執(zhí)行下看看:

    >>> pair = Pair(10, 20)
    >>> pair.first
    10
    >>> pair.second
    20

    >>> pair.swap()

    >>> pair.first
    20
    >>> pair.second
    10

    ?

    總結(jié)

    定義類的方式是:

    class 類名:代碼塊

    在類中定義方法:

    class 類名:def 方法(self, 參數(shù)1, ...):self.數(shù)據(jù)1 = 數(shù)據(jù)1...

    可以在 __init__ 方法中定義對象屬性,之后在實例化類的時候傳入數(shù)據(jù)。如:

    class Pair:def __init__(self, first, second):self.first = firstself.second = secondpair = Pair(10, 20)

    ?

    更大的代碼盒子——模塊和包

    什么是模塊

    之前介紹過兩種運行 Python 代碼的方式,一種是解釋器的交互模式,另一種是直接運行 Python 代碼文件。

    在 Python 中,每一個 Python 代碼文件就是一個模塊。寫程序時,我們可以將代碼分散在不同的模塊(文件)中,然后在一個模塊里引用另一個模塊的內(nèi)容。

    ?

    模塊的導(dǎo)入

    在一個模塊中引用(導(dǎo)入)另一個模塊,可以使用 import 語句:

    import 模塊名

    這里的模塊名是除去 .py 后綴的文件名稱。如,想要導(dǎo)入模塊 abc.py,只需 import abc。

    import 模塊之后,就可以使用被導(dǎo)入模塊中的名字(變量、函數(shù)類)。方式如下:

    模塊名.變量 模塊名.函數(shù) 模塊名.類

    導(dǎo)入及使用模塊示例

    我們用個例子來試驗下模塊的導(dǎo)入和使用,在這個例子中,農(nóng)民種下果樹,然后等待果樹結(jié)果收獲。

    在同一個目錄下創(chuàng)建兩個模塊:

    tree_farmer # 目錄名|___tree.py # 文件名|___farmer.py # 文件名

    第一個模塊名為 tree.py,內(nèi)容如下:

    import randomfruit_name = ''def harvest():return [fruit_name] * random.randint(1, 9)

    代碼中各個變量和函數(shù)的功能如下:

    • fruit_name 用來保存水果名稱。將在函數(shù) harvest() 中使用;
    • random.randint(1, 9),隨機(jī)生成 1~9 中的一個數(shù);
    • [fruit_name] * 數(shù)字,該形式是將列表項重復(fù)若干遍。比如執(zhí)行 ['X'] * 3 將得到 ['X', 'X', 'X'];
    • 總體而言,harvest() 函數(shù)返回一個包含 1~9 個列表項的列表,其中每個項都是 fruit_name 的值。

    第二個模塊名為 farmer.py,內(nèi)容如下:

    import treeprint('種下一棵果樹。') tree.fruit_name = 'apple'print('等啊等,樹長大了,可以收獲了!') fruits = tree.harvest() print(fruits)

    代碼中,

    • 第一行用 import tree 將 tree.py 模塊導(dǎo)入進(jìn)來(使用 import 導(dǎo)入時不需要寫 .py 后綴);
    • 導(dǎo)入 tree 模塊后,就可以使用其中的變量和函數(shù)了。將 tree.fruit_name 設(shè)置為 apple,調(diào)用 tree.harvest() 來收獲 apple。

    執(zhí)行下模塊 farmer.py 看看:

    ? ~ python3 farmer.py
    種下一棵果樹。
    等啊等,樹長大了,可以收獲了!
    [‘a(chǎn)pple’, ‘a(chǎn)pple’, ‘a(chǎn)pple’, ‘a(chǎn)pple’]

    說明:apple 隨機(jī)出現(xiàn) 1~9 個,所以你的結(jié)果可能和這里不一樣。

    可以看到,執(zhí)行 farmer.py 時,由于 tree.py 模塊被導(dǎo)入,所以可以在 farmer.py 中使用 tree.py 的內(nèi)容。

    標(biāo)準(zhǔn)庫模塊的導(dǎo)入

    上面的例子中,我們自己定義了模塊,然后在其它模塊中使用它。其中有個地方不知道你有沒有注意到,tree.py 的第一行代碼是 import random,random 并不是我們所定義的模塊,那它是從哪里來的呢?

    random 是標(biāo)準(zhǔn)庫中的一個模塊。標(biāo)準(zhǔn)庫是由 Python 官方開發(fā)的代碼庫,和解釋器一起打包分發(fā),其中包含非常多實用的模塊,我們在使用時直接 import 進(jìn)來即可。

    ?

    執(zhí)行模塊時傳入?yún)?shù)

    剛才我們用這種方式來執(zhí)行模塊:

    python3 模塊文件名

    其實我們還可以進(jìn)一步將參數(shù)傳遞到模塊中去,像這樣:

    python3 模塊文件名 參數(shù)1 ...參數(shù)n

    參數(shù)傳遞到模塊中以后,我們可以通過 sys 模塊來取出這些參數(shù),參數(shù)放在 sys.argv 列表中:

    import sys模塊文件名 = sys.argv[0] 參數(shù)1 = sys.argv[1] 參數(shù)N = sys.argv[N]

    首先需要導(dǎo)入 sys 模塊,這是個標(biāo)準(zhǔn)庫中的模塊。sys.argv 是個列表,執(zhí)行模塊時被傳遞進(jìn)來的參數(shù)保存在其中,它的列表項分別為:

    • sys.argv[0] 保存當(dāng)前被執(zhí)行模塊的文件名
    • sys.argv[1] 保存第 1 個參數(shù)
    • sys.argv[2] 保存第 2 個參數(shù)
    • 依次類推

    之前種果樹那個例子中,farmer.py 固定種蘋果樹,我們可以改進(jìn)一下,具體種什么樹由傳遞的模塊參數(shù)來決定。

    修改 farmer.py 的代碼,內(nèi)容如下:

    import sys # 新增 import treeprint('種下一棵果樹。') tree.fruit_name = sys.argv[1] # 將 'apple' 改為 參數(shù) sys.argv[1]print('等啊等,樹長大了,可以收獲了!') fruits = tree.harvest() print(fruits)

    以「banana」為例執(zhí)行下看看:

    ? ~ python3 farmer.py banana
    種下一棵果樹。
    等啊等,樹長大了,可以收獲了!
    [‘banana’, ‘banana’, ‘banana’]

    在這個例子中 sys.argv 的值是:

    • sys.argv[0]: farmer.py
    • sys.argv[1]: banana

    ?

    什么是包

    之前我們將定義的兩個模塊放在同一目錄下,然后通過 import 語句來相互引用,這是一種扁平的模塊組織結(jié)構(gòu),當(dāng)模塊數(shù)量很大的時候就很不靈活了,也難以維護(hù)。

    Python 中可以用文件樹這樣的樹形結(jié)構(gòu)來組織模塊,這種組織形式下的模塊集合稱為(Package)。

    比如包的結(jié)構(gòu)可以是這樣的:

    包/ ├── __init__.py ├── 模塊1.py ├── 模塊2.py ├── 子包1/├── __init__.py├── 模塊3.py└── 模塊4.py └── 子包2/├── __init__.py├── 模塊5.py└── 孫子包1/├── __init__.py└── 模塊6.py

    這是個很明顯的層級結(jié)構(gòu)——包里面包含子包、子包包含孫子包…… 單獨將子包或?qū)O子包拿出來,它們也是包。

    包的存在形式是目錄,模塊的存在形式是目錄下的文件。所以我們可以很容易地構(gòu)造出這樣一個包,只要在文件系統(tǒng)中創(chuàng)建相應(yīng)的目錄和文件即可。

    需要注意的是,每個層級的包下都需要有一個 __init__.py 模塊。這是因為只有當(dāng)目錄中存在 __init__.py 時,Python 才會把這個目錄當(dāng)作包。

    ?

    包的導(dǎo)入

    導(dǎo)入包中模塊的方法是:

    import 包.子包.模塊

    從最頂層的包開始依次向下引用子包,直至目標(biāo)模塊。

    如,從上面示例的包結(jié)構(gòu)中,

    導(dǎo)入 模塊1.py,使用:

    import 包.模塊1

    導(dǎo)入 模塊3.py,使用:

    import 包.子包1.模塊3

    導(dǎo)入 模塊6.py,使用:

    import 包.子包2.孫子包1.模塊6

    ?

    為什么需要模塊和包

    模塊的存在是為了更好的組織代碼。將不同功能的代碼分散在不同模塊中,清晰地劃分出各個模塊的職責(zé),有利于使用和維護(hù)代碼,同時也可避免模塊中的內(nèi)容過長。

    包的存在是為了更好的組織模塊。與模塊同理,包在更高的抽象層次上組織著代碼。

    ?

    總結(jié)

    模塊可以更好的組織代碼,它的存在形式是文件。包的可以更好的組織模塊,它的存在形式是目錄。

    導(dǎo)入模塊使用 import 語句:

    import 模塊名

    導(dǎo)入包下的模塊:

    import 包名.模塊名

    模塊導(dǎo)入后,可以使用該模塊中所定義的名字(變量、函數(shù)類)。方式如下:

    模塊名.變量 模塊名.函數(shù) 模塊名.類

    ?

    練習(xí)——密碼生成器

    學(xué)習(xí)編程一定要多加練習(xí),只靠單純地閱讀是無法真正掌握編程方法的,只有反復(fù)練習(xí)才能真正領(lǐng)悟編程思想。我們已經(jīng)學(xué)習(xí)了一些 Python 知識了,說多不多說少也不少,是時候來運用一下了。

    開始之前我們先來聊聊賬號的話題。當(dāng)今互聯(lián)網(wǎng)十分普及,大家一定注冊了很多 APP 和網(wǎng)站吧,大大小小的賬號少則十幾個多則可能數(shù)十個。大家的密碼是都怎么設(shè)置的呢,所有賬號用的是同一個密碼嗎?

    所有賬號用同一個密碼是件很危險的事,一個平臺上的賬號泄漏了,有可能殃及其它平臺。安全的做法是每個平臺使用單獨的密碼,并且密碼間的關(guān)聯(lián)性盡可能的小,這樣就算一個密碼泄漏了也不會將影響擴(kuò)大。

    每個平臺都使用一個單獨的密碼,并且密碼間的關(guān)聯(lián)性盡要可能的小,那十幾個甚至幾十個平臺的密碼要怎么來取呢?我們可以用密碼自動生成器呀,現(xiàn)在就來動手做一個!

    ?

    密碼生成器要求

    我們對密碼生成器的要求是:

  • 密碼需要隨機(jī)生成
  • 至少包含一個大寫字母(A~Z)
  • 至少包含一個小寫字母(a~z)
  • 至少包含一個數(shù)字(0~9)
  • 至少包含一個特殊字符(~!@#$%^&*)
  • 長度可以自由設(shè)置,范圍是 8~20
  • 通過命令行進(jìn)行交互,如設(shè)置密碼長度
  • ?

    實現(xiàn)思路

    要求有了,怎么來實現(xiàn)呢?

    實現(xiàn)方法非常多,不同的人有不同的思路。在這里我們一起來分析吧。

    • 首先,隨機(jī)生成 N 位密碼——換一種角度這其實相當(dāng)于,準(zhǔn)備好大寫字母集合、小寫字母集合、數(shù)字集合和特殊字符集合,從中隨機(jī)挑出 N 個字符,然后將它們排成一排。你看,這樣我們不就將一個籠統(tǒng)的需求轉(zhuǎn)化成了可以用編程來解決的實際問題了嗎?
    • 其次,密碼至少要包含一個大寫字母、一個小寫字母、一個數(shù)字、一個特殊字符,且可指定密碼長度——要滿足這個要求,有個簡單的辦法,我們從頭開始,密碼第一位放
      大寫字母,第二位放小寫字母,第三位放數(shù)字,第四位放特殊字符,剩余的 N - 4 個字符就依次放任意的字符。
    • 再次,要解決從字符集合中隨機(jī)取字符的問題——我們之前學(xué)習(xí)過 random.randint() 函數(shù),它可以隨機(jī)生成一個數(shù)字,我們就將這個隨機(jī)數(shù)字當(dāng)作索引去字符集合中取值(字符集合可以是 str 或 list 形式),這樣就達(dá)到了隨機(jī)從字符集合中取字符的目的。
    • 最后,通過命令行交互接收密碼長度,這個比較簡單,使用 input() 即可。

    ?

    實現(xiàn)

    經(jīng)過剛才的分析,我們可以將這個程序劃分為三個主要部分:

  • 命令行交互部分:進(jìn)行命令行交互、接收輸入?yún)?shù)
  • 隨機(jī)字符生成部分:可隨機(jī)生成一個大寫字母,或一個小寫字母,或一個數(shù)字,或一個特殊字符,或一個任意字符
  • 密碼邏輯部分:按照密碼長度,操作「隨機(jī)字符生成部分」來生成全部密碼
  • 這三個部分各司其職,共同構(gòu)成我們的密碼生成器。

    我們完全可以只用我們之前學(xué)習(xí)過的那些知識,來實現(xiàn)這三個部分,并完整地構(gòu)建整個程序。

    命令行交互部分的實現(xiàn)

    程序被執(zhí)行后,首先給出提示信息要求用戶指定密碼長度,然后接收用戶所輸入的值,并判斷值是否符合要求。

    實現(xiàn)如下:

    password_length = input('請輸入密碼長度(8~20):') password_length = int(password_length)if password_length < 8 or password_length > 20:raise ValueError('密碼長度不符')

    獲取到密碼長度以后,就該使用「密碼邏輯部分」來進(jìn)一步完成工作,在這里我們把「密碼邏輯部分」封裝成一個函數(shù),只需調(diào)用它就可以獲取到想要的密碼。也就是下面代碼中的 generate_password() 函數(shù)。

    password = generate_password(password_length) print(password)

    對于「命令行交互部分」而言,它不需要知道「密碼邏輯部分」中的實現(xiàn)細(xì)節(jié),只要調(diào)用「密碼邏輯部分」能獲取到密碼就足夠了。

    密碼邏輯部分的實現(xiàn)

    「密碼邏輯部分」是一個函數(shù),它以密碼長度作為參數(shù),返回我們所要的隨機(jī)密碼。

    它生成密碼的策略是,先隨機(jī)生成一個大寫字母,以此作為起始密碼;再生成一小寫字母,追加到密碼末尾;再生成一個數(shù)字,追加到密碼末尾;再生成一個特殊字符,追加到密碼末尾。這樣就擁有 4 位密碼了,且滿足包含大寫字母、小寫字母、數(shù)字、特殊字符的要求。密碼剩余的幾位,依次隨機(jī)取任意字符并追加到密碼末尾。

    上述生成隨機(jī)字符的功能將由「隨機(jī)字符生成部分」提供,我們將「隨機(jī)字符生成部分」封裝成 RandomChar 類,并單獨放置在 randomchar 模塊中。使用 RandomChar 類對象的方法即可獲取隨機(jī)字符:

    • 獲取大寫字母: random_char.uppercase()
    • 獲取小寫字母: random_char.lowercase()
    • 獲取數(shù)字: random_char.digit()
    • 獲取特殊字符: random_char.special()
    • 獲取上述任意一種字符:random_char.anyone()

    無需在這個層面上關(guān)心 RandomChar 類對象是怎么做到獲取隨機(jī)字符的,對當(dāng)前這個部分來講這并不重要,重要的是如何運用其它部分的能力來達(dá)到當(dāng)前部分的目的。

    我們來實現(xiàn)整個「密碼邏輯部分」:

    def generate_password(length):if length < 4:raise ValueError('密碼至少為 4 位')random_char = randomchar.RandomChar()password = random_char.uppercase() # 用一個隨機(jī)的大寫字符作為起始密碼password += random_char.lowercase() # 將一個隨機(jī)的小寫字符拼接在密碼末尾password += random_char.digit() # 將一個隨機(jī)的數(shù)字拼接在密碼末尾password += random_char.special() # 將一個隨機(jī)的特殊字符拼接在密碼末尾count = 5 # 此時的密碼長度為 4,再向后拼接要從第 5 位開始,所以 count 為 5。while count <= length: # 如果 count 大于密碼長度則退出循環(huán)password += random_char.anyone() # 隨機(jī)取出一個字符拼接在密碼末尾count += 1return password

    上面代碼中以 # 號開頭的代碼,稱為注釋,如 # 用一個隨機(jī)的大寫字符作為起始密碼。注釋用于對代碼作注解,只是寫給代碼閱讀者看的,并不會被解釋器執(zhí)行。注釋的范圍是 # 及其之后的該行的所有字符。

    隨機(jī)字符生成部分的實現(xiàn)

    「隨機(jī)字符生成部分」被封裝成 RandomChar 類,并單獨放置在 randomchar 模塊中,使用它的對象方法即可獲取隨機(jī)字符。

    我們需要先準(zhǔn)備好各類字符的完整集合,這里采用字符串的形式存放:

    • 大寫字母:'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    • 小寫字母:'abcdefghijklmnopqrstuvwxyz'
    • 數(shù)字:'0123456789'
    • 特殊字符:'~!@#$%^&*'

    可以把這些字符串分別保存在對象屬性中:

    class RandomChar:def __init__(self):self.all_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'self.all_lowercase = 'abcdefghijklmnopqrstuvwxyz'self.all_digits = '0123456789'self.all_specials = '~!@#$%^&*'

    再來準(zhǔn)備一個方法 pick_random_item(),這個方法接受一個字符串作為參數(shù),隨機(jī)返回這個字符串中的一個字符。其內(nèi)部可以使用 random.randint() 隨機(jī)生成一個數(shù)字,然后把這個隨機(jī)數(shù)字當(dāng)作索引去字符串中取值,以此生成隨機(jī)字符。

    pick_random_item() 方法實現(xiàn)如下:

    def pick_random_item(self, sequence):random_int = random.randint(0, len(sequence) - 1) # 調(diào)用 random.randint() 生成一個隨機(jī)數(shù)字作為索引去字符串中取值,因為隨機(jī)生成的數(shù)字不可超過字符串長度,所以取值范圍為 0, len(sequence) - 1。return sequence[random_int]

    有了上面這個從任意字符串中隨機(jī)取值的功能,我們就可以把它應(yīng)用到大寫字母、小寫字母、數(shù)字、特殊字符的集合(字符串形式)中去,這樣就可以隨機(jī)獲取這四種字符了。

    分別對應(yīng)四個方法:

    def uppercase(self):return self.pick_random_item(self.all_uppercase) # 調(diào)用 pick_random_item 隨機(jī)從 all_uppercase 字符串中取出一個大寫字母def lowercase(self):return self.pick_random_item(self.all_lowercase) # 調(diào)用 pick_random_item 隨機(jī)從 all_lowercase 字符串中取出一個小寫字母def digit(self):return self.pick_random_item(self.all_digits) # 調(diào)用 pick_random_item 隨機(jī)從 all_digits 字符串中取出一個數(shù)字def special(self):return self.pick_random_item(self.all_specials) # 調(diào)用 pick_random_item 隨機(jī)從 all_specials 字符串中取出一個特殊字符

    最后還有需要一個不區(qū)分上述字符種類,隨機(jī)取任意字符的對象方法。

    我們可以把大寫字母、小寫字母、數(shù)字、特殊字符的集合拼接在一起,形成一個更大的集合,然后隨機(jī)從中取值。

    可隨機(jī)取任意字符的 anyone() 方法如下:

    def anyone(self):# 將四種字符拼接在一起,形成一個大字符串 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*',然后調(diào)用 pick_random_item 方法從中隨機(jī)取出一個字符。return self.pick_random_item(self.all_uppercase + self.all_lowercase + self.all_digits + self.all_specials)

    至此就全部實現(xiàn)完了,大功告成!

    整個程序的調(diào)用鏈?zhǔn)?#xff1a;「命令行交互部分」->「密碼邏輯部分」->「隨機(jī)字符生成部分」。每一個部分各司其職,共同完成這個程序。

    ?

    完整代碼

    我們的代碼位于兩個模塊中。

    「命令行交互部分」和「密碼邏輯部分」位于 password_generator.py 模塊,完整代碼如下:

    password_generator.py

    import randomchardef generate_password(length):if length < 4:raise ValueError('密碼至少為 4 位')random_char = randomchar.RandomChar()password = random_char.uppercase()password += random_char.lowercase()password += random_char.digit()password += random_char.special()count = 5while count <= length:password += random_char.anyone()count += 1return passwordpassword_length = input('請輸入密碼長度(8~20):') password_length = int(password_length)if password_length < 8 or password_length > 20:raise ValueError('密碼長度不符')password = generate_password(password_length) print(password)

    「隨機(jī)字符生成部分」位于 randomchar.py 模塊,完整代碼如下:

    randomchar.py

    import randomclass RandomChar:def __init__(self):self.all_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'self.all_lowercase = 'abcdefghijklmnopqrstuvwxyz'self.all_digits = '0123456789'self.all_specials = '~!@#$%^&*'def pick_random_item(self, sequence):random_int = random.randint(0, len(sequence) - 1)return sequence[random_int]def uppercase(self):return self.pick_random_item(self.all_uppercase)def lowercase(self):return self.pick_random_item(self.all_lowercase)def digit(self):return self.pick_random_item(self.all_digits)def special(self):return self.pick_random_item(self.all_specials)def anyone(self):return self.pick_random_item(self.all_uppercase + self.all_lowercase + self.all_digits + self.all_specials)

    ?

    運行示例

    來執(zhí)行一下程序看看:

    ? ~ python3 password_generator.py
    請輸入密碼長度(8~20):16
    Aw6~8a3$AeAo4kSN

    ?

    補(bǔ)充說明

    為了可以僅利用之前學(xué)過的知識來實現(xiàn)這個程序,這里放棄了一些更簡潔或更恰當(dāng)?shù)?Python 用法。比如

    • 循環(huán)若干次這里用了 while 循環(huán),可以使用 for _ in range(x) 的方式替代
    • 把隨機(jī)數(shù)字當(dāng)作索引然后從字符串中取值,可以直接使用 random.choice() 函數(shù)替代
    • RandomChar 中的對象屬性和對象方法,可直接定義成類屬性和類方法
    • ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’ 這類字符集合不需要手工書寫,使用 string 模塊即可獲取,如 string.ascii_uppercase

    大家若有興趣可以自己改進(jìn)這個程序。

    高級的用法和概念將會在之后章節(jié)中介紹,不過值得一提的是,樸素的方法也是有價值的!

    ?

    在學(xué)習(xí)中有疑問或者不懂的地方歡迎小伙伴評論留言!

    之后持續(xù)為大家更新Python入門及進(jìn)階技術(shù)分享!

    覺得有用的小伙伴記得點贊關(guān)注喲!

    灰小猿陪你一起進(jìn)步!

    同時給大家推薦一個CSDN官方的Python全棧知識圖譜學(xué)習(xí)路線,涵蓋Python六大模塊,100+知識點,內(nèi)容梳理全面,難點,痛點羅列齊全,可以說這本知識圖譜上的每一句話,都價值千金,這是CSDN聯(lián)合6位一線Python工程師,花費3個月反復(fù)打磨,旨在幫助大家Python知識體系,具備實戰(zhàn)經(jīng)驗,破解開發(fā)和面試難題!非常適合學(xué)習(xí)Python的小伙伴們!原價129,CSDN官方限時限量29元!

    總結(jié)

    以上是生活随笔為你收集整理的【全网力荐】堪称最易学的Python基础入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    欧洲欧美人成视频在线 | 无码人妻精品一区二区三区下载 | 无码国产激情在线观看 | 精品一二三区久久aaa片 | 亚洲欧美精品aaaaaa片 | 国产亚洲视频中文字幕97精品 | 欧洲美熟女乱又伦 | 98国产精品综合一区二区三区 | 精品国产aⅴ无码一区二区 | 啦啦啦www在线观看免费视频 | 狂野欧美性猛xxxx乱大交 | 成人免费视频视频在线观看 免费 | 国产网红无码精品视频 | 久久精品女人天堂av免费观看 | 欧美性猛交xxxx富婆 | 日产国产精品亚洲系列 | 内射老妇bbwx0c0ck | 久久午夜无码鲁丝片午夜精品 | 国产成人一区二区三区在线观看 | 国产精品久久久久久亚洲影视内衣 | 国产成人一区二区三区在线观看 | 国产 精品 自在自线 | 老熟妇乱子伦牲交视频 | 亚洲a无码综合a国产av中文 | 欧美成人高清在线播放 | 曰本女人与公拘交酡免费视频 | 牲欲强的熟妇农村老妇女 | 乱人伦中文视频在线观看 | 国产精品无码一区二区三区不卡 | 亚洲日韩精品欧美一区二区 | 日本一卡二卡不卡视频查询 | 中文字幕乱码人妻无码久久 | 76少妇精品导航 | 久久久久久亚洲精品a片成人 | 久久精品女人的天堂av | 国产精品第一区揄拍无码 | 人人妻人人澡人人爽欧美精品 | 久久久久成人精品免费播放动漫 | 麻豆精品国产精华精华液好用吗 | 国产精品无码一区二区三区不卡 | 国产特级毛片aaaaaaa高清 | 麻豆国产丝袜白领秘书在线观看 | 亚洲欧洲日本综合aⅴ在线 | 国内揄拍国内精品人妻 | 美女黄网站人色视频免费国产 | 欧美日本精品一区二区三区 | 精品国产一区二区三区av 性色 | 蜜桃视频插满18在线观看 | 特级做a爰片毛片免费69 | 国产精品久久国产三级国 | 久久久久国色av免费观看性色 | 久久久中文字幕日本无吗 | 欧美亚洲国产一区二区三区 | 2019午夜福利不卡片在线 | 人人妻人人澡人人爽欧美一区 | 波多野结衣av一区二区全免费观看 | 精品乱子伦一区二区三区 | 久久久久av无码免费网 | 精品国产精品久久一区免费式 | 欧美黑人巨大xxxxx | 日本爽爽爽爽爽爽在线观看免 | 国产激情精品一区二区三区 | www国产精品内射老师 | 人人澡人摸人人添 | 高潮毛片无遮挡高清免费 | 亚洲精品国偷拍自产在线麻豆 | 亚洲国产日韩a在线播放 | 丝袜 中出 制服 人妻 美腿 | 天天摸天天透天天添 | 天天拍夜夜添久久精品大 | 亚洲伊人久久精品影院 | 99久久人妻精品免费二区 | 未满成年国产在线观看 | 人人爽人人澡人人人妻 | 乌克兰少妇性做爰 | 欧美人与善在线com | 自拍偷自拍亚洲精品被多人伦好爽 | 又大又硬又黄的免费视频 | 色综合久久88色综合天天 | 国内精品九九久久久精品 | 成人免费视频视频在线观看 免费 | 亚洲成av人在线观看网址 | 一个人看的www免费视频在线观看 | 精品国产青草久久久久福利 | 300部国产真实乱 | 无码人妻丰满熟妇区五十路百度 | 天天摸天天碰天天添 | 国产午夜福利亚洲第一 | 在线视频网站www色 | 性欧美疯狂xxxxbbbb | 亚洲男人av天堂午夜在 | 欧美刺激性大交 | 少妇无码av无码专区在线观看 | 高潮毛片无遮挡高清免费视频 | 日本一卡2卡3卡四卡精品网站 | 18无码粉嫩小泬无套在线观看 | av无码久久久久不卡免费网站 | 久久综合网欧美色妞网 | 亚洲无人区一区二区三区 | 欧美成人家庭影院 | 97精品人妻一区二区三区香蕉 | 中文精品无码中文字幕无码专区 | 伊人久久大香线焦av综合影院 | 国产精品鲁鲁鲁 | 亚洲va欧美va天堂v国产综合 | 亚洲熟妇色xxxxx欧美老妇 | 久久99精品久久久久久 | 中文字幕乱码人妻二区三区 | 激情爆乳一区二区三区 | 国内少妇偷人精品视频免费 | 久激情内射婷内射蜜桃人妖 | 无码免费一区二区三区 | 国产无av码在线观看 | 色 综合 欧美 亚洲 国产 | 国产av一区二区精品久久凹凸 | 日韩av无码一区二区三区 | 欧美精品国产综合久久 | 亚洲另类伦春色综合小说 | 久激情内射婷内射蜜桃人妖 | 色诱久久久久综合网ywww | 樱花草在线播放免费中文 | 黑森林福利视频导航 | 日韩欧美群交p片內射中文 | 爽爽影院免费观看 | 日日天日日夜日日摸 | 午夜精品一区二区三区的区别 | 国产精品美女久久久久av爽李琼 | 亚洲欧美精品aaaaaa片 | 色综合天天综合狠狠爱 | 一本久久a久久精品vr综合 | 人妻天天爽夜夜爽一区二区 | 亚洲男女内射在线播放 | 日韩欧美群交p片內射中文 | 久久久久亚洲精品男人的天堂 | 久久精品一区二区三区四区 | 爽爽影院免费观看 | 日产精品高潮呻吟av久久 | 超碰97人人射妻 | 久久久www成人免费毛片 | а√天堂www在线天堂小说 | 少妇高潮一区二区三区99 | 大地资源中文第3页 | 国产午夜亚洲精品不卡下载 | 日韩精品乱码av一区二区 | 精品无人国产偷自产在线 | 久9re热视频这里只有精品 | 欧美日韩一区二区综合 | 丰满岳乱妇在线观看中字无码 | 自拍偷自拍亚洲精品10p | 少妇久久久久久人妻无码 | www一区二区www免费 | 熟妇人妻中文av无码 | 国产成人无码av片在线观看不卡 | 狠狠cao日日穞夜夜穞av | 欧美国产日韩亚洲中文 | 欧美精品一区二区精品久久 | 成人女人看片免费视频放人 | 欧美日韩人成综合在线播放 | 亚洲s码欧洲m码国产av | 国产一区二区三区影院 | 在线观看免费人成视频 | 亚洲成色在线综合网站 | 国产香蕉尹人视频在线 | 天堂久久天堂av色综合 | 国产手机在线αⅴ片无码观看 | 性欧美牲交xxxxx视频 | 丝袜人妻一区二区三区 | 亚洲人成网站在线播放942 | 牲交欧美兽交欧美 | 国产精品人人爽人人做我的可爱 | 国产又爽又猛又粗的视频a片 | 国精产品一品二品国精品69xx | 欧美日韩一区二区免费视频 | 蜜臀av无码人妻精品 | 无码av免费一区二区三区试看 | 青草青草久热国产精品 | 国产成人精品优优av | 性做久久久久久久免费看 | 人人妻人人澡人人爽人人精品浪潮 | 日日麻批免费40分钟无码 | 欧美国产日韩久久mv | 国产精品成人av在线观看 | 18无码粉嫩小泬无套在线观看 | 免费观看激色视频网站 | 久久久久99精品国产片 | 骚片av蜜桃精品一区 | 无码av最新清无码专区吞精 | 亚洲色在线无码国产精品不卡 | 久久精品人妻少妇一区二区三区 | 一个人免费观看的www视频 | 精品偷自拍另类在线观看 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产内射爽爽大片视频社区在线 | 欧美兽交xxxx×视频 | 97色伦图片97综合影院 | 久久精品丝袜高跟鞋 | 亚洲熟妇色xxxxx欧美老妇 | 久久久精品国产sm最大网站 | 日本护士毛茸茸高潮 | 激情五月综合色婷婷一区二区 | 国产精品无码一区二区三区不卡 | 狠狠色噜噜狠狠狠7777奇米 | 久久99精品久久久久久动态图 | 国产人妻精品一区二区三区不卡 | 成人av无码一区二区三区 | 亚洲中文字幕va福利 | 亚洲一区av无码专区在线观看 | 嫩b人妻精品一区二区三区 | 欧美日韩在线亚洲综合国产人 | 国产午夜手机精彩视频 | 亚洲经典千人经典日产 | 成人精品视频一区二区 | 高中生自慰www网站 | 欧美一区二区三区视频在线观看 | 久久精品女人的天堂av | 成人免费视频在线观看 | 扒开双腿疯狂进出爽爽爽视频 | 日本丰满护士爆乳xxxx | 国内精品一区二区三区不卡 | 日本大香伊一区二区三区 | 麻豆成人精品国产免费 | 国内精品一区二区三区不卡 | 无码人妻丰满熟妇区五十路百度 | 精品国精品国产自在久国产87 | 欧美freesex黑人又粗又大 | 99久久精品日本一区二区免费 | 亚洲日韩av一区二区三区四区 | 精品欧美一区二区三区久久久 | 亚洲欧美精品伊人久久 | 国产麻豆精品一区二区三区v视界 | 成人亚洲精品久久久久软件 | 国产激情无码一区二区 | 伊人色综合久久天天小片 | 国产人妻精品一区二区三区 | 熟妇人妻无码xxx视频 | 天堂а√在线地址中文在线 | 国产亚洲美女精品久久久2020 | 国产乱人伦av在线无码 | 久久www免费人成人片 | 亚洲最大成人网站 | 少妇厨房愉情理9仑片视频 | 国产在线一区二区三区四区五区 | 国产肉丝袜在线观看 | 十八禁视频网站在线观看 | 亚洲国产精品无码久久久久高潮 | 久青草影院在线观看国产 | 人妻体内射精一区二区三四 | 伊人久久大香线蕉亚洲 | 国产人妻大战黑人第1集 | 动漫av一区二区在线观看 | 欧美人与禽zoz0性伦交 | 在线播放免费人成毛片乱码 | 中文字幕无线码免费人妻 | 一本无码人妻在中文字幕免费 | 久久97精品久久久久久久不卡 | 亚洲经典千人经典日产 | 免费看少妇作爱视频 | 成人欧美一区二区三区黑人免费 | 亚洲精品成人福利网站 | 丰满诱人的人妻3 | 国内精品人妻无码久久久影院 | 2020久久香蕉国产线看观看 | 女人被爽到呻吟gif动态图视看 | 亚洲精品国产精品乱码不卡 | 精品亚洲成av人在线观看 | 国产一区二区三区影院 | 亚洲成a人一区二区三区 | 亚欧洲精品在线视频免费观看 | 午夜肉伦伦影院 | 性欧美疯狂xxxxbbbb | 色 综合 欧美 亚洲 国产 | 狠狠cao日日穞夜夜穞av | 欧美真人作爱免费视频 | 亚洲精品一区二区三区大桥未久 | 少妇厨房愉情理9仑片视频 | 久久精品视频在线看15 | 国产黑色丝袜在线播放 | 成人免费视频视频在线观看 免费 | 久久久中文字幕日本无吗 | 大乳丰满人妻中文字幕日本 | 97人妻精品一区二区三区 | 日日躁夜夜躁狠狠躁 | 天天拍夜夜添久久精品大 | 精品一区二区三区无码免费视频 | 老司机亚洲精品影院 | av人摸人人人澡人人超碰下载 | 丰满少妇熟乱xxxxx视频 | 中文字幕乱码人妻无码久久 | 欧美性猛交xxxx富婆 | 国产精品怡红院永久免费 | 秋霞成人午夜鲁丝一区二区三区 | 久久久久成人精品免费播放动漫 | 人妻尝试又大又粗久久 | 欧美丰满少妇xxxx性 | 精品成人av一区二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 国产超碰人人爽人人做人人添 | 亚洲日韩中文字幕在线播放 | 婷婷五月综合激情中文字幕 | 成人精品视频一区二区三区尤物 | 国产精品亚洲专区无码不卡 | 久久久精品欧美一区二区免费 | 黑森林福利视频导航 | 又大又黄又粗又爽的免费视频 | 国产sm调教视频在线观看 | 最新国产乱人伦偷精品免费网站 | 一二三四在线观看免费视频 | 又黄又爽又色的视频 | 免费无码av一区二区 | 乱人伦人妻中文字幕无码 | 国产区女主播在线观看 | 日本乱人伦片中文三区 | 无码纯肉视频在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 波多野42部无码喷潮在线 | 日本一本二本三区免费 | 久久久久人妻一区精品色欧美 | 自拍偷自拍亚洲精品被多人伦好爽 | 妺妺窝人体色www在线小说 | 亚洲熟妇色xxxxx欧美老妇y | 在线播放亚洲第一字幕 | 国产黑色丝袜在线播放 | 久久zyz资源站无码中文动漫 | 婷婷综合久久中文字幕蜜桃三电影 | 在线观看欧美一区二区三区 | 亚洲精品综合一区二区三区在线 | 亚洲阿v天堂在线 | 国产精品久久久久久亚洲影视内衣 | 中文字幕无码日韩欧毛 | 日本乱人伦片中文三区 | 黑人大群体交免费视频 | 久久久精品国产sm最大网站 | 欧美丰满熟妇xxxx性ppx人交 | 日本www一道久久久免费榴莲 | 欧美变态另类xxxx | www国产精品内射老师 | 久久综合激激的五月天 | 波多野结衣乳巨码无在线观看 | 377p欧洲日本亚洲大胆 | 扒开双腿吃奶呻吟做受视频 | 精品乱码久久久久久久 | 乱码av麻豆丝袜熟女系列 | 又湿又紧又大又爽a视频国产 | 国产精品视频免费播放 | 久青草影院在线观看国产 | 99久久精品国产一区二区蜜芽 | 欧美兽交xxxx×视频 | 成人试看120秒体验区 | 午夜无码人妻av大片色欲 | 日韩精品无码一本二本三本色 | 亚洲国产精品一区二区第一页 | 水蜜桃亚洲一二三四在线 | 少妇被粗大的猛进出69影院 | 欧美成人免费全部网站 | 久久久久99精品成人片 | 亚洲国产欧美日韩精品一区二区三区 | 伊人久久大香线焦av综合影院 | 久久国内精品自在自线 | 亚洲精品综合一区二区三区在线 | 国产亚洲tv在线观看 | 久久久久se色偷偷亚洲精品av | 无人区乱码一区二区三区 | 国产真实乱对白精彩久久 | 亚洲日本在线电影 | 日韩精品一区二区av在线 | 俄罗斯老熟妇色xxxx | 成人无码精品一区二区三区 | 免费观看激色视频网站 | 欧美阿v高清资源不卡在线播放 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品丝袜黑色高跟鞋 | 少妇厨房愉情理9仑片视频 | 精品午夜福利在线观看 | 国产无av码在线观看 | 久久人妻内射无码一区三区 | 一本久道高清无码视频 | 蜜臀aⅴ国产精品久久久国产老师 | 国产精品18久久久久久麻辣 | 久久午夜无码鲁丝片 | 精品久久久无码中文字幕 | 免费观看黄网站 | 无码帝国www无码专区色综合 | 老太婆性杂交欧美肥老太 | 欧美成人免费全部网站 | 中文字幕乱码亚洲无线三区 | 久久久亚洲欧洲日产国码αv | 精品乱子伦一区二区三区 | 国产凸凹视频一区二区 | 中国女人内谢69xxxxxa片 | 又大又硬又黄的免费视频 | 宝宝好涨水快流出来免费视频 | 日本一区二区更新不卡 | 成人毛片一区二区 | 人人妻人人澡人人爽欧美精品 | 美女张开腿让人桶 | 乱人伦中文视频在线观看 | 国产精品毛片一区二区 | 一个人看的视频www在线 | 色五月五月丁香亚洲综合网 | 麻豆av传媒蜜桃天美传媒 | 国产手机在线αⅴ片无码观看 | 成人欧美一区二区三区 | 99久久久无码国产精品免费 | 欧美人与禽猛交狂配 | 成人动漫在线观看 | 国产亚洲精品精品国产亚洲综合 | 免费无码一区二区三区蜜桃大 | 日本一本二本三区免费 | 久久亚洲日韩精品一区二区三区 | 日韩精品无码一区二区中文字幕 | 男人的天堂av网站 | 中文字幕无码乱人伦 | 荫蒂被男人添的好舒服爽免费视频 | 少妇一晚三次一区二区三区 | 极品尤物被啪到呻吟喷水 | 亚洲第一网站男人都懂 | 久久无码中文字幕免费影院蜜桃 | 丰满妇女强制高潮18xxxx | 午夜精品一区二区三区的区别 | 国产精品久久国产精品99 | 亚洲欧美日韩综合久久久 | 99视频精品全部免费免费观看 | 99国产精品白浆在线观看免费 | 中文字幕av日韩精品一区二区 | 国产办公室秘书无码精品99 | 国产成人精品久久亚洲高清不卡 | 亚洲精品欧美二区三区中文字幕 | 荫蒂被男人添的好舒服爽免费视频 | 国产办公室秘书无码精品99 | 97精品国产97久久久久久免费 | 天堂亚洲2017在线观看 | 中文字幕人妻丝袜二区 | 久久久久久九九精品久 | 国语自产偷拍精品视频偷 | 亚洲熟悉妇女xxx妇女av | 最新国产麻豆aⅴ精品无码 | 日本爽爽爽爽爽爽在线观看免 | 久久久久久a亚洲欧洲av冫 | 国产成人综合色在线观看网站 | av无码电影一区二区三区 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲国产成人av在线观看 | 伊人久久大香线蕉av一区二区 | 奇米影视7777久久精品人人爽 | 乱人伦人妻中文字幕无码久久网 | 国产无遮挡又黄又爽又色 | 强奷人妻日本中文字幕 | 熟妇人妻无乱码中文字幕 | 久久精品人妻少妇一区二区三区 | 免费无码av一区二区 | 国产真人无遮挡作爱免费视频 | 激情爆乳一区二区三区 | аⅴ资源天堂资源库在线 | 中文字幕无线码 | 欧美兽交xxxx×视频 | 久久无码专区国产精品s | 久久99久久99精品中文字幕 | 国产另类ts人妖一区二区 | www国产亚洲精品久久久日本 | 免费观看又污又黄的网站 | 国产成人无码专区 | 丝袜 中出 制服 人妻 美腿 | 无码精品人妻一区二区三区av | 日本熟妇浓毛 | 天下第一社区视频www日本 | 国产av无码专区亚洲a∨毛片 | 国产福利视频一区二区 | 任你躁在线精品免费 | 亚洲熟妇色xxxxx欧美老妇 | 国产精品免费大片 | 亚洲国产欧美日韩精品一区二区三区 | 久久99精品久久久久久动态图 | 亚洲国产精品一区二区美利坚 | 亚洲 a v无 码免 费 成 人 a v | 99精品久久毛片a片 | 国产麻豆精品一区二区三区v视界 | 国产精品无码一区二区三区不卡 | 国产小呦泬泬99精品 | 天堂无码人妻精品一区二区三区 | 香港三级日本三级妇三级 | 亚洲日韩一区二区三区 | 欧美自拍另类欧美综合图片区 | 国产明星裸体无码xxxx视频 | 999久久久国产精品消防器材 | 亚洲中文无码av永久不收费 | 一本久道高清无码视频 | 中文字幕乱妇无码av在线 | 娇妻被黑人粗大高潮白浆 | 在教室伦流澡到高潮hnp视频 | 少妇太爽了在线观看 | 日本熟妇人妻xxxxx人hd | 午夜成人1000部免费视频 | 久久久久久久人妻无码中文字幕爆 | 中文精品无码中文字幕无码专区 | 人妻无码久久精品人妻 | 天干天干啦夜天干天2017 | 欧美日韩在线亚洲综合国产人 | 亚洲国产精品一区二区第一页 | 人人妻人人藻人人爽欧美一区 | 成人片黄网站色大片免费观看 | 牲欲强的熟妇农村老妇女 | 国产亲子乱弄免费视频 | 日本www一道久久久免费榴莲 | 香港三级日本三级妇三级 | 精品无码一区二区三区的天堂 | 综合网日日天干夜夜久久 | 天干天干啦夜天干天2017 | 131美女爱做视频 | 欧洲熟妇色 欧美 | 亚洲国产av精品一区二区蜜芽 | 色欲av亚洲一区无码少妇 | 久久无码人妻影院 | 久9re热视频这里只有精品 | 成熟人妻av无码专区 | 亚洲精品午夜国产va久久成人 | 一本色道久久综合亚洲精品不卡 | 夫妻免费无码v看片 | 色综合视频一区二区三区 | 澳门永久av免费网站 | 亚洲熟妇色xxxxx亚洲 | 欧美熟妇另类久久久久久不卡 | 亚洲精品成a人在线观看 | 亚洲小说图区综合在线 | 免费人成网站视频在线观看 | 一本色道婷婷久久欧美 | 久久97精品久久久久久久不卡 | 亚洲乱码国产乱码精品精 | 人妻天天爽夜夜爽一区二区 | 日韩亚洲欧美中文高清在线 | 欧洲欧美人成视频在线 | 少妇被粗大的猛进出69影院 | √天堂资源地址中文在线 | 国产精品久久久av久久久 | 国产凸凹视频一区二区 | 精品国产乱码久久久久乱码 | 久久99久久99精品中文字幕 | 久久无码专区国产精品s | 日本大香伊一区二区三区 | 成人精品视频一区二区三区尤物 | 红桃av一区二区三区在线无码av | 国产人妻精品一区二区三区不卡 | 久久国语露脸国产精品电影 | 亚洲无人区一区二区三区 | 亚洲自偷精品视频自拍 | 日韩人妻少妇一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 牛和人交xxxx欧美 | 国产 浪潮av性色四虎 | 精品乱码久久久久久久 | 欧美野外疯狂做受xxxx高潮 | 国产精品高潮呻吟av久久 | 色一情一乱一伦一区二区三欧美 | 亚洲精品中文字幕久久久久 | 亚洲一区二区三区无码久久 | 人妻aⅴ无码一区二区三区 | 无码国产色欲xxxxx视频 | 亚洲精品一区国产 | 亚洲 高清 成人 动漫 | 欧美xxxxx精品 | 色综合久久久无码网中文 | 色欲久久久天天天综合网精品 | 天天躁夜夜躁狠狠是什么心态 | 亚洲日韩精品欧美一区二区 | 久久99久久99精品中文字幕 | 国产成人综合色在线观看网站 | 日本肉体xxxx裸交 | 强奷人妻日本中文字幕 | 大屁股大乳丰满人妻 | 国产疯狂伦交大片 | 福利一区二区三区视频在线观看 | 中文字幕 人妻熟女 | 成人精品一区二区三区中文字幕 | 女人被男人爽到呻吟的视频 | 麻豆果冻传媒2021精品传媒一区下载 | 波多野结衣一区二区三区av免费 | 午夜不卡av免费 一本久久a久久精品vr综合 | 中文无码精品a∨在线观看不卡 | 亚洲欧洲日本无在线码 | 久久精品无码一区二区三区 | 日本熟妇人妻xxxxx人hd | 久久人人爽人人爽人人片av高清 | 成人免费无码大片a毛片 | 初尝人妻少妇中文字幕 | 精品水蜜桃久久久久久久 | 国产亚洲精品久久久久久大师 | 天天摸天天透天天添 | 永久免费观看国产裸体美女 | 国产两女互慰高潮视频在线观看 | 久久久av男人的天堂 | 国产一区二区三区影院 | 领导边摸边吃奶边做爽在线观看 | 99久久精品国产一区二区蜜芽 | 日本www一道久久久免费榴莲 | 熟女少妇在线视频播放 | 成人动漫在线观看 | 国产成人精品无码播放 | 98国产精品综合一区二区三区 | 色婷婷av一区二区三区之红樱桃 | 日韩 欧美 动漫 国产 制服 | 亚洲国产欧美国产综合一区 | 性开放的女人aaa片 | 丰满护士巨好爽好大乳 | 成人欧美一区二区三区黑人 | 最近中文2019字幕第二页 | 玩弄人妻少妇500系列视频 | 网友自拍区视频精品 | 欧美国产日韩亚洲中文 | 久久久久se色偷偷亚洲精品av | 国产av久久久久精东av | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 精品成人av一区二区三区 | 国产精品亚洲综合色区韩国 | 黑人粗大猛烈进出高潮视频 | 东京热一精品无码av | 无码人妻av免费一区二区三区 | 久久国语露脸国产精品电影 | 波多野42部无码喷潮在线 | 在线观看免费人成视频 | 最近中文2019字幕第二页 | 亚洲人成人无码网www国产 | 国产热a欧美热a在线视频 | 亚洲中文字幕成人无码 | 久久这里只有精品视频9 | 亚洲精品国产a久久久久久 | 又黄又爽又色的视频 | 国产色xx群视频射精 | av无码不卡在线观看免费 | 亚洲乱码日产精品bd | 无码吃奶揉捏奶头高潮视频 | 色诱久久久久综合网ywww | 国产午夜视频在线观看 | 国产乱码精品一品二品 | 亚洲欧美综合区丁香五月小说 | 国产 浪潮av性色四虎 | 强伦人妻一区二区三区视频18 | 丰满人妻被黑人猛烈进入 | 真人与拘做受免费视频 | 人妻有码中文字幕在线 | 国产精品亚洲а∨无码播放麻豆 | 亚洲色欲色欲欲www在线 | 白嫩日本少妇做爰 | 国产成人精品优优av | 国内精品九九久久久精品 | 亚洲国产欧美在线成人 | 日韩精品无码一区二区中文字幕 | 色 综合 欧美 亚洲 国产 | 亚洲欧美精品伊人久久 | 狠狠色欧美亚洲狠狠色www | 亚洲精品中文字幕乱码 | 国产精品沙发午睡系列 | 性欧美牲交在线视频 | 国产人妻精品午夜福利免费 | 亚洲人亚洲人成电影网站色 | 国产精品无码一区二区桃花视频 | 久久久国产精品无码免费专区 | 天天av天天av天天透 | 国产av一区二区精品久久凹凸 | 无码人妻少妇伦在线电影 | 日韩视频 中文字幕 视频一区 | www国产亚洲精品久久久日本 | 牲欲强的熟妇农村老妇女 | 国产后入清纯学生妹 | 无码乱肉视频免费大全合集 | 国产香蕉尹人视频在线 | 久久zyz资源站无码中文动漫 | 亚洲精品一区二区三区在线 | 成人无码精品1区2区3区免费看 | 久久国产自偷自偷免费一区调 | 天天燥日日燥 | 在线播放无码字幕亚洲 | 国语精品一区二区三区 | 中文字幕人妻无码一区二区三区 | 欧美性生交xxxxx久久久 | 久久99精品久久久久久 | 无码av最新清无码专区吞精 | 男人的天堂av网站 | 99久久99久久免费精品蜜桃 | 亚洲中文字幕无码中字 | 亚洲无人区一区二区三区 | 精品国产国产综合精品 | 日本护士xxxxhd少妇 | 好男人社区资源 | 久久亚洲中文字幕无码 | 无套内谢老熟女 | 欧美老熟妇乱xxxxx | 熟妇人妻激情偷爽文 | 国内精品久久久久久中文字幕 | 中文无码伦av中文字幕 | 少妇久久久久久人妻无码 | 国产无套粉嫩白浆在线 | 青青久在线视频免费观看 | 国产在线aaa片一区二区99 | 精品日本一区二区三区在线观看 | 亚洲国产欧美国产综合一区 | 欧美怡红院免费全部视频 | 亚洲国产精品毛片av不卡在线 | 色一情一乱一伦一区二区三欧美 | 日本欧美一区二区三区乱码 | 377p欧洲日本亚洲大胆 | 伊人久久大香线蕉av一区二区 | 男女性色大片免费网站 | 一本色道婷婷久久欧美 | 日本熟妇人妻xxxxx人hd | 亚洲精品午夜国产va久久成人 | 国产午夜精品一区二区三区嫩草 | 成在人线av无码免费 | 亚洲欧美综合区丁香五月小说 | 中文字幕人妻无码一区二区三区 | 久久精品视频在线看15 | 久久无码专区国产精品s | 嫩b人妻精品一区二区三区 | 日本饥渴人妻欲求不满 | 国产成人精品三级麻豆 | 3d动漫精品啪啪一区二区中 | 国产精品人人妻人人爽 | 精品无码av一区二区三区 | 欧美老人巨大xxxx做受 | 天天躁夜夜躁狠狠是什么心态 | 久久久久国色av免费观看性色 | 亚洲中文无码av永久不收费 | 久久97精品久久久久久久不卡 | 波多野结衣av在线观看 | 在线播放亚洲第一字幕 | 香蕉久久久久久av成人 | 宝宝好涨水快流出来免费视频 | 99国产精品白浆在线观看免费 | 欧美日韩一区二区免费视频 | 日本大乳高潮视频在线观看 | 亚洲欧美精品aaaaaa片 | 久久精品国产大片免费观看 | 国内揄拍国内精品人妻 | 久久无码专区国产精品s | 女人被爽到呻吟gif动态图视看 | 成人av无码一区二区三区 | 成人精品天堂一区二区三区 | 成 人 网 站国产免费观看 | 日韩欧美成人免费观看 | 精品人妻中文字幕有码在线 | 少妇厨房愉情理9仑片视频 | 欧美猛少妇色xxxxx | 日韩 欧美 动漫 国产 制服 | 国产无遮挡又黄又爽又色 | 精品国精品国产自在久国产87 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲成色在线综合网站 | 国产精品99爱免费视频 | 久久精品视频在线看15 | 亚洲精品午夜国产va久久成人 | 国产午夜亚洲精品不卡下载 | 亚洲中文字幕在线观看 | 亚洲一区二区三区 | 久久99精品久久久久久动态图 | 成人一在线视频日韩国产 | 无码人妻久久一区二区三区不卡 | 伊人久久大香线蕉亚洲 | 特黄特色大片免费播放器图片 | 国产精品视频免费播放 | 男人扒开女人内裤强吻桶进去 | 久久综合给合久久狠狠狠97色 | 黑人大群体交免费视频 | 国产无遮挡吃胸膜奶免费看 | 国产色xx群视频射精 | 国产色xx群视频射精 | 高潮毛片无遮挡高清免费视频 | 亚无码乱人伦一区二区 | 国产精品无码一区二区三区不卡 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲精品午夜国产va久久成人 | 日本一区二区更新不卡 | 亚洲成a人片在线观看日本 | 99国产精品白浆在线观看免费 | 国产精品嫩草久久久久 | 国产精品久久久午夜夜伦鲁鲁 | 精品国产精品久久一区免费式 | 美女极度色诱视频国产 | 色欲久久久天天天综合网精品 | 欧美人与禽猛交狂配 | 一二三四社区在线中文视频 | 无码人妻出轨黑人中文字幕 | 国精产品一品二品国精品69xx | 国产另类ts人妖一区二区 | 麻豆人妻少妇精品无码专区 | 色婷婷综合激情综在线播放 | 日本www一道久久久免费榴莲 | 在线亚洲高清揄拍自拍一品区 | 成熟人妻av无码专区 | 1000部啪啪未满十八勿入下载 | 日韩av无码一区二区三区 | 天天燥日日燥 | 青青青手机频在线观看 | 国产精品高潮呻吟av久久 | 欧美老熟妇乱xxxxx | 双乳奶水饱满少妇呻吟 | 2019nv天堂香蕉在线观看 | 国产人妻久久精品二区三区老狼 | 国产高清av在线播放 | 国产电影无码午夜在线播放 | 天天躁日日躁狠狠躁免费麻豆 | 熟女体下毛毛黑森林 | 久久综合色之久久综合 | 亚洲国产成人av在线观看 | 国产精品高潮呻吟av久久 | 国产真实夫妇视频 | 久久久久久亚洲精品a片成人 | 任你躁在线精品免费 | 中文字幕乱码人妻二区三区 | 久久综合九色综合97网 | 国产精品爱久久久久久久 | 免费无码的av片在线观看 | 亚洲综合久久一区二区 | 丰满妇女强制高潮18xxxx | 国产精品亚洲а∨无码播放麻豆 | 亚洲中文字幕无码中字 | 日韩精品a片一区二区三区妖精 | 色综合久久中文娱乐网 | 色五月丁香五月综合五月 | 我要看www免费看插插视频 | 伦伦影院午夜理论片 | 亚洲精品久久久久中文第一幕 | 中文字幕人妻丝袜二区 | 成年美女黄网站色大免费全看 | 中文无码精品a∨在线观看不卡 | 97人妻精品一区二区三区 | 久久国产精品萌白酱免费 | 高潮毛片无遮挡高清免费 | 风流少妇按摩来高潮 | 婷婷六月久久综合丁香 | v一区无码内射国产 | 色一情一乱一伦一视频免费看 | 小泽玛莉亚一区二区视频在线 | 中文字幕无码日韩专区 | 日韩精品久久久肉伦网站 | 国产97在线 | 亚洲 | 黑人大群体交免费视频 | 丰腴饱满的极品熟妇 | 熟妇人妻中文av无码 | 久久精品女人天堂av免费观看 | 妺妺窝人体色www婷婷 | 亚洲欧美国产精品久久 | 真人与拘做受免费视频一 | 乱人伦中文视频在线观看 | 亚洲精品中文字幕 | 天堂亚洲2017在线观看 | 色爱情人网站 | 欧美亚洲日韩国产人成在线播放 | 极品尤物被啪到呻吟喷水 | 国产无av码在线观看 | 国产麻豆精品精东影业av网站 | 天天躁夜夜躁狠狠是什么心态 | 无码人妻久久一区二区三区不卡 | 7777奇米四色成人眼影 | 成人亚洲精品久久久久 | av小次郎收藏 | 初尝人妻少妇中文字幕 | 精品国产麻豆免费人成网站 | 日韩精品无码免费一区二区三区 | aa片在线观看视频在线播放 | 国产精品香蕉在线观看 | 成熟女人特级毛片www免费 | 麻豆人妻少妇精品无码专区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | av无码电影一区二区三区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精品久久久久9999小说 | 精品国产一区二区三区四区 | 久久综合九色综合欧美狠狠 | 男人扒开女人内裤强吻桶进去 | 精品国产乱码久久久久乱码 | 在线观看欧美一区二区三区 | 老熟女乱子伦 | 国产真实伦对白全集 | 粗大的内捧猛烈进出视频 | 国产 精品 自在自线 | 一区二区三区乱码在线 | 欧洲 | 成人精品视频一区二区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 性欧美大战久久久久久久 | a在线亚洲男人的天堂 | 欧美老妇交乱视频在线观看 | 国产97人人超碰caoprom | 亚洲成av人在线观看网址 | 国产精品国产三级国产专播 | 白嫩日本少妇做爰 | 久久精品人妻少妇一区二区三区 | 天天躁夜夜躁狠狠是什么心态 | 又大又紧又粉嫩18p少妇 | 亚洲色成人中文字幕网站 | 久久精品国产一区二区三区肥胖 | 久久精品女人天堂av免费观看 | 搡女人真爽免费视频大全 | 一本大道久久东京热无码av | 无码人妻丰满熟妇区五十路百度 | 日本va欧美va欧美va精品 | 中文字幕无码免费久久9一区9 | 久久久亚洲欧洲日产国码αv | 午夜时刻免费入口 | 日韩精品成人一区二区三区 | 在线a亚洲视频播放在线观看 | 少妇一晚三次一区二区三区 | 日本一区二区三区免费高清 | 又色又爽又黄的美女裸体网站 | 国产精品福利视频导航 | 久久综合狠狠综合久久综合88 | 国产无套内射久久久国产 | 国产精品嫩草久久久久 | 欧美xxxx黑人又粗又长 | 欧美性生交xxxxx久久久 | 国产精品久久久一区二区三区 | 久久天天躁夜夜躁狠狠 | 一本久道高清无码视频 | 欧美日韩人成综合在线播放 | 免费中文字幕日韩欧美 | 秋霞特色aa大片 | 色婷婷久久一区二区三区麻豆 | 国产精品毛片一区二区 | 国产精品亚洲а∨无码播放麻豆 | 中文字幕日韩精品一区二区三区 | 无码人妻丰满熟妇区毛片18 | 亚洲日韩av一区二区三区四区 | 特黄特色大片免费播放器图片 | 无码一区二区三区在线观看 | 国产真实乱对白精彩久久 | 亚洲精品国产a久久久久久 | 性欧美牲交在线视频 | 婷婷丁香五月天综合东京热 | 亚拍精品一区二区三区探花 | 亚洲成a人片在线观看无码3d | 亚洲爆乳精品无码一区二区三区 | 国产亚洲精品久久久久久久 | 国产亚洲人成在线播放 | v一区无码内射国产 | 亚洲综合伊人久久大杳蕉 | 久久久久成人精品免费播放动漫 | 亚洲日韩精品欧美一区二区 | 久久综合给久久狠狠97色 | 亚洲人成网站在线播放942 | 特级做a爰片毛片免费69 | 亚洲成色www久久网站 | 国产熟妇另类久久久久 | 中文字幕无码日韩专区 | 老子影院午夜伦不卡 | 久激情内射婷内射蜜桃人妖 | 日本一区二区三区免费高清 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲精品国产a久久久久久 | 久久精品成人欧美大片 | 日本一区二区更新不卡 | 欧美 日韩 人妻 高清 中文 | 欧美人与禽猛交狂配 | 久久人妻内射无码一区三区 | 国产色在线 | 国产 | 亚洲а∨天堂久久精品2021 | 亚洲精品国产品国语在线观看 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 久久久无码中文字幕久... | 欧美精品国产综合久久 | 久久精品国产99久久6动漫 | 成人无码视频在线观看网站 | 天天躁日日躁狠狠躁免费麻豆 | 欧美激情综合亚洲一二区 | 国产精品人人爽人人做我的可爱 | 亚洲中文字幕在线观看 | 国产成人综合在线女婷五月99播放 | 国产日产欧产精品精品app | 精品久久久无码人妻字幂 | 麻豆精品国产精华精华液好用吗 | 国产无遮挡又黄又爽免费视频 | 亚洲色欲色欲天天天www | www国产精品内射老师 | 强伦人妻一区二区三区视频18 | 亚洲精品国产品国语在线观看 | 国内精品人妻无码久久久影院 | 荫蒂添的好舒服视频囗交 | 无码任你躁久久久久久久 | 午夜福利一区二区三区在线观看 | 欧美日韩视频无码一区二区三 | 天海翼激烈高潮到腰振不止 | 亚洲乱码国产乱码精品精 | 2020久久香蕉国产线看观看 | 波多野结衣av一区二区全免费观看 | 色综合久久中文娱乐网 | 免费无码的av片在线观看 | 美女张开腿让人桶 | 欧美35页视频在线观看 | 亚洲国产精品毛片av不卡在线 | 牲欲强的熟妇农村老妇女视频 | 亚洲啪av永久无码精品放毛片 | 人妻天天爽夜夜爽一区二区 | 亚洲精品成人av在线 | 亚洲欧美国产精品久久 | 青草视频在线播放 | 东京热无码av男人的天堂 | 精品一区二区三区无码免费视频 | 无码av岛国片在线播放 | 少妇激情av一区二区 | 精品久久久中文字幕人妻 | 午夜精品久久久久久久 | 乱码av麻豆丝袜熟女系列 | 中文字幕乱码人妻无码久久 | 亚洲综合无码久久精品综合 | 国精产品一品二品国精品69xx | 欧美日韩色另类综合 | 欧美喷潮久久久xxxxx | 女人被男人躁得好爽免费视频 | 性欧美牲交xxxxx视频 | 国产亚洲精品久久久久久 | 无套内射视频囯产 | 久久久精品成人免费观看 | 国产亚洲精品久久久久久久 | 人人澡人人透人人爽 | 国产精品亚洲综合色区韩国 | 老太婆性杂交欧美肥老太 | 国产精品免费大片 | 亚洲第一网站男人都懂 | 亚洲阿v天堂在线 | 成人一在线视频日韩国产 | 国产婷婷色一区二区三区在线 | 国产特级毛片aaaaaaa高清 | 国产精品手机免费 | 亚洲经典千人经典日产 | 国内综合精品午夜久久资源 | 丰满肥臀大屁股熟妇激情视频 | 日本精品高清一区二区 | 国产亚洲精品精品国产亚洲综合 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 亚洲精品中文字幕乱码 | 西西人体www44rt大胆高清 | 色婷婷综合中文久久一本 | 国产乱人偷精品人妻a片 | 伊在人天堂亚洲香蕉精品区 | 日韩精品久久久肉伦网站 | 免费国产黄网站在线观看 | 色一情一乱一伦一视频免费看 | 人人爽人人爽人人片av亚洲 | 色一情一乱一伦一视频免费看 | 精品一区二区三区波多野结衣 | 亚洲精品无码人妻无码 | 久久精品无码一区二区三区 | 老熟女重囗味hdxx69 | 久久天天躁狠狠躁夜夜免费观看 | 国产成人久久精品流白浆 | 久久99精品久久久久久动态图 | 图片区 小说区 区 亚洲五月 | 色一情一乱一伦一区二区三欧美 | 无码纯肉视频在线观看 | 男人和女人高潮免费网站 | 久久人人爽人人爽人人片ⅴ | 熟妇女人妻丰满少妇中文字幕 | 精品无人国产偷自产在线 | 99久久亚洲精品无码毛片 | 欧美成人午夜精品久久久 | 无码av免费一区二区三区试看 | 亚洲无人区午夜福利码高清完整版 | 久久精品国产99久久6动漫 | 午夜熟女插插xx免费视频 | 亚洲一区二区三区含羞草 | 乌克兰少妇xxxx做受 | 牲欲强的熟妇农村老妇女 | 97资源共享在线视频 | 亚洲成av人综合在线观看 | 亚洲第一网站男人都懂 | 精品国产一区av天美传媒 | 日本xxxx色视频在线观看免费 | 成人试看120秒体验区 | 狠狠色欧美亚洲狠狠色www | 亚洲精品成a人在线观看 | 亚洲区欧美区综合区自拍区 | 欧美丰满熟妇xxxx性ppx人交 | 人妻少妇被猛烈进入中文字幕 | 东京热一精品无码av | 成人无码精品1区2区3区免费看 | 图片小说视频一区二区 | 久久久久99精品国产片 | 东京热一精品无码av | 亚洲 日韩 欧美 成人 在线观看 | 国产高清av在线播放 | 红桃av一区二区三区在线无码av | 日本一本二本三区免费 | 亚洲一区二区三区四区 | 午夜男女很黄的视频 | 久久综合给合久久狠狠狠97色 | 国产成人精品三级麻豆 | 永久免费观看国产裸体美女 | 清纯唯美经典一区二区 | 久久久久免费看成人影片 | 久精品国产欧美亚洲色aⅴ大片 | 日产国产精品亚洲系列 | 亚洲欧美日韩综合久久久 | 精品亚洲韩国一区二区三区 | 精品日本一区二区三区在线观看 | 成人无码精品1区2区3区免费看 | 国产av剧情md精品麻豆 | 色婷婷综合激情综在线播放 | 欧美猛少妇色xxxxx | 国产小呦泬泬99精品 | 夜先锋av资源网站 | 久久99精品国产麻豆 | 曰韩无码二三区中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 1000部夫妻午夜免费 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲国产精品一区二区第一页 | 国内精品九九久久久精品 | 国产精品二区一区二区aⅴ污介绍 | 欧美人妻一区二区三区 | 久久久www成人免费毛片 | 男人的天堂2018无码 | 伊人久久婷婷五月综合97色 | 精品午夜福利在线观看 | 99久久婷婷国产综合精品青草免费 | 天天做天天爱天天爽综合网 | 精品无码一区二区三区爱欲 | 99久久亚洲精品无码毛片 | 在线观看欧美一区二区三区 | 成人一在线视频日韩国产 | 久久久久久久女国产乱让韩 | 国精产品一品二品国精品69xx | 无码人妻久久一区二区三区不卡 | 少妇无码av无码专区在线观看 | 永久黄网站色视频免费直播 | 国产97人人超碰caoprom | 一个人免费观看的www视频 | 亚洲精品一区二区三区在线观看 | 亚洲精品综合一区二区三区在线 | 无码人妻精品一区二区三区下载 | 国产色视频一区二区三区 | 日本大乳高潮视频在线观看 | 国产另类ts人妖一区二区 | 色欲av亚洲一区无码少妇 | 2019nv天堂香蕉在线观看 | 亚洲日韩av片在线观看 | 高清无码午夜福利视频 | 精品人妻人人做人人爽夜夜爽 | 99国产精品白浆在线观看免费 | 少妇的肉体aa片免费 | 中文字幕无码av激情不卡 | 国产成人无码午夜视频在线观看 | 好屌草这里只有精品 | 在线 国产 欧美 亚洲 天堂 | 欧美色就是色 | 日本在线高清不卡免费播放 | 欧美亚洲国产一区二区三区 | 国内综合精品午夜久久资源 | 国产极品美女高潮无套在线观看 | 国产亚洲欧美日韩亚洲中文色 | 久久亚洲日韩精品一区二区三区 | 国产成人无码一二三区视频 | 亚洲精品久久久久久久久久久 | 伊人久久大香线蕉亚洲 | 亚洲综合无码一区二区三区 | 亚洲精品成人福利网站 | 亚洲爆乳精品无码一区二区三区 | 日产精品99久久久久久 | 人人澡人人妻人人爽人人蜜桃 | 性色欲情网站iwww九文堂 | 无遮挡啪啪摇乳动态图 | 国产乡下妇女做爰 | 麻豆成人精品国产免费 | 人人妻在人人 | 国产精品成人av在线观看 | 亚洲成av人综合在线观看 | 成 人影片 免费观看 | 久久午夜无码鲁丝片秋霞 | 无套内射视频囯产 | 久久久中文字幕日本无吗 | 成人免费视频视频在线观看 免费 | 99久久精品无码一区二区毛片 | 少妇高潮一区二区三区99 | 国产精品va在线观看无码 | а√资源新版在线天堂 | 精品人妻中文字幕有码在线 | 久久精品一区二区三区四区 | 夜夜影院未满十八勿进 | 亚洲中文字幕在线无码一区二区 | 国产精品无码久久av | 人人妻人人澡人人爽精品欧美 | 欧洲熟妇色 欧美 | 无码国产色欲xxxxx视频 | 日本熟妇大屁股人妻 | 中文字幕久久久久人妻 | 免费国产成人高清在线观看网站 | 天海翼激烈高潮到腰振不止 | 亚洲精品久久久久久久久久久 | 国产精品美女久久久网av | 国产性生大片免费观看性 | 亚洲人交乣女bbw | 四虎永久在线精品免费网址 | 日韩av激情在线观看 | 亚洲大尺度无码无码专区 | 国产精品久久国产精品99 | 久久久久国色av免费观看性色 | 国产成人精品一区二区在线小狼 | 中文字幕无码视频专区 | 久久久久久av无码免费看大片 | 黑人巨大精品欧美黑寡妇 | 欧美人与物videos另类 | 性欧美熟妇videofreesex | 午夜理论片yy44880影院 | 荫蒂被男人添的好舒服爽免费视频 | 欧美亚洲日韩国产人成在线播放 | 久久国产自偷自偷免费一区调 | 国内精品久久久久久中文字幕 | 国产亚洲精品久久久久久国模美 | 高清不卡一区二区三区 | 国色天香社区在线视频 | 国产人妻人伦精品 | 55夜色66夜色国产精品视频 | 国产深夜福利视频在线 | 亚洲熟妇色xxxxx欧美老妇 | 兔费看少妇性l交大片免费 | 亚洲精品鲁一鲁一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲a无码综合a国产av中文 | 国产精品理论片在线观看 | 熟妇人妻无乱码中文字幕 | 久久综合九色综合97网 | 永久免费观看美女裸体的网站 | 激情人妻另类人妻伦 | 国产国产精品人在线视 | 男女猛烈xx00免费视频试看 | 一本加勒比波多野结衣 | 夜夜躁日日躁狠狠久久av | 国产一区二区三区日韩精品 | 午夜熟女插插xx免费视频 | 国产另类ts人妖一区二区 | 国产精品手机免费 | 啦啦啦www在线观看免费视频 | 久久久久久亚洲精品a片成人 | 国产极品美女高潮无套在线观看 | 美女极度色诱视频国产 | 亚洲欧洲中文日韩av乱码 | 亚洲精品中文字幕久久久久 | 久久99精品久久久久久动态图 | 亚洲精品一区三区三区在线观看 | 大地资源网第二页免费观看 | 成人三级无码视频在线观看 | 99精品无人区乱码1区2区3区 | 亚洲伊人久久精品影院 | 300部国产真实乱 | 成人无码视频在线观看网站 | 日本精品高清一区二区 | 欧美日韩一区二区三区自拍 | 国产精品igao视频网 | 人人爽人人澡人人高潮 | 爱做久久久久久 | 在线а√天堂中文官网 | 日韩在线不卡免费视频一区 | 3d动漫精品啪啪一区二区中 | 国产凸凹视频一区二区 | 乱中年女人伦av三区 | 午夜精品久久久久久久 | 国产精品嫩草久久久久 | 露脸叫床粗话东北少妇 | 超碰97人人射妻 | 亲嘴扒胸摸屁股激烈网站 | 日本熟妇乱子伦xxxx | 国产肉丝袜在线观看 | 色狠狠av一区二区三区 | www国产亚洲精品久久网站 | 中文无码精品a∨在线观看不卡 | 精品无人区无码乱码毛片国产 | 亚洲成色在线综合网站 | 扒开双腿疯狂进出爽爽爽视频 | 日本va欧美va欧美va精品 | 丰满少妇女裸体bbw | 久久久久亚洲精品男人的天堂 | 国产人妖乱国产精品人妖 | 午夜无码区在线观看 | 综合网日日天干夜夜久久 | 无码人妻出轨黑人中文字幕 | 欧美日韩久久久精品a片 | 成人动漫在线观看 | 久久久久久久人妻无码中文字幕爆 | 中文字幕人妻丝袜二区 | 人妻熟女一区 | 久久 国产 尿 小便 嘘嘘 | 性欧美大战久久久久久久 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品一区二区三区在线 | 亚洲一区二区三区国产精华液 | 国产精品欧美成人 | 亚洲午夜无码久久 | 精品久久久无码中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 理论片87福利理论电影 | 欧美 日韩 亚洲 在线 | 又湿又紧又大又爽a视频国产 | 中文字幕人妻无码一夲道 | 少妇无码吹潮 | 无码帝国www无码专区色综合 | 精品无码成人片一区二区98 | 亚洲一区二区三区偷拍女厕 | 久久精品99久久香蕉国产色戒 | 国产黄在线观看免费观看不卡 | 成人片黄网站色大片免费观看 | 国产99久久精品一区二区 | 2020最新国产自产精品 | 久久午夜无码鲁丝片 | 国产美女极度色诱视频www | 国产精品亚洲五月天高清 | 亚洲а∨天堂久久精品2021 | 1000部啪啪未满十八勿入下载 | 色 综合 欧美 亚洲 国产 | 成人精品视频一区二区 | √天堂资源地址中文在线 | 清纯唯美经典一区二区 | av小次郎收藏 | 超碰97人人做人人爱少妇 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 欧美黑人乱大交 | 四虎4hu永久免费 | 99国产精品白浆在线观看免费 | 夜夜夜高潮夜夜爽夜夜爰爰 | 午夜精品一区二区三区的区别 | 国产成人亚洲综合无码 | 亚洲 a v无 码免 费 成 人 a v | 精品无码成人片一区二区98 | 性色av无码免费一区二区三区 | 日本高清一区免费中文视频 | 少妇久久久久久人妻无码 | 国产综合在线观看 | 日韩亚洲欧美精品综合 | 久久精品女人天堂av免费观看 | 日本护士xxxxhd少妇 | 国产凸凹视频一区二区 | 欧美亚洲日韩国产人成在线播放 | 无码帝国www无码专区色综合 | 高潮毛片无遮挡高清免费视频 | 无码人妻av免费一区二区三区 | 蜜桃无码一区二区三区 | 一区二区三区高清视频一 | 亚洲成av人影院在线观看 | 亚洲综合精品香蕉久久网 | 免费人成在线观看网站 | 亚洲男人av香蕉爽爽爽爽 | 免费男性肉肉影院 | 18黄暴禁片在线观看 | 蜜桃视频韩日免费播放 | 牲欲强的熟妇农村老妇女 | 国产激情综合五月久久 | 日日天日日夜日日摸 | 日日碰狠狠躁久久躁蜜桃 | 少妇人妻av毛片在线看 | 欧美freesex黑人又粗又大 | 亚洲国产高清在线观看视频 | 欧美人与牲动交xxxx | 激情五月综合色婷婷一区二区 | 激情国产av做激情国产爱 | 性欧美大战久久久久久久 | 久久97精品久久久久久久不卡 | 精品乱子伦一区二区三区 | 精品偷拍一区二区三区在线看 | 男女下面进入的视频免费午夜 | 国产精品无码成人午夜电影 | 国产精品怡红院永久免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产成人久久精品流白浆 | 色婷婷久久一区二区三区麻豆 | 国产熟女一区二区三区四区五区 | 免费观看又污又黄的网站 | 亚洲色欲久久久综合网东京热 | 午夜福利试看120秒体验区 | 玩弄人妻少妇500系列视频 | 嫩b人妻精品一区二区三区 | 亚洲欧美色中文字幕在线 | 国产精品国产自线拍免费软件 | 色综合久久中文娱乐网 | 国产亚洲欧美在线专区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 人妻有码中文字幕在线 | 天天躁夜夜躁狠狠是什么心态 | 人妻无码αv中文字幕久久琪琪布 | 内射欧美老妇wbb | 婷婷丁香六月激情综合啪 | 午夜无码人妻av大片色欲 | 国产亚洲精品久久久久久 | 国产另类ts人妖一区二区 | 亚洲精品一区二区三区在线 | 天天拍夜夜添久久精品大 | 99久久久无码国产aaa精品 | 精品国产麻豆免费人成网站 | 色一情一乱一伦一区二区三欧美 | 亚洲色欲色欲天天天www | 在线视频网站www色 | 国产精品毛片一区二区 | 精品无人区无码乱码毛片国产 | 成人性做爰aaa片免费看不忠 | 亚洲 激情 小说 另类 欧美 | 欧美日韩久久久精品a片 | 亚洲成av人片在线观看无码不卡 | 日本精品久久久久中文字幕 | 日本精品久久久久中文字幕 | 久久精品国产精品国产精品污 | 久久无码专区国产精品s | 荫蒂被男人添的好舒服爽免费视频 | 人人超人人超碰超国产 | 久精品国产欧美亚洲色aⅴ大片 | 日韩少妇白浆无码系列 | 亚洲中文字幕va福利 | 88国产精品欧美一区二区三区 | 欧美一区二区三区 | 国产日产欧产精品精品app | 久久久久av无码免费网 | 国产香蕉尹人综合在线观看 | 国产人妻久久精品二区三区老狼 | 人妻少妇精品视频专区 | 日韩成人一区二区三区在线观看 | 亚洲中文字幕无码一久久区 | 午夜精品久久久内射近拍高清 | 强伦人妻一区二区三区视频18 | 男人的天堂av网站 | 西西人体www44rt大胆高清 | 精品欧洲av无码一区二区三区 | 我要看www免费看插插视频 | 一二三四在线观看免费视频 | 丰腴饱满的极品熟妇 | 日韩av无码一区二区三区 | 日本饥渴人妻欲求不满 | 国产深夜福利视频在线 | 久久午夜无码鲁丝片 | 欧美 日韩 亚洲 在线 | 免费国产黄网站在线观看 | 国产精品永久免费视频 | 亚无码乱人伦一区二区 | 午夜精品久久久久久久久 | 樱花草在线播放免费中文 | 成人动漫在线观看 | 人妻少妇精品久久 | 宝宝好涨水快流出来免费视频 | 98国产精品综合一区二区三区 | 成人综合网亚洲伊人 | 国产精品福利视频导航 | 夜夜夜高潮夜夜爽夜夜爰爰 | 一本大道久久东京热无码av | 乱码午夜-极国产极内射 | 无码中文字幕色专区 | 激情爆乳一区二区三区 | 日韩精品久久久肉伦网站 | 99在线 | 亚洲 | 九九综合va免费看 | 风流少妇按摩来高潮 | 成人av无码一区二区三区 | 欧美激情综合亚洲一二区 | 久久久久久九九精品久 | 国产精品久久久一区二区三区 | 亚洲精品综合一区二区三区在线 | 少妇无码av无码专区在线观看 | 中文字幕 亚洲精品 第1页 | 免费视频欧美无人区码 | 天天拍夜夜添久久精品大 | 国精产品一区二区三区 | 伦伦影院午夜理论片 | 亚洲区小说区激情区图片区 | 国产av无码专区亚洲a∨毛片 | 免费观看激色视频网站 | 亚洲中文字幕成人无码 | 欧美日韩人成综合在线播放 | 日日摸天天摸爽爽狠狠97 | 少妇邻居内射在线 | 精品 日韩 国产 欧美 视频 | 任你躁在线精品免费 | 国语自产偷拍精品视频偷 | 欧美三级不卡在线观看 | 国产99久久精品一区二区 | а√资源新版在线天堂 | 国产人妖乱国产精品人妖 | 亚洲中文字幕无码一久久区 | 婷婷综合久久中文字幕蜜桃三电影 | 少妇厨房愉情理9仑片视频 | 大屁股大乳丰满人妻 | 一个人看的www免费视频在线观看 | 国产精品视频免费播放 | 在线 国产 欧美 亚洲 天堂 | 青草视频在线播放 | 亚洲国产精品一区二区美利坚 | 狂野欧美激情性xxxx | 高清无码午夜福利视频 | av在线亚洲欧洲日产一区二区 | 久久久久久久人妻无码中文字幕爆 | 国产内射老熟女aaaa | 欧美性生交活xxxxxdddd | 特黄特色大片免费播放器图片 | 久久久婷婷五月亚洲97号色 | 国产精品二区一区二区aⅴ污介绍 | 亚洲欧美国产精品专区久久 | 国产精品亚洲综合色区韩国 | 日韩欧美中文字幕在线三区 | 亚洲人成人无码网www国产 | 精品 日韩 国产 欧美 视频 | 亚洲成在人网站无码天堂 | 亚洲精品中文字幕久久久久 | 国产成人无码一二三区视频 | 无码一区二区三区在线观看 | 亚洲精品一区二区三区婷婷月 | 国产成人av免费观看 | 国产午夜精品一区二区三区嫩草 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 婷婷丁香五月天综合东京热 | 国精产品一品二品国精品69xx | 色婷婷香蕉在线一区二区 | 成人免费视频视频在线观看 免费 | 亲嘴扒胸摸屁股激烈网站 | 东京热男人av天堂 | 国产高潮视频在线观看 | 亚洲日本在线电影 | 色情久久久av熟女人妻网站 | 国产成人午夜福利在线播放 | 国产欧美精品一区二区三区 | 午夜熟女插插xx免费视频 | 国产精品久久久久无码av色戒 | 国产成人综合色在线观看网站 | 国产偷自视频区视频 | 小鲜肉自慰网站xnxx | 2020久久香蕉国产线看观看 | 亚洲国产精品毛片av不卡在线 | 任你躁国产自任一区二区三区 | 思思久久99热只有频精品66 | 国产午夜福利亚洲第一 | 久久综合给合久久狠狠狠97色 | 午夜熟女插插xx免费视频 | 午夜免费福利小电影 | 熟妇人妻无码xxx视频 | 亚洲日韩av一区二区三区中文 | 无码精品人妻一区二区三区av | 丰满少妇女裸体bbw | 人妻少妇精品无码专区动漫 | 日韩人妻无码中文字幕视频 | 狠狠噜狠狠狠狠丁香五月 | 欧美第一黄网免费网站 | 日韩精品a片一区二区三区妖精 | 亚洲中文字幕久久无码 | 久久久精品国产sm最大网站 | 乱码午夜-极国产极内射 | 女人和拘做爰正片视频 | 亚洲熟妇色xxxxx欧美老妇 | 巨爆乳无码视频在线观看 | 免费国产成人高清在线观看网站 | 欧美丰满少妇xxxx性 | 亚洲a无码综合a国产av中文 | 亚洲国产欧美日韩精品一区二区三区 | 粉嫩少妇内射浓精videos | 日本一区二区三区免费高清 | aa片在线观看视频在线播放 | 中文字幕乱码人妻二区三区 | 色一情一乱一伦一区二区三欧美 | 99久久人妻精品免费一区 | 国产精品久久久午夜夜伦鲁鲁 | 中文字幕无码人妻少妇免费 | 中文字幕精品av一区二区五区 | 久久人妻内射无码一区三区 | 亚洲第一无码av无码专区 | 久久99精品国产麻豆 | 亚洲精品一区二区三区大桥未久 | 兔费看少妇性l交大片免费 | 蜜桃视频韩日免费播放 | 国产精品免费大片 | 成人无码精品一区二区三区 | 亚洲色成人中文字幕网站 | 国产乱子伦视频在线播放 | 妺妺窝人体色www婷婷 | 天天躁日日躁狠狠躁免费麻豆 | aⅴ亚洲 日韩 色 图网站 播放 | 色婷婷香蕉在线一区二区 | 久久久中文久久久无码 | 一本色道婷婷久久欧美 | 国内综合精品午夜久久资源 | 99精品久久毛片a片 | 中文毛片无遮挡高清免费 | aⅴ亚洲 日韩 色 图网站 播放 | 窝窝午夜理论片影院 | 国产免费无码一区二区视频 | 日韩欧美成人免费观看 | 日欧一片内射va在线影院 | 国产免费久久久久久无码 | 亚洲精品美女久久久久久久 | 国产成人av免费观看 | 日本一卡2卡3卡四卡精品网站 | 日本免费一区二区三区最新 | 特级做a爰片毛片免费69 | 亚洲gv猛男gv无码男同 | 国产特级毛片aaaaaa高潮流水 | 天天av天天av天天透 | √8天堂资源地址中文在线 | 久久人妻内射无码一区三区 | 国产亚洲精品久久久ai换 | 乱人伦人妻中文字幕无码久久网 | 欧美猛少妇色xxxxx | 精品无码一区二区三区爱欲 | 亚洲日本在线电影 | 伊人久久婷婷五月综合97色 | 青青青爽视频在线观看 | 日本在线高清不卡免费播放 | 久久国产精品二国产精品 | 日日橹狠狠爱欧美视频 | 国产成人无码av片在线观看不卡 | 久久天天躁狠狠躁夜夜免费观看 | 一本色道婷婷久久欧美 | 成人性做爰aaa片免费看不忠 | 最近的中文字幕在线看视频 | 午夜理论片yy44880影院 | 久久综合久久自在自线精品自 | 日韩无套无码精品 | 亚洲国产精华液网站w | 亚洲日本一区二区三区在线 | 伊人久久大香线蕉午夜 | 国产小呦泬泬99精品 | 十八禁真人啪啪免费网站 | 国产成人精品久久亚洲高清不卡 | 精品久久久中文字幕人妻 | 精品无码成人片一区二区98 | 国产香蕉尹人视频在线 | 中文字幕无码日韩欧毛 | 色狠狠av一区二区三区 | 国内精品人妻无码久久久影院蜜桃 | 亚洲最大成人网站 | 欧美精品国产综合久久 | 女人被爽到呻吟gif动态图视看 | 国产av久久久久精东av | 香蕉久久久久久av成人 | 中文字幕精品av一区二区五区 | 国产综合久久久久鬼色 | 国产卡一卡二卡三 | 成人综合网亚洲伊人 | 免费乱码人妻系列无码专区 | 亚洲精品国产第一综合99久久 | 2020最新国产自产精品 | 东京一本一道一二三区 | 野狼第一精品社区 | 久久久久se色偷偷亚洲精品av | 国产成人无码av一区二区 | 天海翼激烈高潮到腰振不止 | 天天躁日日躁狠狠躁免费麻豆 | 亚洲天堂2017无码 | 久久国内精品自在自线 | 99久久久无码国产精品免费 | 天堂а√在线中文在线 | 小sao货水好多真紧h无码视频 | 美女黄网站人色视频免费国产 | 99麻豆久久久国产精品免费 | 国产av一区二区精品久久凹凸 | 国产精品亚洲一区二区三区喷水 | 国产国产精品人在线视 | 日本在线高清不卡免费播放 | 国产97人人超碰caoprom | 好爽又高潮了毛片免费下载 | 久久综合网欧美色妞网 | 少妇无套内谢久久久久 | 美女张开腿让人桶 | 久久无码专区国产精品s | 久久久中文字幕日本无吗 | 成人av无码一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 精品一区二区三区无码免费视频 | 蜜臀av无码人妻精品 | yw尤物av无码国产在线观看 | 四虎影视成人永久免费观看视频 | 日本高清一区免费中文视频 | 亚洲精品国产第一综合99久久 | 天天综合网天天综合色 | 国产亲子乱弄免费视频 | 性做久久久久久久久 | 一二三四在线观看免费视频 | 少妇一晚三次一区二区三区 | 国产精品福利视频导航 | 久久久www成人免费毛片 | 中文字幕无码热在线视频 | 亚洲精品国产精品乱码不卡 | 亚洲国产精品毛片av不卡在线 | 性生交大片免费看l | 99精品无人区乱码1区2区3区 | 亚洲精品国产a久久久久久 | 国产av一区二区精品久久凹凸 | 沈阳熟女露脸对白视频 | 国产美女精品一区二区三区 | 国产乱人伦偷精品视频 | 图片小说视频一区二区 |