当前位置: 首页 > web >正文

实验3 函数与代码复用

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

实验任务:


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

def cal_factorial(n):"""使用循环计算阶乘:param n: 非负整数:return: n 的阶乘"""if n < 0:raise ValueError("输入必须是非负整数")result = 1for i in range(1, n + 1):result *= ireturn result# 用户输入
try:n = int(input("请输入一个非负整数以计算阶乘:"))print(f"{n}! = {cal_factorial(n)}")
except ValueError as e:print(f"输入错误:{e}")

运行结果:

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

from functools import lru_cache@lru_cache(maxsize=None)  # 使用缓存优化递归
def fibonacci(n):"""使用递归计算斐波那契数列:param n: 非负整数:return: 第 n 个斐波那契数"""if n <= 0:raise ValueError("输入必须是正整数")if n == 1 or n == 2:return 1return fibonacci(n - 1) + fibonacci(n - 2)# 用户输入
try:n = int(input("请输入一个正整数以计算斐波那契数列:"))print(f"Fibonacci({n}) = {fibonacci(n)}")
except ValueError as e:print(f"输入错误:{e}")

运行结果:

 

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

import os
import sys
import turtle# 动态设置 Tcl 和 Tk 的路径
# 假设你的 Python 安装路径是 C:\Program Files\Python313
python_installation_path = r"C:\Program Files\Python313"# 设置环境变量
os.environ['TCL_LIBRARY'] = os.path.join(python_installation_path, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(python_installation_path, 'tcl', 'tk8.6')# 确保路径已正确设置
print("TCL_LIBRARY:", os.environ.get('TCL_LIBRARY'))
print("TK_LIBRARY:", os.environ.get('TK_LIBRARY'))def koch_curve(t, order, size, direction=1):"""绘制科赫曲线:param t: turtle 对象:param order: 科赫曲线的阶数:param size: 初始线段长度:param direction: 绘制方向(1 为正向,-1 为反向)"""if order == 0:  # 基本情况:直接绘制直线t.forward(size)else:# 绘制科赫曲线的 4 个部分koch_curve(t, order - 1, size / 3, direction)t.left(60 * direction)koch_curve(t, order - 1, size / 3, direction)t.right(120 * direction)koch_curve(t, order - 1, size / 3, direction)t.left(60 * direction)koch_curve(t, order - 1, size / 3, direction)def draw_koch_curve(order, size, speed=5, color="black", direction=1):"""绘制科赫曲线的完整函数:param order: 科赫曲线的阶数:param size: 初始线段长度:param speed: 绘制速度:param color: 绘制颜色:param direction: 绘制方向(1 为正向,-1 为反向)"""# 设置绘图窗口window = turtle.Screen()window.bgcolor("white")# 设置 turtlet = turtle.Turtle()t.speed(speed)t.color(color)# 绘制科赫曲线koch_curve(t, order, size, direction)# 结束绘图window.mainloop()# 用户输入
try:order = int(input("请输入科赫曲线的阶数:"))size = int(input("请输入初始线段长度:"))speed = int(input("请输入绘制速度(0-10,0 为最快):"))color = input("请输入绘制颜色(如 'blue'、'red' 等):")direction = input("请输入绘制方向('正向'(y) 或 '反向'(n)):")direction = 1 if direction.strip().lower() == "y" else -1draw_koch_curve(order, size, speed, color, direction)
except ValueError as e:print(f"输入错误:{e}")

运行结果:

(1)

(2)

http://www.xdnf.cn/news/1816.html

相关文章:

  • 【Java学习日记26】:方法的重载
  • 通道降维方式
  • Java大模型开发与应用 - 面试实战
  • 【金仓数据库征文】金仓数据库KingbaseES:在技术与人文交织中开拓信创未来
  • 【Linux】gdb工具,Linux 下程序调试的 “透视眼”
  • AgeTech News|银发科技一周行业大事件
  • Python 端口转发:程序员必备的网络黑科技!
  • Linux解压tar.gz包的正确姿势(附赠防抓狂指南)
  • 2024 年中国头部互联网企业财报解读:阿里财报、腾讯财报、京东财报、美团财报、拼多多财报、小米集团财报
  • 第一部分:git基本操作
  • netlist
  • python——异常
  • 区块链驱动的供应链金融创新:模型构建与商业化路径研究
  • string容器训练算法题
  • IJCV期刊2025年3月研究热点解析
  • BLIP 系列论文(BLIP、BLIP-2、InstructBLIP)
  • Android面试题目基础总结(二)
  • RCE学习
  • 第八节:进阶特性高频题-Pinia与Vuex对比
  • 马架构的Netty、MQTT、CoAP面试之旅
  • Windows 安装 JDK
  • react nativeWebView跨页面通信
  • YOLOv11改进:轻量化模型MobileNetv4
  • 如何在 Dialog 中安全初始化 ECharts 并自动监听容器大小变化
  • Python3 基础:函数定义与调用
  • Java 运算符:深度解析
  • 在深度学习中FLOPs和GFLOPs的含义及区别
  • 大模型是如何生成内容的?
  • Linux内核之struct pt_regs结构
  • Spring 中的循环引用问题