if語句,控制程序走向哪里

python的if語句,是你接觸到的第一種可以控制程序走向的技術(shù),是馴服程序的重要手段,是你第一次嘗試用代碼表達(dá)邏輯。
以判斷閏年為例,閏年的判斷邏輯總結(jié)如下:如果年份是4的整數(shù)倍,一般來說是閏年,但如果年份是100的整數(shù)倍,那么必須同時是400的整數(shù)倍才是閏年。
判斷閏年的邏輯并不復(fù)雜,但將他們拆解分析并轉(zhuǎn)化為代碼,于初學(xué)者而言則并非易事。不了解編程的人總以為做一件事情對應(yīng)著一條具體的計算機(jī)指令,只要掌握了這個指令,就可以讓計算機(jī)給出自己想要的結(jié)果。
然而實際的情況是,計算機(jī)一無所獲知,需要你用最基礎(chǔ)的指令經(jīng)過一系列的拼裝組合,得到一組緊密配合的指令,這一組指令就是我們最終所寫出來的代碼。
計算機(jī)如何判斷一個年份是否為4的整數(shù)倍呢?
首先,在程序里,要將年份存儲為int類型的數(shù)據(jù),然后對4取模, 假設(shè)年份是是2020年,那么對4取模的表達(dá)式就是2020 % 4,如果取模的結(jié)果是0,那么2020必然是4的整數(shù)倍,取模的過程就是除法取余數(shù)的過程,小學(xué)就已經(jīng)學(xué)過了。
ok,分析到這里,就要用到if語句了,你在程序里,必須對某個事情的真假做出判斷,并依據(jù)結(jié)果來決定接下來要做什么,這就是if語句的作用。
3.1 什么是邏輯分支
if 2020 % 4 == 0:passelse:print('不是閏年')
以上,我寫出了程序的主體結(jié)構(gòu),如果2020不能被4整除,一定不是閏年,在else語句塊里使用print語句輸出結(jié)果。
if語句,elif語句,else語句,形成了多個邏輯分支,就如同一條條通道。每一條通道都有進(jìn)入的條件,只有符合條件要求時,才能進(jìn)入,而一旦進(jìn)入了某一條通道,就要在這個通道里執(zhí)行下去,直到通道結(jié)束。在這個通道里,你的一切思考都建立在進(jìn)入這個通道的初始條件之上,掌握這一點,你的思緒就不會混亂。
現(xiàn)在的程序,只有兩個邏輯分支,第一個邏輯分支里,我只寫了pass, 這部分內(nèi)容需要進(jìn)一步的分析,能否被4整除,決定了進(jìn)入哪個分支。
3.1 如何決定進(jìn)入哪個邏輯分支
if語句配合elif, else 可以構(gòu)成多個邏輯分支,在一個邏輯分支內(nèi),又可以編寫if語句,形成嵌套,那么程序在執(zhí)行時,如何決定進(jìn)入哪個邏輯分支呢?
關(guān)于這個問題,要把握住以下兩點
程序由上至下,順序執(zhí)行
同一個層級的邏輯分支,最多只會進(jìn)入其中一個
程序由上至下,順序執(zhí)行
不論if,elif, else 構(gòu)成多少邏輯分支,都要遵守順序執(zhí)行的規(guī)則
if expr_1:block_1elif expr_2:block_2elif expr_3:if expr_3_1:block_3_1elif expr_3_2:block_3_2else:block_3_3elif expr_4:block_4else:block_5
程序由上至下,順序執(zhí)行,逐個判斷表達(dá)式,如果expr_1成立,則進(jìn)入block_1執(zhí)行,否則判斷expr_2是否成立,以此類推, 從expr_1到expr_4如果都不成立,那么則執(zhí)行block_5。
同一個層級的邏輯分支,最多只會進(jìn)入其中一個
假設(shè)expr_3表達(dá)式成立,那么則進(jìn)入到block_3繼續(xù)執(zhí)行代碼,不論block_3如何執(zhí)行,都不會再去判斷expr_4了。他們處于同一個層級,同一個層級的邏輯分支,只能進(jìn)入其中一個,一旦決定進(jìn)入某個邏輯分支,其他邏輯分支的判斷條件都會被忽略掉。
4.1 不能被100整除的分支
在年份可以被4整除的這個分支里,繼續(xù)考慮年份能否被100整除,如果不能被100整除,那必然是閏年了。
if 2020 % 4 == 0:if 2020 % 100 == 0:passelse:print('是閏年')else:print('不是閏年')
4.2 能被100整除的分支
如果可以被100整除呢,還要考慮能否被400整除,這樣,又新創(chuàng)建出兩個邏輯分支。
if 2020 % 4 == 0:if 2020 % 100 == 0:if 2020 % 400 == 0:print('是閏年')else:print('不是閏年')else:print('是閏年')else:print('不是閏年')
在能被100整除的分支里,必須滿足被400整除才是閏年,否則不是。
前面為了講解的方便,使用2020作為例子進(jìn)行講解,而真正有意義的程序應(yīng)當(dāng)是接收用戶的輸入,對輸入的數(shù)據(jù)進(jìn)行運(yùn)算處理,你可以使用input函數(shù)來接收用戶在終端的輸入,對輸入的年份是否為閏年,進(jìn)行判斷。
year = input("請輸入一個年份:")year = int(year)if year % 4 == 0:if year % 100 == 0:if year % 400 == 0:print('是閏年')else:print('不是閏年')else:print('是閏年')else:print('不是閏年')
if, elif, else 語句創(chuàng)建出邏輯分支,程序在執(zhí)行時,進(jìn)入哪個分支,取決于表達(dá)式的真假
一旦進(jìn)入某個邏輯分支,程序就要在這個邏輯分支里執(zhí)行,直到這個邏輯分支執(zhí)行結(jié)束
代碼,是一系列指令的組合,而你是那個組合指令的人,深刻理解每一條指令是務(wù)必做到的事情
