跳轉到內容

應用程式設計/條件

75% developed
來自華夏公益教科書

結構化程式設計

[編輯 | 編輯原始碼]

它是什麼?

[編輯 | 編輯原始碼]

結構化程式設計是一種程式設計正規化,旨在透過廣泛使用選擇(if/then/else)和重複(while 和 for)的結構化控制流構造、塊結構和子程式來提高計算機程式的清晰度、質量和開發時間。結構化程式設計最常用於某些特定情況下允許更清晰程式的偏差,例如在必須執行異常處理時。 [1]

控制結構

[編輯 | 編輯原始碼]

按順序執行的排序語句或子程式。它允許我們執行具有多個步驟的任務。在程式設計中,順序是一種基本演算法:按順序執行的一組邏輯步驟。 [2]

程式碼語句的順序執行(一行接一行)--就像遵循食譜一樣 [3]

x = 33
y = 55
z = x + y
print(z)

輸出

88

在上面的示例中,程式碼行被執行,直到程式輸出 x 和 y 的總和。

它用於根據資訊做出選擇。透過使用 IF、THEN 和 ELSE 函式來重複指令,或者將正在處理的程序移動到程式的不同部分,可以使演算法變得更智慧。選擇也稱為決策。它是計算機程式設計中三個基本邏輯元件之一。另外兩個邏輯元件是順序和迴圈。 [4]

最常見的選擇語句是 if/else 語句。基本語法

   if (expression)
      statement
   else
      statement

else 子句是可選的,因此此格式也是合法的

   if (expression)
      statement <ref>https://www.cs.fsu.edu/~myers/c++/notes/control1.html</ref>

 course_score = int(input("Enter a course score: "))
 
 if course_score >= 90:
     print("Your course grade is A.")
 
 elif 80 <= course_score < 90:
     print("Your course grade is B.")
 
 elif 70 <= course_score < 80:
     print("Your course grade is C.")
 
 elif 60 <= course_score < 70:
     print("Your course grade is D.")
 
 else:
     print("Your course grade is F.")

輸出

Enter a course score: 50
Your course grade is F.

在上面的示例中 [5],使用者輸入一個分數,程式根據該分數輸出一個等級。此處使用 if/elif/else 結構。

重複/迭代

[編輯 | 編輯原始碼]

程式中的重複意味著程式碼行將被執行多次。

迭代是一個類似於重複的術語:它意味著不斷重複一個動作,直到你獲得正確的結果。 [6]

例如

  • while
  • do/while
  • for [7]
 for num in range(1, 5):
     print(num)

輸出

 1
 2
 3
 4

在上面的示例中 [8],程式從 1 列印到 4。此處使用 for 結構。

 keep_going = 'y'
 
 while keep_going == 'y':
     course_score = int(input("Enter a course score: "))
 
     if course_score >= 90:
         print("Your course grade is A.")
 
     elif 80 <= course_score < 90:
         print("Your course grade is B.")
 
     elif 70 <= course_score < 80:
         print("Your course grade is C.")
 
     elif 60 <= course_score < 70:
         print("Your course grade is D.")
 
     else:
         print("Your course grade is F.")
    
     keep_going = input("Do you want to keep going? "
         + "Enter y for yes. ")

在上面的示例中,使用者輸入一個分數,程式根據該分數輸出一個等級。只要使用者輸入 y 來繼續,程式就會繼續執行。當用戶輸入其他任何內容時,程式將終止。此處使用 while 結構。

遞迴是指用(更簡單版本的)自身來定義一個問題(或問題的解決方案)的過程。 [9]

 def factorial(number):
     if number == 1:
         return 1
     else:
         return (number * factorial(number - 1))
 
 answer = factorial(4)
 print(answer)

輸出

24

在上面的示例中,程式使用遞迴計算階乘。當此函式執行時,將執行一個“if”語句。此語句檢查傳遞給函式的數字是否等於 1。如果是,則我們的函式返回 1。否則,將計算我們數字的階乘。此計算透過將傳遞給函式的數字乘以前一個數字的階乘來完成。此函式被反覆呼叫,直到“數字”等於 1。每次呼叫函式時,“數字”的值都會減少 1。 [10]

