python上机课-实验3 函数与代码复用 2025.4.25

部署运行你感兴趣的模型镜像

实验 3 函数与代码复用(2 学时)

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

实验任务:

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

完整代码

def cal_factorial(n):
    """计算n的阶乘(循环实现)"""
    if n < 0:
        raise ValueError("n必须为非负整数")
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

a=input("输入一个正整数")
"""输出结果"""
print(cal_factorial(int(a)))

运行结果 

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

完整代码

from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n):
    """递归计算斐波那契数列(带缓存优化)"""
    if n < 0:
        raise ValueError("n必须为非负整数")
    if n <= 1:
        return n
    return fib(n - 1) + fib(n - 2)

a=input("输入一个正整数\n")
"""输出结果"""
print(fib(int(a)))

运行结果 

3. 拓展 :科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外 功能 提示 :递归函数需注意终止条件,避免栈溢出

完整代码

import turtle


def draw_koch_curve(t, length, depth, is_forward=True, color='black', speed=0):
    """
    绘制科赫曲线(支持正反向)
    参数:
        t: turtle对象
        length: 线段长度
        depth: 递归深度
        is_forward: 是否绘制正向曲线
        color: 绘制颜色
        speed: 绘制速度(0-最快,1-慢速,...,10-最慢)
    """
    t.color(color)
    t.speed(speed)

    def forward_koch(t, l, d):
        if d == 0:
            t.forward(l)
        else:
            forward_koch(t, l / 3, d - 1)
            t.left(60)
            forward_koch(t, l / 3, d - 1)
            t.right(120)
            forward_koch(t, l / 3, d - 1)
            t.left(60)
            forward_koch(t, l / 3, d - 1)

    def reverse_koch(t, l, d):
        if d == 0:
            t.forward(l)
        else:
            reverse_koch(t, l / 3, d - 1)
            t.right(60)
            reverse_koch(t, l / 3, d - 1)
            t.left(120)
            reverse_koch(t, l / 3, d - 1)
            t.right(60)
            reverse_koch(t, l / 3, d - 1)

    if is_forward:
        forward_koch(t, length, depth)
    else:
        reverse_koch(t, length, depth)


def main():
    """示例主程序"""
    screen = turtle.Screen()
    screen.title("科赫曲线绘制")
    screen.bgcolor("white")

    t = turtle.Turtle()
    t.penup()
    t.goto(-200, 100)
    t.pendown()

    # 绘制正向蓝色科赫曲线
    draw_koch_curve(t, 400, 3, True, 'blue', 0)

    # 移动位置绘制反向红色科赫曲线
    t.penup()
    t.goto(-200, -100)
    t.pendown()

    draw_koch_curve(t, 400, 3, False, 'red', 0)

    screen.exitonclick()


if __name__ == "__main__":
    main()

运行结果

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值