跳转到内容

应用编程/条件

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]
华夏公益教科书