【Python学习篇】Python实验小练习——循环结构(八)

简介: 【Python学习篇】Python实验小练习——循环结构(八)

一、实验目的:

(1)掌握循环的概念,能够用循环结构来解决算法问题

(2)熟练掌握实现遍历循环操作的for语句

(3)熟练掌握实现无线循环操作的while语句

(4)掌握用来辅助控制循环执行的break和continue语句

二、实验环境:

       联网计算机一台/每人,内装Windows 7以上操作系统和安装Python 3.7集成开发环境IDLE。

三、实验内容:

1.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,编程计算这个序列前20项之和。

2.设计一个“过七游戏”,这个游戏由5人以上参与,任意一人从1开始数数,当遇到7或者7的倍数或者含有数字7时,必须以敲桌子代替,报出的人输。

3.如果将20元换成零钱,要求只能换成1元、5元、10元的纸币,共有多少种方法。

4.编程计算自然对数e的近似值,要求其误差小于0.00001,公式为e=1+1/1!+1/2!+1/3!+…+1/n!+…。

5.编程找出1000以内的所有完数,一个数如果恰好等于它的因子之和,这个数称为完数,例如6=1+2+3。

四、实验步骤与结果

1. 新建文件夹并命名为学号-姓名-实验。

2. 安装 Python 解释器Python 3.7 集成开发环境IDLE,并进入IDLE。

3. 依次输入自己编好的程序实验内容1-7的源程序,分别命名为sy1_1.py - sy1_5.py 并保存至已建好的文件夹中。

4. 检查已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。

5. 运行程序并分析运行结果是否合理。在运行时要注意当输入不同的数据时所得结果是否正确,应测试两组以上数据,分别检查在不同情况下结果是否正确。

                                       列出1-5题源程序清单并记录上机运行结果。

1.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,编程计算这个序列前20项之和。

源代码:

def fibonacci(n):
    # 生成斐波那契数列的前n个数字
    fib_seq = [1, 1]  # 开始的两个数字
    while len(fib_seq) < n:
        fib_seq.append(fib_seq[-1] + fib_seq[-2])
    return fib_seq
def sum_of_fractions(n):
    # 计算分数序列的前n项之和
    fib_seq = fibonacci(n+1)  # 需要n+1个斐波那契数因为分数的分子与分母
    total_sum = 0
    for i in range(1, n+1):
        total_sum += fib_seq[i] / fib_seq[i-1]  # fib_seq[i]是分子,fib_seq[i-1]是分母
    return total_sum
 
# 计算前20项之和
result = sum_of_fractions(20)
print(result)

运行效果:

2.设计一个“过七游戏”,这个游戏由5人以上参与,任意一人从1开始数数,当遇到7或者7的倍数或者含有数字7时,必须以敲桌子代替,报出的人输。

源代码:

def game_seven(n_players):
    player = 0  # 初始玩家设置为0
    for i in range(1, 101):  # 从1数到100
        if '7' in str(i) or i % 7 == 0:  # 检查数字是否含有7或者是7的倍数
            print('玩家', player% n_players + 1, '敲桌子')  # 玩家敲桌子
        else:
            print('玩家',player% n_players + 1, '报数', i)  # 玩家报数
        player += 1  # 下一个玩家
 
# 可以通过改变参数,设定玩家的数量
game_seven(5)

运行效果:

3.如果将20元换成零钱,要求只能换成1元、5元、10元的纸币,共有多少种方法。

源代码:

def count_change_ways(n):
    # 初始化一个数组来存储每个金额的方法数
    ways = [0] * (n + 1)
    ways[0] = 1  # 金额为0时只有一种方法,即不换任何纸币
 
    # 遍历每种纸币的面额
    for coin in [1, 5, 10]:
        for amount in range(coin, n + 1):
            # 对于每个金额,加上使用当前纸币的方法数
            ways[amount] += ways[amount - coin]
 
    return ways[n]
 
# 计算将20元换成1元、5元、10元纸币的方法数
print(count_change_ways(20))

运行效果:

4.编程计算自然对数e的近似值,要求其误差小于0.00001,公式为e=1+1/1!+1/2!+1/3!+…+1/n!+…。

源代码:

def factorial(n):
    """计算阶乘"""
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result
 
def approximate_e(error_threshold):
    """计算自然对数e的近似值"""
    e_approx = 1
    n = 1
    term = 1
    while term >= error_threshold:
        term = 1 / factorial(n)
        e_approx += term
        n += 1
    return e_approx
 
# 设置误差阈值为0.00001
error_threshold = 0.00001
# 计算自然对数e的近似值
e_approx = approximate_e(error_threshold)
print("自然对数e的近似值为:", e_approx)

运行效果:

5.编程找出1000以内的所有完数,一个数如果恰好等于它的因子之和,这个数称为完数,例如6=1+2+3。

源代码:

