Paragraphs are comprised of sentences, but not random sentences. A paragraph is a group of sentences organized around a central topic.

codrone lite/pro_Python_Beginner_part 2(條件式、迴圈)

Python (Beginner)_ Conditionals條件式

Step 1: 

什麼是if語句

If語句為條件式,能夠幫助你的程式做選擇。其實你每天都需要使用條件式,以下範例給你參考:

  1. 如果鬧鐘關閉我就會起床,不然我要繼續睡覺
  2. 如果我餓了我就會去吃東西
  3. 如果外面是晴天,我就會擦防曬乳

 

If語句會是如以下內容呈現:

if insert condition here:
    Insert statements here
else:
    Insert statements here

# Example below

if alarm goes off:
    I will wake up
else:
    Stay asleep
  • 條件式語句能讓電腦用來分辨true(是)與false(否)
  • 如果條件式為true(是)電腦會執行之下的語句
  • 如果條件式為false(否)電腦不會執行之下的語句
  • “Else”為無條件,這是因為在使用 if-else 語句時,“else”是最後一個選項(也就是說else語句不能單獨存在!)。當電腦在確認完其他條件式後讀取到”else”選項時,會直接將else語句自動認知為true(是),並執行該語句。
  • 當一項條件式被認定為false(否)但又必須被執行,這時候最適合使用”else ”。如果條件式為false(否)而不一定要執行,那你就不需要用到”else”。

 

Step 2: 

 縮排

程式語言Python中indentation(縮排)占了很重要的位置。縮排會指出哪個語句屬於在程式碼中哪個特定部分。

你可以發現if與else語句下的語句都縮排了4個空格。若你想在條件式為true(是)時,執行多個語句該怎麼辦?如果你適時使用縮排,內容會類似以下呈現:

if (drone.connected()):
    print("Drone is connected!")
    CoDrone.takeoff()
    CoDrone.land()
else:
    print("Not paired")

以下是錯誤範例。請試試在Jupyter Notebook中執行看看。你的目標是:用縮排更正範例中的錯誤!

drones = 100
bugs = 55
if drones > bugs:
print("Squish the bugs!")
if drones + bugs > 90:
print("Run away!")

正確範例應該如下,試著執行看看!

drones = 100
bugs = 55
if drones > bugs:
    print("Squish the bugs!")
if drones + bugs > 90:
    print("Run away!")

 

Step 3: 

比較算符

最後步驟中你會認識一些新的符號。”>”是比較算符的一個範例,但你可能知道它是數學課上的一個不等號。比較算符可以在條件式裡使用來比較值。若該語句為true(是),之下的語句就會被執行。以下是比較器:

  • > 大於(超過)
  • <  小於(未滿)
  • >= 大於或等於(以上)
  • <= 小於或等於(以下)
  • == 等於
  • !=  不等於

以下是範例讓你試著做做看:

X = 10
Y = 100
if (X != Y):
    print("Correct, X is not equal to Y")
    Z=100
if (Z == Y):
    print("Correct, Z is equal to Y")

 

Step 4: 

編程作業

宣告具有不同數值的3個變數。再寫出至少3個if語句跟else語句。把變數當成if語句的條件。If語句和else語句會列印出不同字符串。以下程序給你當參考,試著寫出你自己的程序吧!

x = 58
y = 12
z = 90
if x > y:
   print("jelly")
if z > x:
   print("peanut butter")
if y+z > x:
   print("bread")
if y > z:
   print("toast")
else :
   print("best sandwich ever")

 

Step 5: 

巢狀式if語句

巢狀式if語句是在一個if語句中在夾雜另一個if 語句。請參考以下為現實生活呈現的程式碼範例,然後查看第一張圖中的流程圖,以更了解語句意義。。

if it is sunny outside:
    if it is hot:
        I will go swimming
    else:            #it is NOT hot
        I will play baseball
else:                #it is NOT sunny
    I will play inside

當你需要同一個目的,並遇到多重條件式或是其之下的問題,使用巢狀式if語句就很方便。其他程序範例如下:

if you are happy:
    keep doing whatever you’re doing
else:
    if you do want to be happy:
        change something
    else:
        keep doing whatever you’re doing
CoDrone with Python-Nested if statements
CoDrone with Python-Nested if statements2

Step 6: 

編程作業

寫出3個變數用在2個if語句的條件式中,也請使用巢狀式if語句囊括該if語句。每個if語句都要列印出字符串。字符串組合必須完整一個詞組。每個列印不同字符串的if語句,應該跟在巢狀式if語句之後。以下為範例—試試看自己寫出來!

x = 3
y = 6
z = 9
if x < y:
    print("I love to")
    if y < z:
        print("program!")
if z > x:
    print("What do you love?")

 

Step 7: 

 挑戰編程

以下是錯誤範例,你的目標是調整更正它並讓它運作順利。