子程式

[編輯 | 編輯原始碼]

在結構化程式設計中,宣告、定義和執行各種函式。結構化程式的函式稱為“子程式”或“過程”。如果子程式被重複實現,它們將變得非常方便。 [11]

此類函式用“def”宣告。

 def course_letter_Grade (course_score):
  course_score = int(input("Enter a course score: "))  
 
      if course_score >= 90:                              
         print("Your course grade is A.")                 
 
      elif 80 <= course_score < 90:                       
        print("Your course grade is B.")                  
 
      elif 70 <= course_score < 80:                        
        print("Your course grade is C.")                   
 
      elif 60 <= course_score < 70:                       
        print("Your course grade is D.")                  
 
      else:                                               
        print("Your course grade is F.")

輸出

Enter a course score: 50
Your course grade is F.

例如,如果要執行評分程式設計,“course_letter_grade”函式根據輸入的分數執行相應的字母等級。

Python 中的塊是縮排。縮排確定條件語句的範圍。縮排級別限制每個塊。 [12]

    course_score = int(input("Enter a course score: "))    #Block 1; intake a course score
 
      if course_score >= 90:                               #Block 2; selects course score
         print("Your course grade is A.")                  #Block 3; displays result of the selection 
 
      elif 80 <= course_score < 90:                        #Block 2; selects course score
        print("Your course grade is B.")                   #Block 3; displays results of the selection
 
      elif 70 <= course_score < 80:                        #Block 2; selects course score
        print("Your course grade is C.")                   #Block 3; displays results of the selection
 
      elif 60 <= course_score < 70:                        #Block 2; selection course score
        print("Your course grade is D.")                   #Block 3; displays results of the selection
 
      else:                                                #Block 2; selection course score
        print("Your course grade is F.")                   #Block 3; displays results of the selection

輸出

 Enter a course score: 50
 Your course grade is F.

塊 1 作為操作的啟動或“course_score”操作的開頭程式碼。塊 2 用於根據塊 1 中的輸入確定並選擇適當的塊 3。塊 3 用於顯示塊 2 的結果。

為什麼要用它?

[編輯 | 編輯原始碼]

下面列出了使用結構化程式設計的一些優缺點。 [13]

  • 更容易閱讀和理解
  • 使用者友好
  • 更容易維護
  • 主要以問題為基礎,而不是以機器為基礎
  • 開發更容易,因為它需要更少的努力和時間
  • 更容易除錯
  • 機器獨立,大部分。
  • 作為機器獨立,將其轉換為機器程式碼需要時間。
  • 轉換後的機器程式碼與組合語言不同。
  • 程式取決於可變因素,如資料型別。因此,它需要根據需要進行更新。
  • 通常這種方法的開發需要更長的時間,因為它依賴於語言。而在組合語言的情況下,開發需要更短的時間,因為它針對機器是固定的。

資料驗證

[編輯 | 編輯原始碼]

在計算機科學中,資料驗證是指確保資料經過資料清洗,以保證其準確性和實用性。它使用一些例程,通常稱為“驗證規則”、“驗證約束”或“檢查例程”,來檢查輸入系統的資料的正確性、意義和安全性。這些規則可以透過資料字典的自動化工具實現,也可以透過包含顯式應用程式程式驗證邏輯實現,這些邏輯由計算機及其應用程式來執行。

Python 中的驗證

[編輯 | 編輯原始碼]

每當使用者輸入資料時,都需要進行驗證,以檢查輸入資料是否符合預期。驗證可以採用兩種不同的方式:使用標誌變數或使用 try 或 except 語句。標誌變數最初設定為 false,如果我們發現輸入資料符合預期,則可以將標誌狀態設定為 true,然後根據標誌的狀態來確定下一步的操作。而使用 try 或 except 語句時,會嘗試執行一段程式碼,如果出現負面響應,則會執行 except 程式碼塊。

Python 中的驗證型別

[編輯 | 編輯原始碼]

Python 中有三種類型的驗證,分別是:

