天天看點

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

歡迎大家來到“Python從零到壹”,在這裡我将分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界。所有文章都将結合案例、代碼和作者的經驗講解,真心想把自己近十年的程式設計經驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。

Python系列整體架構包括基礎文法10篇、網絡爬蟲30篇、可視化分析10篇、機器學習20篇、大資料分析20篇、圖像識别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關注、點贊和轉發就是對秀璋最大的支援,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。

本文對應源代碼如下:

同時,作者新開的“娜璋AI安全之家”将專注于Python和安全技術,主要分享Web滲透、系統安全、人工智能、大資料分析、圖像識别、惡意代碼檢測、CVE複現、威脅情報分析等文章。雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步。

@[toc]

一.條件語句

在講訴條件語句之前,需要先補充語句塊的知識。語句塊并非一種語句,它是在條件為真時執行一次或執行多次的一組語句,在代碼前放置空格縮進即可建立語句塊。它類似于C、C++、Java等語言的大括号({ })來表示一個語句塊的開始和結束。

在Python中使用冒号(:)來辨別語句塊的開始,塊中每一條語句都有縮進并且縮進量相同,當回退到上一層縮進量時,就表示目前語句塊已經結束。 下面開始詳細講解條件語句。

1.單分支

單分支文法如下:

if <condition>:
    <statement>
    <statement>           

< condition > 是條件表達式,基本格式為< expr >< relop >< expr >;< statement >是語句主體。判斷條件如果為真(True)就執行語句,如果為假(False)就跳過語句,執行下一條語句。條件判斷通常有布爾表達式(True、False)、關系表達式(>、<、>=、<=、= =、!=)和邏輯運算表達式(and、or、not,其優先級從高到低是not、and、or)等。

注意:在Python2.x版本中,條件表達式是不強制要求用括号括起來的,但條件表達式後面一定要添加英文冒号字元。

a = 10
if a==10:
    print('變量a等于10')
    print(a)           

輸出結果如下:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

2.二分支

二分支文法如下:

if <condition>:
    <statement>
    <statement>
else:
    <statement>
    <statement>           

執行過程如下圖所示:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

如果條件語句< condition >為真,if後面的語句就被執行,如果為假,則執行else下面的語句塊。條件語句的格式為:< expr >< relop >< expr >,其中< expr >為表達式、為關系操作符。例如:a >= 10、b != 5等。

a = 10
if a >= 5:
    print('變量a大于等于5')
    print(a)
else:
    print('變量a小于5')
    print(a)           

輸出結果如下,由于變量a為10,大于5執行if中的語句。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

3.多分支

if多分支由if-elif-else組成,其中elif相當于else if,同時它可以使用多個if的嵌套。具體文法如下所示:

if <condition1>:
    <case1 statements>
elif<condition2>:
    <case2 statements>
elif<condition3>:
    <case3 statements>
...
else:
    <default statements>           

該語句是順序評估每個條件,如果目前條件分支為True,則執行對應分支下的語句塊,如果沒有任何條件成立,則執行else中的語句塊,其中else是可以省略的。代碼如下:

num = input("please input:")
num = int(num)
print(num)
if num >= 90:
    print('A Class')
elif num >= 80:
    print('B Class')
elif num >= 70:
    print('C Class')
elif num >=60:
    print('D Class')
else:
    print('No Pass')           

輸出值為76,則在80到70之間,成績為C等級,輸出結果如下圖所示。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

注意:由于Python不支援switch語句,是以多個條件判斷,隻能用elif來實作,如果判斷需要多個條件需同時判斷時,可以:

  • 使用or (或),表示兩個條件有一個成立時判斷條件成功
  • 使用and (與),表示隻有兩個條件同時成立的情況下,判斷條件才成功
# 判斷值是否在小于0或大于10
num = 10
if num < 0 or num > 10:    
    print('hello')
else:
    print('undefine')
# 輸出結果: undefine


# 判斷值是否在0~5或者10~15之間
num = 8
if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):    
    print('hello')
else:
    print('undefine')           

輸出結果如下圖所示:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

當if有多個條件時可使用括号來區分判斷的先後順序,括号中的判斷優先執行,此外and和or的優先級低于>(大于)、<(小于)等判斷符号,即大于和小于在沒有括号的情況下會比與或要優先判斷。