def find_factors(num):
    """找出一个数的所有因子(不包括该数本身)"""
    factors = [1]  # 1是所有正整数的因子
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            factors.append(i)
            if i != num // i:  # 排除平方根的重复因子
                factors.append(num // i)
    return factors
 
def find_perfect_numbers(limit):
    """找出limit以内的所有完数"""
    perfect_numbers = []
    for num in range(2, limit):
        factors = find_factors(num)
        if sum(factors) == num:
            perfect_numbers.append(num)
    return perfect_numbers
 
# 找出1000以内的所有完数
perfect_numbers = find_perfect_numbers(1000)
print("1000以内的所有完数:", perfect_numbers)

运行效果:

五、总结:

1.实验过程中的问题及解决方法:

问题:计算量大,导致程序运行缓慢。

解决方法:优化算法,例如使用更高效的算法,或者通过剪枝、缓存中间结果等技术减少重复计算。

问题:计算过程中出现数值不稳定,导致结果不准确或溢出。

解决方法:使用数值稳定的算法,或者调整计算顺序,避免大数吃小数的情况。

问题:程序占用内存过多,可能导致内存溢出。

解决方法:优化数据结构,减少不必要的内存占用,或者使用更高效的数据存储方式。

问题:程序在某些边界条件或异常情况下表现不佳。

解决方法:增加测试用例,特别是针对边界条件和异常情况的测试。

2.实验收获:

       通过实验过程所获得的知识、技能、经验和洞察力。这些收获可以是理论上的,也可以是实践上的,或者是两者的结合,遇到问题是很常见的。关键是要有一个系统的方法来诊断问题,并采取适当的措施来解决它们。这通常涉及到代码审查、调试、性能分析和测试。通过这些方法,可以逐步提高程序的正确性、效率和稳定性。

📝大佬觉得本文有所裨益,不妨轻点一下👍给予鼓励吧!

❤️❤️❤️本人虽努力,但能力尚浅,若有不足之处,恳请各位大佬不吝赐教,您的批评指正将是我进步的动力!😊😊😊

💖💖💖若您认为此篇文章对您有所帮助,烦请点赞👍并收藏🌟,您的支持是我前行的最大动力!

🚀🚀🚀任务在默默中完成,价值在悄然间提升。让我们携手共进,一起加油,迎接更美好的未来!🌈🌈🌈

目录
相关文章
|
1月前
|
安全 数据安全/隐私保护 Python
Python学习的自我理解和想法(27)
本文记录了学习Python第27天的内容,主要介绍了使用Python操作PPTX和PDF的技巧。其中包括通过`python-pptx`库创建PPTX文件的详细步骤,如创建幻灯片对象、选择母版布局、编辑标题与副标题、添加文本框和图片,以及保存文件。此外,还讲解了如何利用`PyPDF2`库为PDF文件加密,涵盖安装库、定义函数、读取文件、设置密码及保存加密文件的过程。文章总结了Python在处理文档时的强大功能,并表达了对读者应用这些技能的期待。
|
1月前
|
存储 搜索推荐 算法
Python学习的自我理解和想法(28)
本文记录了学习Python第28天的内容——冒泡排序。通过B站千锋教育课程学习,非原创代码。文章详细介绍了冒泡排序的起源、概念、工作原理及多种Python实现方式(普通版、进阶版1和进阶版2)。同时分析了其时间复杂度(最坏、最好、平均情况)与空间复杂度,并探讨了实际应用场景(如小规模数据排序、教学示例)及局限性(如效率低下、不适用于高实时性场景)。最后总结了冒泡排序的意义及其对初学者的重要性。
|
1月前
|
Python
Python学习的自我理解和想法(26)
这是一篇关于使用Python操作Word文档的学习总结,基于B站千锋教育课程内容编写。主要介绍了通过`python-docx`库在Word中插入列表(有序与无序)、表格,以及读取docx文件的方法。详细展示了代码示例与结果,涵盖创建文档对象、添加数据、设置样式、保存文件等步骤。虽为开学后时间有限下的简要记录,但仍清晰梳理了核心知识点,有助于初学者掌握自动化办公技巧。不足之处欢迎指正!
|
2月前
|
索引 Python
Python学习的自我理解和想法(24)
本文记录了学习Python操作Excel的第24天内容,基于B站千锋教育课程。主要介绍openpyxl插件的使用,包括安装、读取与写入Excel文件、插入图表等操作。具体内容涵盖加载工作簿、获取单元格数据、创建和保存工作表,以及通过图表展示数据。因开学时间有限,文章简要概述了各步骤代码实现,适合初学者参考学习。如有不足之处,欢迎指正!
|
1月前
|
Python
Python学习的自我理解和想法(25)
这是一篇关于Python操作Word文档(docx)的教程总结,基于B站千锋教育课程学习(非原创代码)。主要内容包括:1) docx库插件安装;2) 创建与编辑Word文档,如添加标题、段落、设置字体样式及保存;3) 向新或现有Word文档插入图片。通过简单示例展示了如何高效使用python-docx库完成文档操作。因开学时间有限,内容精简,后续将更新列表和表格相关内容。欢迎指正交流!
|
3月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
1月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
74 11
|
3月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
122 28

推荐镜像

更多