型別檢查:這種 Python 驗證技術用於檢查給定輸入的資料型別。例如,int、float 等。長度檢查:這種 Python 驗證技術用於檢查給定輸入字串的長度。範圍檢查:這種 Python 驗證技術用於檢查給定數字是否位於兩個數字之間。Python 中的驗證語法如下所示

使用標誌的語法

     flagName = False
     while not flagName:
     if [Do check here]:
     flagName = True
     else:
     print('error message')

標誌的狀態最初設定為 false,並且相同的條件被用於 while 迴圈,使語句為 while not true,並執行驗證,如果滿足驗證條件則將標誌設定為 true,否則會列印錯誤訊息。

使用異常的語法

     while True:
     try:
     [run code that might fail here] break
     except:
     print('This is the error message if the code fails')

     print(run the code from here if code is successfully run in the try block of code above)

我們最初將條件設定為 true,並透過執行一段程式碼來執行必要的驗證。如果程式碼無法執行驗證,則會引發異常,顯示錯誤訊息。如果程式碼成功執行 try 程式碼塊,則會列印成功訊息。

Python 驗證的示例

示例 1 使用標誌的 Python 程式,用於驗證使用者輸入是否為整數。# 資料型別檢查。

     #Declare a variable validInt which is also considered as flag and set it to false
     validInt = False
     #Consider the while condition to be true and prompt the user to enter the input
     while not validInt:
     #The user is prompted to enter the input
     age1 = input('Please enter your age ')
     #The input entered by the user is checked to see if it’s a digit or a number
     if age1.isdigit():
     validInt = True
     else:
     print('The input is not a valid number')
     #This statement is printed if the input entered by the user is a number
     print('The entered input is a number and that is ' + str(age1))

輸出

     Please enter your age: 22
     The entered input is a number that is 22

示例 2 使用標誌和異常的 Python 程式,用於驗證使用者輸入的型別,並確定它是否位於給定範圍內。

 
     #Range Check.

     #Declare a variable areTeenager which is also considered as flag and set it to false
     areTeenager = False
     #Consider the while condition to be true and prompt the user to enter the input
     while not areTeenager:
     try:
     #The user is prompted to enter the input
     age1 = int(input('Please enter your age '))
     #The input entered by the user is checked if it lies between the range specified
     if age1 >= 13 and age1 <= 19:
     areTeenager = True
     except:
     print('The age entered by you is not a valid number between 13 and 19')
     #This statement is printed if the input entered by the user lies between the range of the number specified
     print('You are a teenager whose age is between 13 and 19, and the entered age is  ' + str(age1))

輸出

Please enter your age: 14
You are a teenager whose age is between 13 and 19, and the entered age is 14

示例 3 使用標誌的 Python 程式,用於檢查輸入字串的長度。# 長度檢查。

     #Declare a variable lenstring which is also considered as flag and set it to false
     lenstring = False
     #Consider the while condition to be true and prompt the user to enter the input
     while not lenstring:
     password1 = input('Please enter a password consisting of five characters ')
     #The input entered by the user is checked for its length and if it is below five
     if len(password1) >= 5:
     lenstring = True
     else:
     print('The number of characters in the entered password is less than five characters')
     #This statement is printed if the input entered by the user consists of less than five characters
     print('The entered password is: ' + password1)

輸出

Please enter a password consisting of at least five characters sdsdsds
The entered password is sdsdsds

好處

  • 它有助於提高程式碼的安全性。
  • Python 中的驗證可以防止第三方使用者意外或故意錯誤處理程式碼。
  • 它可以用於檢查輸入資料型別是否正確。
  • 它可以用於檢查給定輸入中是否沒有無效值。
  • 它可以用於檢查給定輸入是否在範圍內,或者是否超出範圍。
  • 它可以用於檢查給定輸入是否滿足其上的約束。
  • 它可以用於檢查給定輸入是否一致。
  • Python 中的驗證可以用於檢查給定輸入是否有效。
  • Python 中的驗證可以用於檢查給定輸入是否完整或不完整。

[14]

異常處理

[編輯 | 編輯原始碼]