同時,你也可以在同一行的位置上使用if條件判斷語句,如下執行個體。但不見大家使用類似的文法,在我們編寫項目或實戰中,很可能你的代碼會供别人學習,有時你隻負責其中一部分,良好的代碼格式及注釋是非常必要的。

var = 520
if (var ==520): print("感謝您關注娜璋AI安全之家")           

二.循環語句

Python循環語句主要分為while循環和for循環,它允許我們執行一個語句或語句組多次。

1.while循環

while循環語句的基本格式如下:

while <condition>:
    <statement>
else:
    <statement>           

執行流程如下圖所示:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

條件表達式< condition >如果為真時,則循環體重複執行,直到條件判斷為假,循環體終止,如果第一次判斷條件就為假,則直接跳出循環執行else語句,注意else語句可以省略,同時冒号(:)開始進入循環體,縮進區分語句塊。條件語句condition包括布爾表達式(True、False)、關系表達式(>、<、>=、<=、= =、!=)和邏輯運算表達式(and、or、not)等。

案例1:1+2+...+100

i = 1  
s = 0  
while i <= 100:  
    s = s+i  
    i = i+1  
else:  
    print('over')
print('sum = ', s)           

這段代碼是作者寫部落格或授課時,講述循環語句最常用的例子,求1+2+3+....+100的結果,答案是5050。該段代碼反複執行“i<=100”判斷,當i加到101時,判斷i>100為假則結束循環執行else語句。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

案例2:循環打開網站

再舉一個執行個體,通過定義一個while循環,調用webbrowser庫的open_new_tab()函數循環打開百度首頁網址,下面代碼反複打開了百度首頁5次。完整代碼如下:

import webbrowser as web  
import time  
import os

i=0  
while i<5:  
    web.open_new_tab('http://www.baidu.com')  
    i=i+1  
    time.sleep(0.8)  
else:  
    os.system('taskkill /F /IM iexplore.exe')  
print('close IE')           

代碼是調用webbrowser庫中open_new_tab()函數打開視窗(百度連結)5次。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

最後循環結束執行os.system()作業系統函數,調用taskkill指令結束IE浏覽器程序(Iexplore.exe),其他浏覽器程式修改為chrome.exe、qq.exe或firefox.exe即可。其中參數“/F”表示強行終止程式,“/IM”表示圖像,如下圖所示。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

==注意:上述代碼實作了循環打開某個網站,可以應用于刷取網頁浏覽量或Web開發測試等功能。比如新浪部落格等部分網頁打開一次浏覽器會計算一次浏覽次數,通過上面這段代碼可以循環增加閱讀量,部分網站又是通過浏覽量進行排序的,不妨試試看。作者引入該代碼僅為讀者了解循環,也為後面的爬蟲知識埋下伏筆。==

案例3:奇數和偶數計算

最後補充一個奇數和偶數計算的案例,其基本流程如下圖所示:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

代碼如下:

numbers = [12, 37, 5, 42, 8, 3]
even = []
odd = []
while len(numbers) > 0:
    number = numbers.pop()
    if(number % 2 == 0):      #偶數判斷
        even.append(number)
    else:
        odd.append(number)
#輸出結果
print(even)
print(odd)           
[8, 42, 12]
[3, 5, 37]           

2.for循環

for循環語句的基本格式如下:

for <var> in <sequence>:
    <statement>
    <statement>           

流程圖如下:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

自定義循環變量var周遊sequence序列中的每一個值,每個值執行一次循環的語句塊。sequences表示序列,常見類型有list(清單)、tuple(元組)、strings(字元串)和files(檔案)。下面的代碼是計算1到100的求和,輸出三角形星号的示例。

#元組循環
tup = (1,2,3,4,5)  
for n in tup:  
    print(n)  
else:  
    print('End for\n')
    
#計算1+2+...+100
s = 0
for i in range(101):
    s = s + i
print('sum =', s)

#輸出三角形星号
for i in range(10):
    print("*"*i)           

