一、结构化程序设计

结构化程序设计方法的基本思想是以系统的逻辑功能设计和数据流关系为基础,根据数据流程图和数据字典,借助于标准的设计准则和图表工具,通过“自下而上”或“自上而下”的反复,逐层把系统划分成多个大小适中,功能明确,具有一点独立性并容易实现的模块,从而把复杂系统的设计转变为多个简单模块的设计。
结构化程序设计方法总结来说就是:自上而下、逐步求精、模块化设计。
采用模块化编制程序,把一个程序分成若干个功能模块,这些模块之间尽量彼此独立,用控制语句或过程嗲用语句将这些模块连接起来,形成一个完整的程序。
计算机程序一般都由三种基本结构组成:顺序结构、分支结构(选择结构)和循环结构。

1.1 顺序结构

顺序结构是指程序从第一行语句开始执行,执行到最后一行语句结束,程序中的每条语句都会被执行一次。
image.png

1.2 分支结构

分支结构也称选择结果,表示程序的处理步骤出现了分支,需要根据某一特定的条件选择其中的一条分支执行。

1.2.1 单分支结构

当判断条件为真值的时候,执行语句块1,当判断条件为假值的时候,越过语句块往下执行其他语句或执行。
通过常来指定某一段语句是否执行。
image.png

1.2.2 双分支结构

当条件判断为真的时候,执行语句块1,当条件判断为假的时候,执行语句块2。
通常用来有选择地在两段语句中选择一段执行。
image.png

1.2.3 多分支结构

多分支结构即拓展的双分支结果,一般设有n个条件。
多分支结构在一次执行的时候只能选择一个分支,即使其他判断条件为真值,也不会继续判断执行。
image.png

1.3 循环结构

循环结构是程序根据条件判断,在满足条件的情况下反复执行某个语句块的运行方式。

1.3.1 条件循环结构

条件循环结构是在执行循环的时候先判断循环条件的取值,如果为True的时候执行一次语句块(循环体),然后继续判断循环条件,如果循环条件为False,则结束循环。
image.png

1.3.2 遍历循环结构

遍历循环在执行循环的时候也要进行判断,看循环变量是否在遍历队列中,如果在则去一个遍历元素,执行一次语句块(循环体),然后返回在取下一个遍历元素,直到遍历元素取完,循环结束。
image.png

二、分支结构

2.1 单分支结构

  1. if <条件>:
  2. <语句块>
  3. a = 10
  4. if a > 9:
  5. print('输入正确')
  6. 输入正确

2.2 双分支结构

  1. if 条件:
  2. 满足条件执行代码
  3. else:
  4. if条件不满足就走这段
  5. a = 48
  6. if a > 50 :
  7. print("输入正确")
  8. else:
  9. print("输入错误")

2.3 多分支结构

多分支结构是对双分支结构的一种补充,当判断的条件有多个且判断结果有多个的时候,可以使用多分支if语句进行判断

  1. if <条件1>:
  2. <语句块1>
  3. elif <条件2>:
  4. <语句块2>
  5. elif <条件3>:
  6. <语句块3>
  7. ……
  8. else:
  9. <语句块n>
  1. score=int(input())
  2. if score>=90:
  3. gpa=4
  4. elif score>=80:
  5. gpa=3
  6. elif score>=70:
  7. gpa=2
  8. elif score>=60:
  9. gpa=1
  10. else:
  11. gpa=0
  12. print("应得得学分绩点为:",gpa)

2.4 分支结构的嵌套

如果一个if分支结构中包含另一个(或多个)if分支,则称为分支结构的嵌套。

  1. a=int(input())
  2. b=int(input())
  3. c=int(input())
  4. print("输入的顺序是:",a,b,c)
  5. if a>b:
  6. a,b=b,a
  7. if a>c:
  8. print("排序后为:",c,a,b)
  9. else:
  10. if c>b:
  11. print("排序后为:",a,c,b)
  12. else:
  13. print("排序后为:",a,b,c)
  14. ##结果
  15. 12
  16. 55
  17. 63
  18. 输入的顺序是: 12 55 63
  19. 排序后为: 12 63 55

三、循环结构

循环结构是根据条件重复执行某些语句,可以减少程序中的大量重复语句。
Python中有两种不同风格的循环结构,包括遍历循环for语句和条件循环whil语句。

3.1 for 语句循环

遍历循环让循环变量逐一使用一个遍历结构中的每个项目,遍历结果可以是字符串、列表、文件、range()函数等。
在明确知道循环的次数或者明确遍历结构的时候,一般使用for循环。

for <循环变量> in <遍历结构>:
<语句块>
for语句执行过程:
每次循环,判断循环遍历的值是否还在序列中,如果在,就取出该值提供给循环体内的语句使用,如果不在,则结束循环。

  1. s=0
  2. for i in range(1,101,2):
  3. s=s+i
  4. print("1到100之间的奇数和 为:",s)
  5. ##结果
  6. 1100之间的奇数和 为: 2500

for 语句使用else关键字
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
当for循环正常执行后,程序会继续支持else语句中的内容。如果for循环因为某种原因没有正常执行完,eg:遇到了break语句,就不会执行else语句中的内容。通常用else检验for循环是否结束。

  1. for i in range(1,101):
  2. if i%2==1:
  3. s=s+i
  4. else:
  5. print("计算完毕")
  6. print("1到100之间的奇数和 为:",s)
  7. ##结果
  8. 计算完毕
  9. 1100之间的奇数和 为: 2500

ps:在使用else循环的时候,else语句与for对齐,而不是和for循环中的if语句对齐。

3.2 while 语句循环

