[10] Python條件判斷語句(一)

1. 概述

我們已經了解了Python的一些基礎知識,今天我們要看一下Python的條件判斷語句,由於從現在開始內容要求邏輯運算,在介紹的時候為了照顧沒有計算機科學基礎的同學,我會涵蓋一些非常基礎的邏輯演算法知識,已經會的同學可以跳過這些內容。

  • 計算機編程的原理簡要介紹
  • 集成開發環境PyCharm
  • 變數名、數字、字元串、列表
  • 句式、注釋
  • 輸入和輸出
  • 條件判斷語句
  • 循環語句
  • 函數
  • 模塊和引入
  • 各類數據結構

2. 流程圖

首先,當我們做事情的時候,怎麼進行判斷呢?一個最直觀的表現手法是畫流程圖,其實在熟悉演算法後,我們一般會跳過這個步驟,但在進行項目規劃時,如果能先把流程圖畫好,可以事半功倍。當然本教程主要目的是教大家怎麼編寫Python,並不會對流程圖的各個進行細節闡述,我會通過實例來給大家展示一下流程圖的思維方式。

畫流程圖我們可以使用PowerPoint,就是做幻燈片的那個,當然,還有一款國外的強大在線應用draw.io,我們可以選擇保存到各個網盤或者直接本地電腦中,點擊創建空白圖表就行。土豪可以用微軟的那個Visio,聽說很貴。

看一道題:

期末算分時,我們需要輸入一個學生的各科分數,通過比重判斷這個學生最後等第。科目有五門,語文佔30%,數學30%,英語20%,計算機10%,經濟10%。全部100分制,總分到達90分為A,到達80分為B,到達70分為C,到達60分為D,59分及以下為F。

至於為什麼選計算機和經濟作為選修,因為筆者就是這倆專業的。

那麼流程圖怎麼畫?我們可以通過draw.io的各個組件實現,不過首先我們腦海里需要形成一個概念,即

  1. 首先程序要拿到數據,即要求老師輸入各科分數;
  2. 接著計算該學生總成績;
  3. 接著判斷學生的等第:
    1. 如果學生分數為90及以上,等第為A;
    2. 如果沒有90,但是達到了80,則為B;
    3. 如果沒有80,但是達到了70,則為C;
    4. 如果沒有70,但是達到了60,則為D;
    5. 如果以上條件都沒達到,則拿了60分以下,給F;
  4. 最後在屏幕上輸出等第,告知老師。

最後流程圖長這樣:

3. if-elif-else語句

條件判斷語句,最常見的就是if-elif-else語句了,if和else很好理解,即如果和否則,感覺就跟我們常說的「非黑即白」同一個邏輯,

#讓用戶輸入一個整數來判斷奇偶nnumber = int(input("Please enter an integer: "))n#如果整數除以2餘數是1,則為奇數,否則為偶數nif number % 2 == 1:n print("It is an odd number.")nelse:n print("It is an even number.")n

也就是說,像這種滿足了一個條件,進行如下操作,不滿足的話那就怎麼樣怎麼樣的,我們可以直接if-else。

有時候我們可能不滿足某一條件時,我們就什麼也不做,那一個if就夠了,else不是必須要的。比如:

#讓用戶輸入一個整數來判斷奇偶nnumber = int(input("Please enter an integer: "))n#如果整數除以2餘數是1,則告訴用戶它是奇數,不然什麼都不說,無可奉告nif number % 2 == 1: #兩個等號==來判斷左右的值是否相同n print("It is an odd number.")n

雖然這個程序看著很調皮,我們輸入一個數,如果是奇數,程序會顯示,這是個奇數,如果輸入的偶數,那程序就默默地結束了,什麼也不會顯示。

那麼有時候我們會遇到這樣的情況,如果我們滿足了條件一,我們執行以下操作,那麼不滿足條件一卻滿足了條件二,我們執行以下操作,如果不滿足二滿足三又怎麼樣怎麼樣,什麼都不滿足又怎麼樣怎麼樣,比如流程圖那道題,我複製粘貼下來:

期末算分時,我們需要輸入一個學生的各科分數,通過比重判斷這個學生最後等第。科目有五門,語文佔30%,數學30%,英語20%,計算機10%,經濟10%。全部100分制,總分到達90分為A,到達80分為B,到達70分為C,到達60分為D,59分及以下為F。