在計算和計算機程式設計中,異常處理是指在程式執行過程中響應異常發生的處理過程。異常是指需要特殊處理的異常情況或例外情況。一般來說,異常會中斷正常的執行流程,並執行預先註冊的異常處理程式。具體實現方式取決於它是硬體異常還是軟體異常,以及軟體異常是如何實現的。它由專門的程式語言結構、硬體機制(如中斷)或作業系統(OS)程序間通訊(IPC)設施(如訊號)提供。一些異常,特別是硬體異常,可能會得到如此優雅的處理,以至於可以從中斷的地方恢復執行。

軟體中另一種處理異常的方法是錯誤檢查,這種方法透過使用特殊返回值、輔助全域性變數(如 C 語言中的 errno)或浮點數狀態標誌來維護正常的程式流程,並在之後顯式檢查緊急情況。輸入驗證是一種先發制人的方法,它會提前過濾掉異常情況。

Python 語法和語義/異常 - EAFP 與 LBYL

[編輯 | 編輯原始碼]

Python 程式語言的語法是一組規則,用於定義 Python 程式的編寫和解釋方式(由執行時系統和人類讀者都進行解釋)。Python 語言與 Perl、C 和 Java 語言有很多相似之處。但是,這些語言之間也存在一些明顯的區別。

防禦性程式設計

[編輯 | 編輯原始碼]

防禦性程式設計是一種防禦性設計形式,旨在確保軟體在不可預見的情況下繼續執行。防禦性程式設計實踐通常用於需要高可用性、安全性和安全性的地方。[15] 本質上,防禦性程式設計是一種程式設計風格,旨在確保你的程式無論在任何情況下都能按預期執行。下面列出了幾種最流行和最有效的技術,這些技術可以在採用防禦性程式設計方法時應用。

斷言是在程式中特定位置的布林表示式,除非程式中存在錯誤,否則它將始終為真。斷言可以只是一個註釋,由程式設計師用來思考程式碼的工作原理。或者斷言可以記錄系統上的約束。[16]

def my_function(age):
    assert int(age) > 18
    print("You are over 18.")

上面的程式碼展示了一個函式,該函式有一個名為“age”的引數。在函式中,我們斷言年齡變數必須大於 18。如果我們傳遞任何大於或等於 19 的整數到函式中,我們將得到響應:“你超過 18 歲”。但是,如果我們傳遞小於或等於 18 的整數,我們的程式會丟擲斷言錯誤並崩潰。

智慧原始碼重用

[編輯 | 編輯原始碼]

智慧原始碼重用是指使用之前測試過的程式碼塊,而不是從頭開始輸入所有內容。如果現有程式碼經過測試並且已知有效,則重用它可以減少引入錯誤的可能性。然而,重用程式碼並不總是一種好的做法,因為它也會放大對初始程式碼的潛在攻擊造成的損害。[17]

契約式設計

[編輯 | 編輯原始碼]

契約式設計(DbC),也稱為契約式程式設計、按契約程式設計和契約式程式設計設計,是一種軟體設計方法。

它規定軟體設計人員應該為軟體元件定義正式的、精確的和可驗證的介面規範,這些規範擴充套件了抽象資料型別的普通定義,包含前提條件、後置條件和不變式。這些規範被稱為“契約”,符合與商業契約的條件和義務的隱喻概念。

DbC 方法假設所有呼叫伺服器元件操作的客戶端元件都將滿足該操作所需指定的先決條件。

如果這種假設被認為過於冒險(例如在多通道或分散式計算中),則採用相反的方法,這意味著伺服器元件會測試所有相關的先決條件是否成立(在處理客戶端元件的請求之前或期間),如果未滿足,則以合適的錯誤訊息回覆。[18]

異常處理

[edit | edit source]

在計算和計算機程式設計中,異常處理是指在程式執行期間響應異常發生的過程,異常是指需要特殊處理的異常或異常條件。通常,異常會中斷正常的執行流程,並執行預先註冊的異常處理程式;如何執行此操作的細節取決於它是硬體異常還是軟體異常,以及軟體異常是如何實現的。[19] 請看下面的程式碼。