在无法明确遍历结构的时候,使用while循环。
while <条件>:
<语句块>
<条件>结果为True或者False。当为True的时候,则执行一遍语句块,然后返回到while语句继续判断<条件>,当条件为False的时候循环结束。

while <条件>:
<语句块1>
else
<语句块2>
当while循环正常结束后,程序会继续执行else语句中的语句块2,一般用来检验while循环是否结束。

  1. count = 0
  2. while count <= 5 :
  3. count += 1
  4. print("Loop",count)
  5. else:
  6. print("循环正常执行完啦")
  7. print("-----out of while loop ------")
  8. ##结果
  9. Loop 1
  10. Loop 2
  11. Loop 3
  12. Loop 4
  13. Loop 5
  14. Loop 6
  15. 循环正常执行完啦
  16. -----out of while loop ------
  17. ##求100以内的奇数和
  18. s = 0
  19. i = 1
  20. while i<100:
  21. if i%2==1:
  22. s=s+i
  23. i+=1
  24. else:
  25. print("计算完毕")
  26. print("1 到100 之间的奇数和为:",s)
  27. ##结果
  28. 计算完毕
  29. 1 100 之间的奇数和为: 2500

3.3 循环嵌套

在循环语句中使用另一个循环语句称为循环的嵌套,也称多重循环。
for语句循环和while语句循环都可以互相嵌套。

  1. for i in range(1,4):
  2. for j in range(1,4):
  3. print("i的值为",i,';',"j的值为:",j)
  4. ##结果
  5. i的值为 1 ; j的值为: 1
  6. i的值为 1 ; j的值为: 2
  7. i的值为 1 ; j的值为: 3
  8. i的值为 2 ; j的值为: 1
  9. i的值为 2 ; j的值为: 2
  10. i的值为 2 ; j的值为: 3
  11. i的值为 3 ; j的值为: 1
  12. i的值为 3 ; j的值为: 2
  13. i的值为 3 ; j的值为: 3
  14. for i in range(1,4):
  15. for j in range(1,4):
  16. print("i的值为",i,';',"j的值为:",j)
  17. else:
  18. print("内层循环结束")
  19. else:
  20. print("外层循环结束")
  21. ##结果
  22. i的值为 1 ; j的值为: 1
  23. i的值为 1 ; j的值为: 2
  24. i的值为 1 ; j的值为: 3
  25. 内层循环结束
  26. i的值为 2 ; j的值为: 1
  27. i的值为 2 ; j的值为: 2
  28. i的值为 2 ; j的值为: 3
  29. 内层循环结束
  30. i的值为 3 ; j的值为: 1
  31. i的值为 3 ; j的值为: 2
  32. i的值为 3 ; j的值为: 3
  33. 内层循环结束
  34. 外层循环结束

3.4 终止循环

3.4.1 标志位

利用改变条件,终止循环。

  1. flag = True //flag就是标志位
  2. while flag:
  3. print('约吗')
  4. print('不约')
  5. print('为什么')
  6. flag = False
  7. print('不为什么')

3.4.2 break语句

在循环中,执行到break语句的时候,可以结束本层的循环。
一般来说,break语句要放在一个分支循环中,当触发一个条件的时候,结束循环的执行。
ps:要注意break语句属于哪个循环。

  1. for s in 'python':
  2. for i in range(1,4):
  3. print(s,end ='')
  4. ##结果
  5. pppyyyttthhhooonnn
  6. for s in 'python':
  7. for i in range(1,4):
  8. if s == 'h':
  9. break
  10. print(s,end ='')
  11. ##结果
  12. pppyyytttooonnn
  13. flag = True
  14. print('循环开始啦')
  15. while flag:
  16. print('约吗')
  17. print('不约')
  18. print('为什么')
  19. break
  20. print('不为什么')
  21. print('循环结束啦')
  22. ##结果
  23. 循环开始啦
  24. 约吗
  25. 不约
  26. 为什么
  27. 循环结束啦
  1. ##求两个数字的最小公倍数
  2. x = int(input())
  3. y = int(input())
  4. if x < y:
  5. x,y=y,x
  6. for i in range(x,x*y+1):
  7. if i%x==0 and i%y==0:
  8. print(x,'和',y,'的最小公倍数是',i)
  9. break ##使用break语句,循环变量i遍历到第一个满足if分支的数字,输出计算结果,循环就结束了。
  10. ##结果
  11. 5
  12. 10
  13. 10 5 的最小公倍数是 10

3.4.3 continue语句

在循环中,continue语句用来结束循环的运行,continue语句只能结束本次循环的执行,而不是终止循环。
当执行到continue语句的时候,程序会终止当前循环,并忽略循环中continue后面的语句,然后回到循环语句for或while中,再次判断是否进入下一次循环。

  1. s,n=0,0
  2. for i in range(1,5):
  3. score = int(input())
  4. if score >=60:
  5. s=s+score
  6. n+=1
  7. print("合格人数为:",n)
  8. print("成绩平均值:",round(s/n,2))
  9. ##结果
  10. 90
  11. 55
  12. 69
  13. 88
  14. 合格人数为: 3
  15. 成绩平均值: 82 2
  16. s,n=0,0
  17. for i in range(1,5):
  18. score = int(input())
  19. if score >=60:
  20. s=s+score
  21. n+=1
  22. print("合格人数为:",n)
  23. print("成绩平均值:",round(s/n,2))
  24. ##结果
  25. 98
  26. 85
  27. 45
  28. 合格人数为: 2
  29. 成绩平均值: 91.5
  30. flag = True
  31. print('循环开始啦')
  32. while flag:
  33. print('约吗')
  34. print('不约')
  35. print('为什么')
  36. continue
  37. print('不为什么')
  38. print('循环结束啦')