我們則需要使用elif,意思就是「否則如果」(else if不知道怎麼翻譯了),具體看一下怎麼寫代碼:

#首先,要求老師輸入各科成績nliterature = int(input("Please enter your literature score: "))nmath = int(input("Please enter your math score: "))nenglish = int(input("Please enter your english score: "))ncomputer = int(input("Please enter your computer score: "))neconomics = int(input("Please enter your economics score: "))nn#其次,計算總分,0.1、0.2之類的可以直接寫成.1、.2ntotal = literature * .3 + math * .3 + n english * .2 + computer * .1 + economics * .1nn#根據總分判斷等第nif total >= 90:n grade = "A"nelif total >= 80:n grade = "B"nelif total >= 70:n grade = "C"nelif total >= 60:n grade = "D"nelse:n grade = "F"nn#顯示等第nprint("The students grade is {}".format(grade))n

我們看一下if-elif-else這塊:

if total >= 90: #很好理解,如果總分大於等於90,得An grade = "A"nelif total >= 80: #如果上面不滿足,總分小於90,那麼判斷是不是80+,是的話得Bn grade = "B"nelif total >= 70: #如果上面不滿足,總分小於80,那麼判斷是不是70+,是的話得Cn grade = "C"nelif total >= 60: #如果上面不滿足,總分小於70,那麼判斷是不是60+,是的話得Dn grade = "D"nelse: #如果上面都不滿足,總分都小於60了,給Fn grade = "F"n

我們可以看到這個判斷順序是從上到下的,不滿足某條件,就會向下看是否滿足接下來的一個條件,按順序進行,這裡要注意,一旦滿足某一條件,就會自動忽略接下來的判斷

如果我們把上面的代碼倒著寫,把if-elif-else改成如下:

if total >= 0:n grade = "F"nelif total >= 60:n grade = "D"nelif total >= 70:n grade = "C"nelif total >= 80:n grade = "B"nelse:n grade = "A"n

這就出問題了,如果得了0分或0分以上,給F,但是,一般的課程都是0粉或0分以上,輸入的分數肯定滿足該條件,grade這個變數就直接被賦了F這個值,滿足了條件一,就沒了所謂的否則和否則如果,自動忽略接下來的條件二三四五。做出這個程序的人估計要被學霸學神們吊著打,考試拿滿分,等第亮紅燈。為了保護程序猿,又不傷害程序猿的自尊(等第還是倒著寫,但是等第要給對),我們該怎麼修改呢?

if total < 60:n grade = "F"nelif total < 70:n grade = "D"nelif total < 80:n grade = "C"nelif total < 90:n grade = "B"nelse:n grade = "A"n

這樣就好多了,如果沒拿到60分,給F;如果拿到了,但是沒到70,給D;如果到70沒到80,給C,以此類推。

有同學就會問了,為什麼不給一個區間,看著就不會出錯。這樣做可以,但是沒有必要,上面那段代碼等同於:

if total < 60:n grade = "F"nelif 60 <= total < 70:n grade = "D"nelif 70 <= total < 80:n grade = "C"nelif 80 <= total < 90:n grade = "B"nelse:n grade = "A"n

但是這段代碼明顯就比較冗雜且沒有必要,如果不滿足條件1,那麼自然total已經大於等於60了,無非再重申一遍。記住Python是一門優雅簡潔的語言,我們編程必須要做到簡潔幹練。

4. 篇幅縮減

我們在本文看到了各種對比大小的符號,比如兩個等號==,大於小於,我想把它們放到下面的一篇文章介紹。我也意識到之前的文章都有點太長了,考慮到大家讀著讀著會失去耐心,再者我自己也不想一下子寫太多(懶了),我打算把原來一篇文章的量進行拆解,方便你我他,同時貫徹長輩們的諄諄教誨:

謝謝觀賞!


推薦閱讀:

【Kotlin填坑-02】使用高階函數後的when語句
想學編程,朋友說先下載 Linux 玩,下什麼版本好?
按照現在硬體發展的速度,是否還需要高效的代碼?

TAG:Python | 计算机科学 | 编程 |