目的:理解函数封装与递归思想

实验任务:

  1. 基础 :编写函数cal_factorial(n)计算阶乘(循环实现)。

    源码:

    def cal_factorial(n):

    result = 1

    for i in range(1, n + 1):

    result *= i

    return result

从控制台获取输入

try:

number = int(input("请输入一个整数来计算它的阶乘: "))

if number < 0:

print("负数没有阶乘,请输入一个非负整数。")

else:

factorial = cal_factorial(number)

print(f"{number} 的阶乘是: {factorial}")

except ValueError:

print("输入无效,请输入一个有效的整数。")

运行截图:

  1. 进阶 :用递归实现斐波那契数列(考虑添加缓存优化)。

    源码:

用于存储已经计算过的斐波那契数

fib_cache = {}

def fibonacci(n):

"""

此函数使用递归和缓存优化来计算斐波那契数列的第 n 项。

:param n: 要计算的斐波那契数列的位置

:return: 斐波那契数列的第 n 项的值

"""

# 检查是否已经计算过该值

if n in fib_cache:

return fib_cache[n]

# 基本情况

if n == 0 or n == 1:

result = n

else:

# 递归计算

result = fibonacci(n - 1) + fibonacci(n - 2)

# 将计算结果存入缓存

fib_cache[n] = result

return result

if name == "main":

try:

# 从控制台获取用户输入

n = int(input("请输入要计算斐波那契数列的位置(非负整数): "))

if n < 0:

print("输入无效,请输入一个非负整数。")

else:

# 调用函数计算斐波那契数

result = fibonacci(n)

print(f"斐波那契数列的第 {n} 项是: {result}")

except ValueError:

print("输入无效,请输入一个有效的非负整数。")

运行截图:

  1. 拓展 :科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外功能

    源码:

    import turtle

def koch(t, order, size, speed, color):

t.speed(speed)

t.pencolor(color)

if order == 0:

t.forward(size)

else:

koch(t, order - 1, size / 3, speed, color)

t.left(60)

koch(t, order - 1, size / 3, speed, color)

t.right(120)

koch(t, order - 1, size / 3, speed, color)

t.left(60)

koch(t, order - 1, size / 3, speed, color)

def draw_koch_snowflake(order, size, speed, color, is_reverse=False):

t = turtle.Turtle()

screen = turtle.Screen()

if is_reverse:

t.right(180)

for _ in range(3):

koch(t, order, size, speed, color)

t.right(120)

screen.exitonclick()

正向绘制雪花示例

draw_koch_snowflake(order=3, size=300, speed=3, color="blue", is_reverse=False)

反向绘制雪花示例

draw_koch_snowflake(order=3, size=300, speed=3, color="red", is_reverse=True)

正向运行截图:

反向绘制运行截图:

Python实验3 函数与代码复用的更多相关文章

  1. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...

  2. 函数和代码复用 --Python

    1.关于递归函数的描述,以下选项中正确的是 A.包含一个循环结构 B.函数比较复杂 C.函数内部包含对本函数的再次调用 D.函数名称作为返回值 答案:D 答案解析:递归函数是指函数内部包含对本函数的再 ...

  3. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

  4. 使用python对py文件程序代码复用度检查

    #!/user/bin/env python # @Time :2018/6/5 14:58 # @Author :PGIDYSQ #@File :PyCheck.py from os.path im ...

  5. Python__函数和代码复用

    主要内容 函数的定义和使用 实例:七段数码管的绘制 代码复用与函数递归 PyInstall库的使用 实例:科赫雪花小包裹 函数的定义与使用 函数的理解与定义 函数的使用及调用过程 函数的参数传递 函数 ...

  6. 我居然不知道Vue3可以使用hooks函数实现代码复用?

    每天都要开心(▽)哇: 项目开发过程中,我们会遇到一些情况,就是多个组件都可以重复使用的一部分代码逻辑,功能函数,我们想要复用,这可怎么办呢? VUE2我们是怎么做的呢? 在vue2 中有一个东西:M ...

  7. python自定义pi函数的代码

    下边内容是关于python自定义pi函数的内容. def pi(): # Compute digits of Pi. # Algorithm due to LGLT Meertens. k, a, b ...

  8. Python学习笔记6函数和代码复用

    1.函数 (1)定义: (2)函数调用 (3)函数的参数传递 参数传递的两种方式:函数调用时,参数可以按照位置或名称的方式传递 (4)函数的返回值 (5)局部变量和全局变量 (6)lambda函数 2 ...

  9. Python语言程序设计基础(5)—— 函数和代码复用

    lambda sum = lambda x,y : x + y print(sum(3,3),type(sum)) 默认参数 def prints(str,times = 2) : print(str ...

  10. Python中用函数实现代码的复用

    # Python中用函数实现代码复用 """ def funcname(paras): statements return [expression] 关于函数定义说明如下 ...

随机推荐

  1. SQL SERVER巡检脚本

    print'----------------------------' print'开始巡检' print'----------------------------' print'1.查看数据库版本信 ...

  2. 云主机 vs 轻量型云主机:性能与灵活性的平衡

    本文分享自天翼云开发者社区<云主机 vs 轻量型云主机:性能与灵活性的平衡>,作者:冯****芙 什么是轻量型云主机.什么是云主机? 云主机是云计算的一种基础设施服务模型,它是在云平台上通 ...

  3. Iceberg根据快照查看文件,根据文件查看哪个快照写入

    一.背景 用户查询iceberg表时报文件为空,因为存在写入和治理程序同时操作iceberg表,需要查看空文件是哪个快照产生的,方便确定是flink写入缺陷还是spark治理缺陷 二.通过Sql查询文 ...

  4. .NET Core内存结构体系(Windows环境)底层原理浅谈

    物理内存与虚拟内存 物理内存(Physical Memory) 定义:物理内存是计算机硬件中的实际RAM(如DDR5内存条),直接通过总线与CPU连接,用于临时存储运行中的程序和数据. 虚拟内存(Vi ...

  5. 一文详解 MySQL 中的间隙锁

    博客:https://www.emanjusaka.com 博客园:https://www.cnblogs.com/emanjusaka 公众号:emanjusaka的编程栈 by emanjusak ...

  6. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-15- iframe操作--番外篇 (详细教程)

    1.简介 通过前边三篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe的一些特殊情况的介绍和讲解,主要从iframe的定位.监听事件和执行js脚本三个方面进行展开 ...

  7. QT5笔记: 20. QStringListModel的使用

    主要为 :添加.插入.修改.删除.清空等操作 例子:本例子中QListView 没有做任何处理,只是拖放至ui文件,设置了布局 MainWindow.h #ifndef MAINWINDOW_H #d ...

  8. 螺旋原型设计 (Spiral Model SDLC)

    螺旋模型介绍 -:该模型描述了软件开发过程.该模型是两种模型的组合,首先是迭代模型和一个SDLC 模型,并将其与循环过程相结合. 该模型考虑了大多数其他模型通常没有注意到的风险.该模型从在一次迭代开始 ...

  9. Sqoop2 - [01] 安装部署

    1.启动Hadoop集群 2.将Sqoop2的安装包上传到合适的目录中解压 tar -zxvf sqoop-1.99.7-bin-hadoop200.tar.gz 3.修改Hadoop的配置文件cor ...

  10. 从汇编层解读Golang的闭包实现:逃逸分析与性能影响

    本文精心梳理了一系列面试中具有一定难度的高频Golang问题,其中部分知识点可能你之前未曾深入探究,然而它们却在面试和实际工作中至关重要. 包括:Golang的基础语法.并发模型.内存管理等核心知识点 ...