輸出結果如下圖所示,循環周遊元組tup變量中的值,依次擷取并輸出;然後計算1累加到100,range(101)表示依次擷取101範圍内的100個數字,其累加結果為5050;最後輸出星号三角形,print “ ” i 代碼中,第一個星号表示輸出星号字元串,第二個星号是乘法,表示輸出5個星号,終輸出三角形。列印圖形是程式設計基礎,使用Python實作要比C語言容易很多,但原理邏輯是一樣的。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

3.Break、Continue和Pass語句

Break和Continue是兩個常用的跳出循環語句。

  • Break語句

跳出最内層while、for循環,在語句塊執行過程中終止循環,并且跳出整個循環。

s = 0
num = 0
while num<20:
    num += 1
    s += num
    if s > 100:
        break
print("The sum is", s)
# The sum is 105           

當求和變量s大于100的時候,進入if判斷,執行break跳出循環,最後輸出105。

  • Continue語句

在語句塊執行過程中終止目前循環,跳出該次循環,執行下一次循環。

for num in range(10):
    if num % 2 == 0:
        print("even number:", num)
        continue
    print("number:",num)           

輸出結果如下,當為偶數的時候continue跳出目前循環,for循環中隻輸出偶數。

>>> 
even number: 0
number: 1
even number: 2
number: 3
even number: 4
number: 5
even number: 6
number: 7
even number: 8
number: 9
>>>            
  • pass語句

pass語句是空語句,為了保持程式結構的完整性所使用的。

# 輸出 Python 的每個字母
for letter in 'Python':
   if letter == 'h':
      pass
      print('這是 pass 塊')
   print('目前字母 :', letter)
