跳到主要內容

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

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

4.1 單向判斷式

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

程式碼

#單向If判斷式

SysPwd="1234"

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

if Pwd==SysPwd:

    print("登入成功!")

Python畫面

滿足If後面的條件,就會顯示下一行的print(“登入成功!”),此處的print(“登入成功!”)要特別注意,必須要做縮排(1tab鍵或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(2) - 字串分割(String.Split())與合併(String.join())

在資料清理中,我們常常需要對字串進行分割或合併,今天來簡單介紹 Uipath 中字串如何進行分割與合併。 1.      字串分隔 ( 單一分割符號 ) 我們首先建了一個字串變數 Str1= "Jimmy,Johnson,Shawn,Alan,Nick" ,我們現在想把這些人名一個一個切割出來,很明顯只要將 ”,” 作為分個符號就可以了。這邊我們建立一個陣列變數 Str1_Array=Str1.split(","c) ,這個陣列變數就會儲存分割出來的結果。我們接下來用 For each 與 Write Line 將陣列的每一項內容印出來,就可以知道我們分割的結果有沒有成功。 2.      字串分隔 ( 多個分割符號 ) 我們首先建了一個字串變數 Str2= "Jimmy,Johnson.Shawn Alan,Nick" ,我們現在想把這些人名一個一個切割出來,很明顯要將 ”,” 、 ”.” 、 ” “ 都作為分個符號才能完整分割。這邊我們建立一個陣列變數 Str2_Array= Str2.Split(",|.| ".ToArray()) or Str2.Split({","c,"."c," "c}) ,這個陣列變數就會儲存分割出來的結果。我們接下來用 For each 與 Write Line 將陣列的每一項內容印出來,就可以知道我們分割的結果有沒有成功。 3       字串的合併 (Array 字串元素合併 ) 我們首先建了一個字串變數 Str3_Array= {"John","Jimmy","Shawn","Alan"} ,我們現在想把這些人名中間用 ”|” 符號隔開並且變成一個字串,這裡我們是用 String.Join( 連接符號 , 陣列 ) 這個函數達到這個目的。我們建立一個變數 Str3_Join ,使 Str3_Join=String.Join("|", Str3_Array) ,此時 Str3_Join 的結果就會是 John|Jimmy|Shawn|Alan 。我們接下來用 Write...

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...