跳到主要內容

Python筆記(4)-If判斷式的操作

 在進行程式設計中,如果有遇到需要進行決策判斷的情況時,也就是在不同的情況下有不同的結果,這時候就是需要If判斷式了。以下會介紹幾種If判斷式的寫法:單向判斷式、雙向判斷式、多向判斷式、巢狀判斷式

4.1 單向判斷式

只要滿足某個條件才顯示出結果,否則不做任何動作。我們用以下的例子進行說明。

程式碼

#單向If判斷式

SysPwd="1234"

Pwd=input("請輸入密碼:")

if Pwd==SysPwd:

    print("登入成功!")

Python畫面

滿足If後面的條件,就會顯示下一行的print(“登入成功!”),此處的print(“登入成功!”)要特別注意,必須要做縮排(1個tab鍵或4個空白鍵的距離),電腦會辨識縮排的部分為滿足條件所需執行的程式碼。另外,此處的If程式需區塊可改寫成一行,以減少程式撰寫空間,如下寫法:if Pwd==SysPwd: print("登入成功!")

4.2 雙向判斷式

只要滿足某個條件才顯示出結果,否則顯示出另一個結果。我們用以下的例子進行說明。

程式碼

#雙向If判斷式

SysPwd="1234"

Pwd=input("請輸入密碼:")

if Pwd==SysPwd:

    print("登入成功!")

else:

    print("密碼錯誤!")

Python畫面

滿足If後面的條件,就會執行下一行的print(“登入成功!”);若不滿足If後面的條件,則會執行else: 下一行的print(“密碼錯誤!”),撰寫過程與單向判斷式一樣,皆需要縮排才能執行。

4.3 多向判斷式

如果遇到多個條件進行判斷且須呈現不同結果,此時就需要用到多條件判斷式。

我們用以下倆的例子進行說明。

程式碼

#多向判斷式

print("成績判斷系統".center(30,"="))

score=float(input("請輸入總成績..."))

if score>=90:

    print("您的等級為\"A\"")

elif 80<=score<90:

    print("您的等級為\"B\"")

elif 70<=score<80:

    print("您的等級為\"C\"")

else:

    print("您的等級為\"D\"")

Python畫面

此範例是輸入一個分數,如果分數大於等於90,則顯示A等級;介於80~90分,則顯示B等級;介於70~80,則顯示C等級;低於70分,則顯示D等級。其中第一個條件寫在if後面,最後一個條件寫在else後面,這部分與雙向判斷式一樣,但其他條件,前面則都是寫上elif。

程式碼

#多向判斷式(2)

print("學童成績表".center(30,"="))

name=input("請輸入學生姓名:")

score=float(input("請輸入數學成績..."))

print("學生姓名","數學成績","等級",sep=" "*2)

print("-"*30)

if  score>90:

    grade="A"

elif 80<=score<90:

    grade="B"

elif 70<=score<80:

    grade="C"

else:

    grade="D"

print("{:<8s}{:>6.2f}{:>6s}".format(name,score,grade))

Python畫面

此範例跟上一個範例差異不大,只是在滿足條件後將等級指定到grade變數,最後結合上一節學的字串函數與格式化相關操作,呈現出一個簡易報表。

4.4 巢狀判斷式

巢狀判斷式是在if判斷式中,在滿足條件下所執行的工作一樣還是if判斷式,這樣一層一層的if判斷式的結構,就是巢狀判斷式。這種判斷式結構反而是比前三個結構還要常使用,所以初學者務必學會如何撰寫。用以下範例進行說明:

<百貨公司折扣計算>

讓顧客輸入購物金額,若金額在100000以上,則打8折,金額在50000以上就打85折,金額在30000以上就打9折,在10000以上就打95折。

程式碼

#巢狀判斷式

money=int(input("請輸入購買金額:"))

if money>=10000:

    if money>=100000:

        print("打折後的金額{}元:".format(money*0.8))

    elif money>=50000:     

        print("打折後的金額{}元:".format(money*0.85))

    elif money>=30000:

        print("打折後的金額{}元:".format(money*0.9))

    else:

        print("打折後的金額{}元:".format(money*0.95))

else:

    print("此購買金額無法打折!")

Python畫面

留言

這個網誌中的熱門文章

RPA-Uipath筆記(1) - 如何從網路上下載資料並存至指定路徑