print("Good bye!")           
[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

4.嵌套循環

while基本文法如下:

while expression:
   while expression:
      statement(s)
   statement(s)           

for基本文法如下:

for iterating_var in sequence:
   for iterating_var in sequence:
      statements(s)
   statements(s)           

下面以最簡單的冒泡排序算法來補充循環嵌套知識。冒泡排序是最常見到的排序算法,也是很基礎的一種排序算法。它的實作思想是:

  • ==相鄰的兩個元素進行比較,然後把較大的元素放到後面(正向排序),在一輪比較完後最大的元素就放在了最後一個位置,像魚兒在水中吐的氣泡在上升的過程中不斷變大。==
def bubble_sort(list):
    count = len(list)
    for i in range(count):
        for j in range(i + 1, count):
            if list[i] > list[j]:
                list[i], list[j] = list[j], list[i]
    return list

#排序算法
list = [3, 91, 23, 14, 56, 9]
print("排序前:", list)
res = bubble_sort(list)
print("排序後:", res)           
[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

你可能會疑惑bubble_sort()是什麼?其實它是一個自定義函數,下面我們馬上講解。

三.函數

當讀者需要完成特定功能的語句塊時,需要通過調用函數來完成對應的功能。函數分為無參數函數和有參數函數,當函數提供不同的參數時,可以實作對不同資料的處理。下面從自定義函數、系統自帶函數、第三方庫函數三個方面進行講解。

1.自定義函數

(1) 定義方法

為了簡化程式設計,提高代碼的複用性,可以自定義函數,函數定義如下:

def funtion_name([para1,para2...paraN]):
    statement1
    statement2
      ....
    [return value1,value2...valueN]           

其中:

  • 定義函數需要使用def關鍵詞
  • function_name表示函數名,後面的冒号(:)不要忘記,并且縮進
  • [para1,para2...paraN]表示參數,可以省略,也可以多個參數
  • [return value1,value2...valueN]表示傳回值,可以無傳回值,也可以多個傳回值
  • 需要注意的是自定義函數有傳回值,主調函數就需要接受傳回的結果

函數調用時,形參被賦予真實的參數,然後執行函數體,并在函數結束調用時傳回結果。Return語句表示退出函數并傳回到函數被調用的地方,傳回值傳遞給調用程式。

首先來看一個無傳回值的求和函數fun1(),代碼如下:

#函數定義
def fun1(a,b):
    print(a,b)
    c = a + b
    print('sum =',c)

#函數調用
fun1(3,4)
# 3 4
# sum = 7           

再來看一個包含多個參數傳回的電腦函數fun2(),代碼如下,return傳回五個結果。

#函數定義
def fun2(a,b):  
    print(a,b)
    X = a + b  
    Y = a - b  
    Z = a * b  
    M = a / b  
    N = a ** b  
    return X,Y,Z,M,N

#函數調用
a,b,c,d,e = fun2(4,3)  
print('the result are ',a,b,c,d,e)
re = fun2(2,10)  
print(re)           

輸出結果如下,依次傳回加法、減法、乘法、除法、幂運算結果。

>>> 
4 3
the result are  7 1 12 1.3333333333333333 64
2 10
(12, -8, 20, 0.2, 1024)
>>>            

(2) 自定義函數參數含預定義

預設值是在自定義函數基礎上,對某些參數賦予預定義值。例如:

def fun3(a,b,c=10):
    print(a,b,c)
    n = a + b + c
    return n
  
print('result1 =',fun3(2,3))
print('result2 =',fun3(2,3,5))           

第一次調用a為2,b為3,c為預定義值10,求和輸出15;第二次調用修改了預定義值c,指派為5,求和即為2+3+5=10。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

注意:預定義值得參數不能先于無預定義值參數;同時,函數調用時,建議采用一對一指派,也可以在函數調用中給出具體形參進行指派,但需要注意的是在函數調用過程中(使用函數時),有預定義值的參數不能先于無預定義值參數被指派。

2.常見内部庫函數

Python系統内部提供了一些庫函數供大家使用,這裡主要介紹最常見的四個庫函數,即str字元串庫函數、math資料庫函數、os作業系統庫函數、socket網絡套接字庫函數。Python常見内部庫函數如下:

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

下面代碼是這四個常見内部庫函數的具體用法,代碼如下:

# -*- coding:utf-8 -*-
#字元串庫函數
str1 = "hello world"
print('計算字元串長度:', len(str1))
str2 = str1.title()
print('首字母大寫标題轉換:', str2)
str3 = '12ab34ab56ab78ab'
print('字元串替換:', str3.replace('ab',' '))

#數學庫函數
import math
print(math.pi)
num1 = math.cos(math.pi/3)
print('餘弦定律:', num1)
num2 = pow(2,10)
print('幂次運算:', num2)
num3 = math.log10(1000)
print('求以10為底的對數:', num3)

#作業系統庫函數
import os
print('輸出目前使用平台:', os.name)
path = os.getcwd()
print('擷取目前工作目錄', path)
os.system('taskkill /F /IM iexplore.exe') #關閉浏覽器程序

#網絡套接字庫函數
import socket
ip = socket.gethostbyname('www.baidu.com')
print('擷取百度ip位址', ip)           

輸出結果如下圖所示。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

3.第三方庫函數

Python作為一門開源語言,它支援各種第三方提供的開源庫供我們使用。其使用第三方函數庫時的具體格式為:

  • module_name.method(parametes)

表示“第三方函數名.方法(參數)”。例如httplib\httplib2庫是針對HTTP和HTTPS的用戶端協定,使用httplib2庫函數之前,如果沒有安裝httplib2庫會報錯“ImportError: No module named httplib2”,如圖2.18所示。

[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數一.條件語句二.循環語句三.函數四.總結

在Linux環境中,輸入指令“easy_install httplib2”可以實作自動安裝擴充包,Windows環境下需要安裝pip或easy_install工具,再調用指令執行安裝。在後續文章會講解pip安裝工具及用法,後面章節也會介紹各種第三方庫函數實作資料爬取和分析操作。

四.總結

無論如何,作者都希望這篇文章能給您普及一些Python知識,更希望您能跟着我一起寫代碼,一起進步。如果文章能給您的研究或項目提供一些微不足道的思路和幫助,就更欣慰了。作者最大的期望就是文章中的一些故事、話語、代碼或案例對您有所幫助,緻那些努力奮鬥的人。

**遺憾,讓我們懂得完美。

逝去,讓我們不斷前行。

她夜色中的身姿是那麼的美。**

原文位址:

https://blog.csdn.net/Eastmount/article/details/108479670

(By:娜璋之家 Eastmount 2020-12-07 夜于武漢 )

參考文獻如下:

[1] 作者書籍《Python網絡資料爬取及分析從入門到精通》

[2] 作者部落格:

https://blog.csdn.net/Eastmount

[3]

https://www.runoob.com/python/python-if-statement.html