实验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)