一、结构化程序设计
结构化程序设计是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块。
下图为描述判断摸个数字是属于正数、负数还是零的流程图。
结构化程序设计的主要方法是-自顶向下、逐步细化。把需要解决的问题分成若干个任务来完成,再对每个任务进行设计,逐步细化。
结构化程序设计分为3中结构:
1、顺序结构
2、判断结构
3、循环结构
-----------------------------------------------------------------------------------------------------------------------------------
补充知识点:
Python中,raw_input()捕获用户的原始输入。
raw_input()函数的声明如下:
raw_input([prompt])->string
参数prompt是控制台中输出的提示文字,提示用户输入。返回值为字符串。如果输入的是数字,返回的还是字符串,使用前需要调用int()转换一下。
例子:字符串和数字类型的转换
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #字符串和数字类型的转换 x = raw_input("x:") x = int(x) x = x + 1
input()支持用户输入数字或表达式,不支持输入字符串。
input()函数的声明如下:
input([prompt])->value
参数prompt是控制台中输出的提示文字,提示用户输入。返回数字类型的值。
例如:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #字符串和数字类型的转换 x = input("x:") print (x) x = raw_input("x:") print (x)
-------------------------------------------------------------------------------------------------------------------------------------------
二、条件语句
1、if语句
if语句用于检测某个条件是否成立。如果成立,则执行if语句内的代码,否则跳过if语句,执行后面的代码
if语句的格式如下:
if(表达式): 语句1else: 语句2
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #if语句 a = input("a:") b = input("b:") if (a > b): print a,">",b print a,"<",b
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #if else语句 a = input("a:") b = input("b:") if (a > b): print a,">",b else: print a,"<",b
说明:
else子句后需要加一个冒号,是的Python解释器能识别出else子句对应的代码块。
2、if...elif...else语句
if...elif...else语句的格式如下:
if(表达式1):语句1 elif(表达式2):语句2 ... elif(表达式n):语句nelse:语句m
例子:
score = input("score:"):if (score >= 90) and (score <= 100):print ("A")elif (score >= 80) and (score <= 90):print ("B")elif (score >= 60) and (score <= 80):print ("C")else:print ("D")
3、if语句的嵌套
if语句的嵌套是指在if语句中可以包含一个或多个if语句。格式如下:
if(表达式1):if(表达式2):语句1elif(表达式3):语句2 ...else:语句3 elif(表达式n): ...else: ...
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #嵌套的条件语句 x = -1 y = 99 if (x >= 0): if (x > 0): y = 1 else: y = 0 else: y = -1 print ("y = ",y)
4、实现switch语句的功能
Python中没有提供switch语句,Python可以通过字典实现switch语句的功能。
方法如下:
首先,定义一个字典。字典是由键值对组成的集合。
其次,调用字典的get()获取相应的表达式。
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #使用字典实现switch语句 from __future__ import division x = 1 y = 2 operator = "/" result = { "+" : x + y, "-" : x - y, "*" : x * y, "/" : x / y, } print (result.get(operator))
输出结果:
---------- python ---------- 0.5输出完成 (耗时 0 秒) - 正常终止
另一种使用switch分支语句的方案是创建一个switch类,处理程序的流程。这种方法比较复杂,需要涉及到面向对象、for循环、中断语句、遍历等知识。
实现的步骤如下:
(1)创建一个switch类,该类继承自Python的祖先类object。调用构造函数int()初始化需要匹配的字符串,并需要定义两个成员变量value和fall。value用于存放需要匹配的字符串,fall用于记录是否匹配成功,初始值为false,表示匹配不成功。如果匹配成功, 程序往后执行。
(2)定义一个match()方法,该方法用于匹配case自己。这里需要考虑3中情况:首先是匹配成功的情况,其次是匹配失败的默认case子句,最后是case子句中没有使用break中断的情况。
(3)重写__iter__()方法,定义了该方法后才能使switch类用于循环语句中。__iter__()调用match()方法进行匹配。通过yield保留字,使函数可以在循环中迭代。此外,调用StopIteration异常中断循环。Python中的循环都是通过异常StopIteration中断的。这样switch类就构造完成了。
(4)编写调用代码,在for...in...循环中使用switch类。
例子:实现switch语句的功能
#!/usr/bin/python# -*- coding: UTF-8 -*-class switch(object):def __init__(self, value): # 初始化需要匹配的值valueself.value = value self.fall = False # 如果匹配到的case语句中没有break,则fall为true。def __iter__(self):yield self.match # 调用match方法 返回一个生成器raise StopIteration # StopIteration 异常来判断for循环是否结束def match(self, *args): # 模拟case子句的方法if self.fall or not args: # 如果fall为true,则继续执行下面的case子句# 或case子句没有匹配项,则流转到默认分支。return Trueelif self.value in args: # 匹配成功self.fall = Truereturn Trueelse: # 匹配失败return False operator = "+"x = 1y = 2for case in switch(operator): # switch只能用于for in循环中if case(‘+‘):print (x + y)breakif case(‘-‘):print (x - y)breakif case(‘*‘):print (x * y)breakif case(‘/‘):print (x / y)breakif case(): # 默认分支print ("")
输出结果:
---------- python ---------- 3输出完成 (耗时 0 秒) - 正常终止
三、循环语句
循环语句是指重复执行同一个代码块。循环语句是由循环体及循环终止条件两部分组成,一组被重复执行的语句称为循环体,循环的终止条件决定重复执行的次数。
Python中的循环语句有while语句和for语句。
1、while循环
while循环的格式如下:
while(表达式): ...else: ...
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #while循环 numbers = raw_input("输入几个数字,用逗号分隔:").split(",") print numbers x = 0 while x < len(numbers): print (number(x)) x += 1
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #else子句的while循环 x = input("输入x的值:") i = 0 while (x != 0): if (x > 0): x -= 1 else: x += 1 i = i + 1 print ("第%d次循环:"%i,x) else: print ("x等于0:",x)
在使用循环语句时,应注意循环表达式的布尔值,避免死循环的出现。死循环是指循环条件永远为真。
2、for循环
for循环用于遍历一个集合,依次访问集合中的每个项目。
for循环的格式如下:
for 变量 in 集合: ...else...
for ...in...循环通常与range()函数一起使用,range()返回一个列表,for...in...遍历列表中的元素。
range()函数的声明如下:
range ([start,]stop[,step])->list of integers
说明:
- range()返回一个递增或递减的数字列表,列表的元素值由3个参数决定
- 参数start表示列表开始的值,默认值为0
- 参数stop表示列表结束的值,该参数不可缺少
- 参数step表示步长,每次递增或递减的值,默认值为1
- range()返回一个递增或递减的数字列表,列表的元素值由以上3个参数决定的。例如range(-5,-1,-1)返回的列而表为[5,4,3,2,1,0]
例子:遍历range()生成的列表,过滤出正数、负数和0
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #for in 语句 for x in range(-1,2): if x > 0: print ("正数:",x) elif x == 0: print ("零:",x) else: print ("负数:",x) else: print ("循环结束")
在C、JAVA语言中,支持如下结构的for语句:
for (表达式1;表达式2;表达式3) 语句块
Python不支持这样的for循环,可以使用while循环实现类似的功能
x = 0while x < 5: print x x = x + 2
也可以使用for循环,借助range()函数来实现。例如:
for x in range(0,5,2):print x
3、break和continue语句
break和continue语句用于控制语句的跳转
(1)break语句
break语句可以使程序跳出switch语句,也可以结束循环语句
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] #break语句可以使程序跳出switch语句 operator = "+" x = 1 y = 2 for case in switch(operator): if case(‘+‘): print (x + y) break if case(‘-‘): print (x - y) break if case(‘*‘): print (x * y) break if case(‘/‘): print (x / y) break if case(): # 默认分支 print ("")
在循环结构中,break语句可以提前结束循环
例子:在0~99的数中查找用户输入的值
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] # break语句 x = input("输入x的值:") y = 0 for y in range(0, 100): if x == y: print ("找到数字:", x) break else: print ("没有找到")
break语句不能运行在循环体或分支之外。
(2)continue语句
continue语句用于循环中的控制,当程序执行到continue语句时,程序将转到下一次循环。break语句会直接终端循环,而continue语句则是停止本次循环,进入下一次循环,循环语句并没有中止。
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author: [email protected] # break语句 x = input("输入x的值:") y = 0 for y in range(0, 100): if x == y: print ("y =:", y) continue else: print ("x =:",x) break
四、结构化程序示例
冒泡排序
冒泡排序的程序可以分解为两个模块:冒泡算法的实现函数和主函数
例子:实现冒泡排序算法
#!/usr/bin/python# -*- coding: UTF-8 -*-def bubbleSort(numbers): # 冒泡算法的实现for j in xrange(len(numbers) - 1, -1, -1):for i in xrange(j):if numbers[i] > numbers[i+1]: # 把数值小的数字放到顶端numbers[i], numbers[i+1] = numbers[i+1], numbers[i]print (numbers)def main(): # 主函数numbers = [23, 12, 9, 15, 6] bubbleSort(numbers)if __name__ == ‘__main__‘: main()
输出结果:
---------- python2.7 ----------[12, 23, 9, 15, 6] [12, 9, 23, 15, 6] [12, 9, 15, 23, 6] [12, 9, 15, 6, 23] [9, 12, 15, 6, 23] [9, 12, 15, 6, 23] [9, 12, 6, 15, 23] [9, 12, 6, 15, 23] [9, 6, 12, 15, 23] [6, 9, 12, 15, 23] 输出完成 (耗时 0 秒) - 正常终止