age = int(input("How old are you?"))
new_age = age + 10
print(f"In 10 years, you will be {new_age}!")

當我們執行這段程式碼時,我們假設使用者會以數字形式輸入他們的年齡。但是,如果使用者輸入了無效的輸入,就會丟擲異常。以下是使用者輸入字母而不是數字時丟擲的異常。

How old are you?
>g

''Traceback (most recent call last):''
  ''File "C:/Users/Sam/Pycharm/test.py", line 1, in <module>''
    ''age = int(input("How old are you?"))''
''ValueError: invalid literal for int() with base 10: 'g''

異常通常是多行,可能難以理解。解決此問題的一種方法是使用“try-except”。在這種情況下,我們將對使用者輸入無效字元時發生的“ValueError”進行異常處理。

    try:
        age = int(input("How old are you?"))
        new_age = age + 10
        print(f"In 10 years, you will be {new_age}!")
    except ValueError:
        print("Invalid input!")

現在,當我們執行程式並輸入無效資訊時,我們會收到一條更容易理解的資訊。

   How old are you?
   >g
   
   Invalid input!

關鍵術語

[edit | edit source]

斷言 - 斷言是一個與程式中某個點相關的謂詞,該謂詞在程式碼執行到該點時始終應該為真。斷言可以幫助程式設計師閱讀程式碼,幫助編譯器編譯程式碼,或者幫助程式檢測自身的缺陷。

布林表示式 - 程式語言中的一種表示式,在評估時會生成布林值,即真或假。

條件語句 - 允許在執行時在備選方案之間進行選擇。

資料驗證 - 確保資料已進行資料清洗以確保資料質量的過程,即資料既正確又有用。

防禦性程式設計 - 一種防禦性設計形式,旨在確保軟體在不可預見的情況下持續執行。

EAFP(更容易請求寬恕而不是許可) - 首先嚐試執行所需的操作,然後處理任何由此產生的異常的方法。

異常處理 - 指在計算過程中響應異常發生的處理過程。異常或異常條件需要特殊處理,通常會改變程式執行的正常流程。

GoTo 語句 - 執行對另一行程式碼的單向控制轉移;相反,函式呼叫通常會返回控制。

If 語句 - If 語句是一種程式設計條件語句,如果證明為真,則執行函式或顯示資訊。

LBYL(三思而後行) - 在訪問目標資源之前測試先決條件的方法。

邏輯錯誤 - 使程式產生意外結果而不崩潰的錯誤。

關係運算符 - 程式語言結構或運算子,用於測試或定義兩個實體之間的某種關係,包括數值相等(例如,5 = 5)和不等式(例如,4 ≥ 3)。

執行時錯誤 - 如果語法正確的程式在執行時出現問題,執行時系統會產生錯誤。

軟體錯誤 - 計算機程式或系統中的錯誤、缺陷、故障或錯誤,導致它產生錯誤或意外的結果,或以意外的方式執行。

結構化程式設計 - 一種程式設計正規化,旨在提高計算機程式的清晰度、質量和開發時間。

語法 - 計算機語言的語法是定義在該語言中被認為是結構正確的文件或片段的符號組合的規則集。

語法錯誤 - 指示程式語法有問題的錯誤。它是 Python 在將原始碼翻譯成位元組碼期間產生的。

真值表 - 邏輯中使用的數學表格,真值表可以用來顯示命題表示式在所有合法輸入值下是否為真,即邏輯有效。

物件 - 相關變數、常量和其他資料結構的組合,可以一起選擇和操作。

條件語句 - 幫助程式碼做出選擇並導致 TRUE 或 FALSE 結果。這些語句根據程式設計師的需求執行不同的操作,並且多個條件可以組合成一個條件,只要條件的最終值為 TRUE 或 FALSE。條件語句的例子包括 'IF'、'IF-Else'、'While' 和 'Else-If'。

驗證 - 一種自動計算機檢查,以確保輸入的資料是合理的和合理的。它不檢查資料的準確性。

參考資料

[edit | edit source]
華夏公益教科書