Test = 75.50
A = 90
B = 80
C = 70
D = 60
F = 50
if Test == 100:
print("Automatic pass!")
if Test > A:
print("Student receives an A")
else:
if Test > B:
print("Student receives a B")
else:
if Test > C:
print("Student receives a C")
else:
if Test > D:
print("Student receives a D, please seek tutoring")
else:
if Test > F:
print("Student has failed, please seek tutoring")

找到哪一個字符串應該印出了嗎?試試運作程式碼看你有沒有更正正確!

正確答案:

Test = 75.50
A = 90
B = 80
C = 70
D = 60
F = 50
if Test == 100:
    print("Automatic pass!")
if Test > A:
    print("Student receives an A")
else:
    if Test > B:
        print("Student receives a B")
else:
    if Test > C:
        print("Student receives a C")
    else:
        if Test > D:
            print("Student receives a D, please seek tutoring")
        else:
            if Test > F:
                print("Student has failed    please seek tutoring")

Step 8: 

什麼是else if 語句

假設你有兩個按鈕:一個可以開門;一個可以關門。你也有程式碼可以確認按鈕是否被按下。你的第一個想法應該會寫出以下內容:

if button 1 is pressed:
    Close the door
if button 2 is pressed:
    Open the door

如果你同時按下兩個按鈕會怎樣呢?兩個都為真而門會試著同時開啟與關閉!

Else if 語句在Python中會寫成elif而此語句可以解決這個問題。一旦滿足條件,無論它們是否為真,程式碼都將不會執行任何其他 elif 語句。就像if語句一樣,如果程式碼運作所有條件式,而無一滿足條件那他就會執行else語句。儘管你不需要用到else語句,但如果遇到錯誤或意外的條件,加入else語句通常是個好方法。

 

Step 9: 

Else if 範例

以下提供範例讓你了解為何要使用elif 語句。想像一下你要去看電影而且你必須買票。電影院有分年齡販賣不同價位的票。5歲以下兒童免收費。而18歲以下的小朋友要付$8元。55歲以下票價為$12元。其餘的可以以優惠價$10元入場。

 

if age < 5:
    price = 0
elif age < 18:
    price = 8
elif age < 55:
    price = 12
else:
    price = 10

現在假設所有案例你都已經使用if語句,而你也輸入了你15歲。第一句無法運作,但語句2跟3都為true(是),因為15小於18和55。因為電腦式按順序讀取,所以價格就會保持最後一個值$12元。顯然你會被多收電影票錢,若使用elif語句,程式碼就會發現第二個條件為真然後忽略其他條件式。

加入print語句到以上的程式碼並式式看執行它!

 

Step 10: 

編程挑戰

接下來挑戰設計一個程式,透過確認身高來辨別能不能搭乘雲霄飛車。你要建立一個變數並命名為高度(用英吋表達)。高度限制為60與480。身高48英吋以下的不能搭乘。高於48英吋的乘客可以與父母一同搭乘,超過60英吋者可以單獨搭乘。

給指導員的提示:

 

height = 66    # height in inches
if height > 48:
    print("Rider can ride alone")
elif height > 36:
    print("Rider must be accompanied by parent")
else:
    print("Rider not allowed on the ride")

 

Step 11: 

試試看!

為防你不完全了解什麼是魔法8球(Magic 8 Ball),那是一個可以預測你的未來的玩具,當你問他是非題時,會回答是、否或不確定。

請你編程你的CoDrone像魔法8球一樣運作!從1至6選一個數字在變數中輸入,再編程你的無人機列印出答案,然後用特定飛行方向給每個回應。我們先幫你做第一步其他就交給你操作看看囉!

規則:

  • 你必須使用1個if語句、1個else語句、如果需要就在兩者之間加上盡可能多的elif 語句。
  • 加入一個空格讓使用者可以用Magic 8 Ball變數輸入一個數字。
  • 你至少要有6個回應—2個負面、2個正面與2個不確定。
import CoDrone

ball =    #user picks a number

drone = CoDrone.CoDrone()
drone.pair(drone.Nearest)

drone.takeoff()
if ball == 1:
    print('It is certain')
    drone.set_pitch(50)
    drone.move(2)
    
drone.land()    # lands the CoDrone
drone.close()
CoDrone with Python-Magic 8 ball

 

 Python (Beginner)_ Loops迴圈

 

Step 1: 

什麼是迴路?

迴路可以讓你的一直重複程式碼的部分。這個是很好的捷徑讓你不需要一再重複寫同樣的內容。

這堂課你會學到while跟for迴圈。兩者都是條件式迴路,所以他只會在你設定的條件為true(是)時重複。

 

Step 2: 

While迴圈

While loops 會重複一組你設定為true(是)的程式碼。其實你的日常生活常常使用到這個邏輯!請看以下例句:

while condition(s) go here:
    statements goes here

在英文例句中你能聽到:只要我的手機還有電,我就會去瀏覽instagram。但在程式碼中會呈現如下:

while phone has battery:
    I will use Instagram

若要促使while迴圈運作,條件是必須為true(是),不然它會被忽略過。只要條件式為真,該語句就會不斷循環運作;若條件式變成false(否),程序會離開迴路並往下讀取其他剩下的程式。

試著運作以下範例。請問字符串”Using…”輸出了幾次?

battery = 100
while battery > 0:
    print("Using...")
    battery = battery - 10
print("Dead battery")

 

Step 3: 

編程while loop

請用while迴圈編寫程式,讓CoDrone做伏地挺身。只有變數超過10才讓條件式為true(是)。

import CoDrone

drone = CoDrone.CoDrone()
drone.pair(drone.Nearest)

pushups = 0
while pushups < 10:
    drone.takeoff()
    drone.hover(1)
    drone.land()
    pushups+=1 # increment pushups by 1
drone.close()

P.S.:如果將 while loop中的條件設置為“1”或“True”,While loop就可以永遠持續運作下去。

 

Step 4: 

 For loops 

For loops 跟while loops很像—當條件式為true(是)都會重複程式碼的內容。然而條件式是你設定次數的特定數字。例如:加設你只需要程式碼內容重覆87次,那就要使用for迴圈。

For迴圈所使用的條件式非常特別,並且看起來挺複雜嚇人的,但別擔心,我們會分解給你看!

for private variable in range (minimum, maximum, increment or decrement):
    Write statements here
  • Private variables(專用變數)只能用在迴路裡,不能直接被類別外部的程式碼呼叫而進行存取。
  • 最小值是你的變數的起始值。
  • 最大值是你的變數的結束值。
  • 你每次增加多少變數是Increment (遞增),而每次減少多少為變數是decrement(遞減) 。

以下範例給你參考:

for x in range(0, 10, 1):
    print(x)
  • 專用變數是x
  • X會從0開始
  • 範圍限制為10
  • 程序每輪一次迴路x就會增加1。第一次疊代x會從0開始,列印”0”,然後x會變成1。在第二次疊代x會從2開始,列印”1”再成為2。結果會被列印在控制台,呈現內容應該如下:
0
1
2
3
4
5
6
7
8
9

有發現”1”沒有被列印出來嗎?因為10是限制的最大值。像我們的範例中的x是專用變數,一旦達到最大值他就不會被列印出或超出限制。

 

你也可以將它移到負向或是遞減。以下範例給您參考:

for j in range(-1, -13, -2):
    print(j)

你覺得結果會是長怎樣呢?往下看下一步驟時請先寫下它。

 

Step 5: 

 編程for loop

編程讓你的CoDrone在一個方形中飛行。請記得電腦從0開始計算而4是最大值。

import CoDrone
drone = CoDrone.CoDrone() 
drone.pair(drone.Nearest)

drone.takeoff()

for x in range(0, 4, 1): 
    drone.set_pitch(50)
    drone.move(2)
    drone.set_yaw(-50)
    drone.move(2)

drone.land()
drone.close()

 

Step 6: 

編程挑戰

讓CoDrone做5次伏地挺身,並列印出以下訊息: “taking off(起飛)” , “hovering(盤旋)”, 與 “landing(著陸)”.

請試著用一個for loop和一個while loop製作一個版本。

For loop 解決方案:

import CoDrone

drone = CoDrone.CoDrone()
drone.pair(drone.Nearest)

for x in range(0, 5, 1):
    drone.takeoff()
    print("taking off")
    drone.hover(3)
    print("hovering")  
    drone.land()
    print("landing")

drone close()

import CoDrone

drone = CoDrone.CoDrone()
drone.pair(drone.Nearest)

while x < 10:
    drone.takeoff()
    print("taking off")

    drone.hover(3)
    print("hovering")

    drone.land()
    print("landing")

    x+=1    # increase x by 1
drone.close()

 

Step 7: 

 試試看!

 

挑戰:恐怖之塔

在一些迪士尼樂園恐怖之塔是自由落體。這些遊樂設施通常帶乘客慢慢上升到最高處,然後非常迅速地下降。許多自由落體會讓乘客往下衝、暫停一下、再上升一點點但又不太高、再暫停、往下衝、暫停…你懂它的操作方式吧。

你要挑戰的是用迴路編程你的CoDrone,用類似自由落體的概念飛行。

規則:

  • 請則依使用for迴圈或while迴圈
  • 你的無人機上升後務必立刻下降、暫停在空中、上升、再暫停至少重複3次。

給指導員的提示:

提供給你一個範例:

import CoDrone

drone = CoDrone.CoDrone() 
drone.pair(drone.Nearest)

drone.takeoff()
drone.set_throttle(50)
drone.move(5)
drone.hover(3)

for x in range(0, 5, 1):
    drone.set_throttle(-50)
    drone.move(3)
    drone.hover(1)
    drone.set_throttle(50)
    drone.move(2)
    drone.hover(1)

drone.land()
drone close()