您的位置:首页 > 编程语言 > Python开发

python学习日志(七)"异常处理,几个递归函数的例子"

2018-12-14 23:17 435 查看

几个函数补充

  • 变量.find(" ") 寻找空格
  • 变量.split(" ") 替换空格为逗号

异常处理机制

  • 引入异常处理机制可以用来解决程序运行时的错误
#语法
try:
<body>
except <ErrorType1>:
<handler1>
except <ErrorType2>:
<handler2>
except:
<handler0>
  • 当python遇到try语句,先尝试执行try包含的代码块
  • 如果没有错误发生,执行try-except后面的语句
  • 如果发生错误,python寻找一个符合该错误的异常语句,然后执行相应的except的处理代码

一个BMR计算程序设计

  • 程序:计算BMR值
  • 功能:根据输入的信息计算出带单位的BMR值
#程序实现
def BMR():
"""
BMR计算函数
"""
try:
BMR_value = input("请输入您的性别,身高,年龄,体重,并用空格隔开")

BMR_value = BMR_value.split(" ")

gender = BMR_value[0]

height = float(BMR_value[1])

age = int(BMR_value[2])

weight = float(BMR_value[3])

print("您的性别为{0},身高{1}cm,年龄{2}岁,体重{3}公斤".format(gender, height, age, weight))

if gender == "男":
BMR_Value = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
print("您的基础代谢率为{}大卡".format(BMR_Value))

elif gender == "女":
BMR_Value = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
print("您的基础代谢率为{}大卡".format(BMR_Value))
else:
print("暂不支持该性别!")
except:
print("程序异常!")

def main():
"""
主函数
"""

Q = input("是否退出程序?(Y/N)")
while Q != "Y":
BMR()
Q = input("是否退出程序?(Y/N)")

if __name__ == "__main__":
main()

汉诺塔程序设计

  • 汉诺塔游戏规则,只有三个桌子,盘子由小到大从上往下堆叠,要求一次只能移动一个盘子,并且无论何时小盘子都在大盘子上
  • 程序实现
"""
汉诺塔游戏程序实现
"""
def fun(n, a, b, c):
if n == 1:
print(a, "->", c)
else:
fun(n - 1, a, c, b)
print(a, "->", c)
fun(n - 1, b, a, c)

def main():
fun(3,"A","B","C")
if __name__ == "__main__"
main()
  • 程序思想:
    无论有多少个盘子,最后都是把A桌子最底下的一个盘子给放到C桌子最下面.个人认为比较难理解,不能把第一步第二步怎么做给写出来,实现不了.要理解的是在else语句中,要做的都是重复的事情,就是把盘子不停地在ab之间转换,从而抽出最底下的盘子

分型树的绘制

  • 前面几次讲了turtle的使用,分型树就是调用turtle库结合递归实现的
#案例:绘制分型树
import turtle

def fenxing_tree(n):
if 5 < n < 15:
turtle.pencolor('green')
else:
turtle.pencolor('brown')

if  n > 5 :
#绘制右边树枝
turtle.pendown()
turtle.forward(n)
turtle.right(20)
fenxing_tree(n-5)

#绘制左边树枝
turtle.left(40)
fenxing_tree(n-5)

#返回原点
turtle.penup()
turtle.right(20)
turtle.backward(n)

def main():
turtle.left(90)

turtle.penup()

turtle.backward(150)

turtle.pendown()

fenxing_tree(40)

turtle.exitonclick()

if __name__ == "__main__":
main()

  • 程序思想:我理解的分型树的过程其实不难,之前有人问过,所以我给他解释的时候是按照我之前学习单片机的时候的例子,在单片机中有个词叫中断服务函数以及嵌套中断,不论程序是否被打断,最终都会执行到.
  • 下面图片中黑色为主函数,蓝色的为中断函数,中断函数打断了主函数,然后被后面的中断函数打断,但是不论怎么打断,最终都会被执行完毕.这在分型树中也是一样的

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: