1、编程要求
阿萌要开发一个面积计算器程序,用于帮助学生理解平面几何图形的边长与面积的关系。程序可以计算长方形、正方形、平行四边形、三角形的面积。
阿萌这次编写的程序有点复杂,程序要计算四个几何图形的面积,而且计算每个几何图形面积的输入也不尽相同。阿萌该如何编写这个程序呢?
2、问题分解
平时我们在解决一些复杂问题时,会把一个复杂的问题分解成多个子问题,先逐个解决这些子问题,当这些子问题解决后,复杂的问题自然就得到了解决。
例如:假如你要在家做一顿丰盛的晚餐,你可能会安排人去采购食材、安排另外的人备菜,你负责掌勺。我们如果把做一顿丰盛的晚餐作为一个复杂问题,那么采购食材、备菜、掌勺就是这个复杂问题的子问题,当采购食材、备菜、掌勺这些问题得到解决后,做一顿丰盛的晚餐这个大问题自然就得到了解决。
把复杂的问题分解成多个子问题就是分而治之的思想,分而治之的思想同样也可以使用到编程过程中。对于复杂的程序,可以对程序的功能进行分解,将程序的功能分解成多个子功能,从而达到将复杂问题进行简化的目的。
3、划分模块
面积计算器可以分解为计算长方形的面积、计算正方形的面积、计算平行四边形的面积、计算三角形的面积四个子功能,每个子功能是一个独立的模块文件。
模块文件就是我们创建的代码文件。前面我们说过,一个Python程序由一个模块或多个模块组成,每个模块就是一个代码文件。在这些模块中,只有一个是主模块,该主模块将被python解释器直接执行模块中的代码,其它模块为功能模块,功能模块只有被主模块的代码调用后才会执行。
按照功能划分,面积计算器程序共有五个模块文件,主模块文件main.py,计算长方形面积的模块文件rectangle.py,计算正方形面积的模块文件square.py,计算平行四边形面积的模块文件paraller.py,计算三角形面积的模块文件triangle.py,还有主模块文件main.py。
模块划分完成后,就可以开始编写每个模块代码了。
4、计算长方形的面积
长方形的面积公式为:S = a * b
S表示长方形的面积,a表示长方形的长,b表示长方形的宽。
程序的输入是长方形的长和宽,程序的输出是长方形的面积。
计算长方形的面积用函数来实现,方便主模块的调用,阿萌绘制了计算长方形面积的流程图。
在流程图中,当学生输入的a和b不是整数或小数时,需要提示用户重新输入长方形的长和宽,用代码实现时,可以使用while循环来实现。
rectangle.py代码如下:
'''程序文件:rectangle.py功能描述:计算长方形的面积调用模块:main.py代码编写时间:2020/04/11作者:编程训练营'''# 定义函数areadef area(): while(True): # 输出提示信息 a = input("请输入长方形的长(整数):") # 判断a是否是整数或小数 if a.isdigit(): # 输出提示信息 b = input("请输入长方形的宽(整数):") if b.isdigit(): S = int(a) * int(b) return S else: print("输入错误,请重新输入") # 提示学生输入错误 else: print("输入错误,请重新输入")
代码解读
代码定义了area函数,用于计算长方形的面积。在area函数内部使用了while循环,当学生输入的内容不是整数时,函数会提示学生输入错误,直至学生输入正确的长方形的长和宽。函数计算长方形的面积,并返回面积。
5、计算正方形的面积
正方形的面积公式为:S = a * a
S表示正方形的面积,a表示正方形的边长。
程序的输入是正方形的边长,程序的输出是正方形的面积。
计算正方形的面积也通过函数来实现,方便主模块的调用。阿萌绘制了计算正方形面积的流程图。
square.py代码如下:
'''程序文件:square.py功能描述:计算正方形的面积调用模块:main.py代码编写时间:2020/04/11作者:编程训练营'''# 定义函数areadef area(): while(True): # 输出提示信息 a = input("请输入正方形的边长(整数):") # 判断a是否是整数或小数 if a.isdigit(): S = int(a) * int(a) return S # 提示学生输入错误 else: print("输入错误,请重新输入")
代码解读
计算正方形面积的代码和计算长方形面积的代码基本相同,在编写代码时,可以把rectangle.py的代码复制过来,在rectangle.py代码的基础上修改即可。
6、计算平行四边形的面积
平行四边形的面积公式为:S = a * h
S表示平行四边形的面积,a表示平行四边形的底,h表示平行四边形的高。
程序的输入是平行四边形的底和高,程序的输出是平行四边形的面积。
计算平行四边形的面积也通过函数来实现,方便主模块的调用。阿萌绘制了计算平行四边形面积的流程图。
paraller.py代码如下:
'''程序文件:paraller.py功能描述:计算平行四边形的面积调用模块:main.py代码编写时间:2020/04/11作者:编程训练营'''# 定义函数areadef area(): while(True): # 输出提示信息 a = input("请输入平行四边形的底(整数):") # 判断a是否是整数或小数 if a.isdigit(): # 输出提示信息 h = input("请输入平行四边形的高(整数):") if h.isdigit(): S = int(a) * int(h) return S else: print("输入错误,请重新输入") # 提示学生输入错误 else: print("输入错误,请重新输入")
代码解读
编写代码一定要注意语句的缩进对齐,同一层次的语句左侧要对齐。内层语句要比外层语句缩进一定数量的空格,建议都是四个空格。
7、计算三角形的面积
三角形的面积公式为:S = a * h / 2
S表示三角形的面积,a表示三角形的底,h表示三角形的高。
程序的输入是三角形的底和高,程序的输出是三角形的面积。
计算三角形的面积也通过函数来实现,方便主模块的调用。阿萌绘制了计算三角形面积的流程图。
triangle.py代码如下:
'''程序文件:triangle.py功能描述:计算三角形的面积调用模块:main.py代码编写时间:2020/04/11作者:编程训练营'''# 定义函数areadef area(): while(True): # 输出提示信息 a = input("请输入三角形的底(整数):") # 判断a是否是整数或小数 if a.isdigit(): # 输出提示信息 h = input("请输入三角形的高(整数):") if h.isdigit(): S = int(a) * int(h) / 2 return S else: print("输入错误,请重新输入") # 提示学生输入错误 else: print("输入错误,请重新输入")
代码解读
当while循环条件设置为True时,一定要在循环体有退出循环机制。当学生输入正确的底和高后,函数计算三角形的面积,并使用return语句返回面积,函数执行结束,循环自然就退出了。
8、模块的导入
阿萌有个疑问,主模块如何使用这些功能模块呢?
Python语言提供了import语句用于导入外部模块,它的语法如下:
上图中的modulename是模块名称,name是该模块的别名,在调用模块函数时,可以直接使用name作为模块的名称。
案例01的代码演示了如何导入及调用模块内部函数的方法。
在案例01的代码中,使用import语句导入了“rectangle.py”模块,用于计算长方形的面积,导入模块时只写模块名称就可以了,文件扩展名不需要写。导入的模块别名是rect,后面的语句可以直接使用rect来调用模块内部的函数。
调用导入模块内部函数的语法如下:
S = rect.area() 语句用于调用“rectangle.py”模块的area函数,来计算长方形的面积,area函数返回长方形的面积,并赋值给S变量。
9、主模块编程思路与程序流程图
模块划分完成后,阿萌开始考虑程序主模块的编写。
程序支持长方形、正方形、平行四边形和三角形的面积计算,程序启动后,会进入选择状态,学生可以选择其中的一个状态,该状态对应计算一个几何图形的面积,面积计算完成后,程序会再次进入选择状态。
选择状态为1、2、3、4,状态1计算长方形的面积,状态2计算正方形的面积,状态3计算平行四边形的面积,状态4计算三角形的面积。
程序的具体流程为:
(1)程序输出提示信息,要求学生选择状态,或者输入quit退出程序;
(2)学生选择状态,程序调用状态对应的模块来计算几何图形的面积;
(3)面积计算完成,程序会再次进入选择状态,等待学生的选择;
(4)如果学生输入quit,退出程序。
11、程序代码及解读
阿萌编写的程序代码。
'''程序文件:main.py功能描述:面积计算器主程序代码编写时间:2020/04/14作者:编程训练营'''# 导入模块import rectangle as rectimport square as sqimport paraller as paimport triangle as tr # 程序入口if __name__ == '__main__': while(True): # 输出提示信息 print("-------欢迎使用面积计算器------\n") print("按下数字1键:计算长方形面积\n") print("按下数字2键:计算正方形面积\n") print("按下数字3键:计算平行四边形面积\n") print("按下数字4键:计算三角形面积\n") print("输入quit,退出程序\n") # 获取学生的输入 num = input("请输入:") # 输入数字1? if num == "1": print("长方形的面积为:" + str(rect.area())) # 输入数字2? elif num == "2": print("正方形的面积为:" + str(sq.area())) # 输入数字3? elif num == "3": print("平行四边形的面积为:" + str(pa.area())) # 输入数字4? elif num == "4": print("三角形的面积为:" + str(tr.area())) # 输入quit? elif num == "quit": break
代码解读
使用import语句导入计算长方形、正方形、平行四边形和三角形面积的模块文件。
在while循环体内,首先输出提示信息,提示学生按下不同的数字键,选择计算对应的几何体面积,也可以输入quit退出程序。
然后使用input函数获取学生的输入,使用多重条件结构来判断学生的输入。如果输入的是1、2、3、4数字字符,分别调用对应的模块函数来计算几何体的面积。如果输入的是quit,调用break语句退出循环,程序结束。