最近在做 RPA 相關專案時遇到了這個問題: 如何從網路上下載資料並存至指定路徑? 針對這個問題我們採取的解決方案是 先讓檔案下載到電腦的預設路徑,再將檔案移動到我們指定的資料夾 。 以下我們用下載政府公開資料平台的資料 ("https://data.gov.tw/dataset/116285") 為例, Uipath 的流程建立如下: 使用到了 Wait for Download 、 Move File 、 Delete File 三個 Activity , Wait for Download 中 Monitored folder 必須放瀏覽器中設定的下載檔案的預設路徑且關閉詢問儲存位置。 Downloaded file 則是設定一個變數名稱 downloadfile( 可自訂 ) ,此變數的資料型態是 FileInfo 。中間則放入下載的流程步驟,從下載開始到結束都會在此 Activity 中執行完畢,執行完後所下載的檔案的相關資訊都會被存放在變數 downloadfile 中。 接下來是將檔案從預設下載路徑中移至指定路徑,這裡就需要下載預設路徑與指定路徑,這兩個我們在流程一開始就建了了兩個變數 dnlo_path 、 asng_path ,寫法如下: dnlo_path = "C:\Users\" +system.Environment.UserName+ "\Downloads" system.Environment.UserName à VB 語法,代表目前電腦的使用者名稱。 asng_path = "D:\Bolg 資料 \Uipath\Uipath(1)" Move File Activity 中 From 要放入目前檔案的位置; To 則要放入檔案存放的指定的位置,但因為是要做檔案的移動,所以以上兩個路徑後面都要再加上檔案名稱,這時可以使用 downloadfile 這個變數的屬性值叫出檔案名稱( downloadfile.Name ),當檔案名稱是隨機變動的時候,非常好用。另外,特別值得注意的是, To 的部分在加上檔案名稱時,可以不用用原始檔案的名稱,這時可以同時達到修改檔名的效果。 Overwrite 的部分打勾代表再重複執行一次的時...

RPA-Uipath(5)-如何讀取Mail與取得Mail的資訊

本篇主要介紹 Uipath 取得 mail 相關資訊與附件的方法,因為 mail 的種類眾多,本範例以 Gmail 為例。首先在使用 Uipath 取得 Gmail 相關資訊前須對 Google 帳戶的安全性進行兩階段驗證設定,設定方式如下: Step1. 點選 ” 管理你的 Google 帳戶 ” Step2.  點選 ” 安全性 ” à ” 兩階段驗證 ” à 點選 ” 開始使用 ” Step3.  依 Google 所提示步驟,您最後會取得一組密碼,請務必將此密碼記下。 接下來要開始使用 Uipath 擷取 mail 相關資訊,一開始我們先使用 Get Password 儲存 mail 登入的密碼,此時密碼不是使用您真正的密碼而是使用剛剛兩階段驗證後取得的密碼,並儲存於變數 password 。 接下來使用 Get IMAP Mail Messages 來取得 mail 的相關資訊,在使用 Get IMAP Mail Messages 時必須在其屬性設定區塊進行一些參數設定。 Port 欄位填入 993 , Server 欄位填入 "imap.gmail.com" , Email 欄位填入您的 Email , Password 欄位填入 變數 password , Message 欄位我們用 MailMessage 變數填入 Mail 的相關資訊都會存在 MailMessage 變數中,我們可以用 For Each 迴圈逐一取得 mail 的相關資訊。 For Each 的屬性區塊部分也需要進行一些參數設定, List of item 欄位需填入 MailMessage 變數, TypeArgument 則須設定為 System.Net.Mail.MailMessage 。 設定完成後,我們先用 Write Line 將信件的主旨印出做為測試( 這邊我們只印出前 5 封信件的主旨,可在 Get IMAP Mail Messages 的屬性區塊中 Top 欄位中設定 ),如果要印出信件主旨,需要用 item.Subject 屬性,如要印出其他資訊,我們將常用的幾個列在以下表格: 最後,有些信件會附帶一些附件,我們如何將這些物件儲存下來呢 ? 這邊只需要用到 Save Attachments 即可。我們將其放在迴圈內以下載每個有附件的 mail...

RPA-Uipath(6)-如何讀取檔案的相關日期與時間

這一篇我們主要要說明如何批次將檔案的 ” 建立時間 ” 、 ” 修改時間 ” 、 ” 存取時間 ” 擷取出來,並整理匯出一個 Excel 表格。 在說明之前,我們簡單說明一下我們要擷取的是那些時間,我們可以針對任一個檔案,按下右鍵,選取內容,就會跳出該檔案的相關資訊,其中就有所謂的 ” 建立時間 ” 、 ” 修改時間 ” 、 ” 存取時間 ” ,如下圖所示,我們的目的就是將這些時間一一擷取出來。 要擷取以上的這些時間,需要用到 FileInfo() 物件,用法如下: 1.      建立時間: new FileInfo( 檔案路徑 ).CraeationTime.ToString( 日期時間格式 ) 2.      最後修改時間: new FileInfo( 檔案路徑 ).LastWriteTime.ToString( 日期時間格式 ) 3.      最後存取時間: new FileInfo( 檔案路徑 ).LastAccessTime.ToString( 日期時間格式 ) 因為我們的範例要批次讀取一個資料夾中多個檔案,所以會用到 Directory.GetFiles( 資料夾路徑 ) ,此函數會回傳資料夾中所有檔案的路徑並以 List 型態儲存。 以下我們說明我們如何用 Uipath 達到此目的: 我們一開始先用 FilePathList 變數儲存資料夾中所有檔案的路徑,建立一個空的 DataTable ,其中我們建立了四個欄位 ”FileName” 、 ”CreationTime” 、 "LastModifiedTime" 、 ”LastAccessTime” 。 接下來,利用 For Each 對每一個檔案,擷取以上四個資訊並分別用四個變數儲存 FileName 、 FileCreationTime 、 FileLastModifiedTime 、 FileLastAccessTime 並將次四個資訊放入 DataTable 中 ( 利用 Add Data Row 的 Activity) 。 For Each 結束後,我們將 DataTable 寫入 Excel 中並存於同一個資料夾,如下圖所示。