【Python】函数设计

news2024/10/7 20:34:16

1.联系函数的设计

2.找质数

3.找因子

4.判断水仙花数

5.斐波拉契数列递归调用,并用数组存储已计算过的数,减少重复计算


1、计算利息和本息

编写两个函数分别按单利和复利计算利息,根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1000元在银行存3年,在年利率是6%的情况下,单利和复利分别获得的本息和和利息。单利计算指只有本金计算利息。复利计算是指不仅本金计算利息,利息也计算利息,也就是通常所说的“利滚利”。如这题按单利计算本息和1000十1000*6%*3=1180元,其中利息为180元;按复利计算本息和1000*(1+6%)=1191.016元,其中利息为191.016元。

#按单利:
#本息和=本金+本金*年利率*年
#利息 = 本金*年利率*年
def simple_interest(principal, annual_rate, years):
    """
    计算单利下的本息和和利息
    :param principal: 本金
    :param annual_rate: 年利率(小数形式)
    :param years: 存款年限
    :return: 本息和, 利息
    """
    interest = principal * annual_rate * years
    amount = principal + interest
    return amount, interest

#按复利
#利息=本金*年利率
#本息和=本金*(1+年利率)
def compound_interest(principal, annual_rate, years):
    """
    计算复利下的本息和和利息
    :param principal: 本金
    :param annual_rate: 年利率
    :param years: 存款年限
    :return: 本息和, 利息
    """
    compound_factor = (1 + annual_rate) ** years
    amount = principal * compound_factor
    interest = amount - principal
    return amount, interest


# 调用函数进行计算
principal = 1000  # 本金
annual_rate = 0.06  # 年利率,转换为小数形式
years = 3  # 存款年限

# 单利计算
simple_amount, simple_interest = simple_interest(principal, annual_rate, years)
print(f"单利计算下,本息和为:{simple_amount}元,利息为:{simple_interest}元")

# 复利计算
compound_amount, compound_interest = compound_interest(principal, annual_rate, years)
print(f"复利计算下,本息和为:{compound_amount:.2f}元,利息为:{compound_interest:.2f}元")

2、判断素数

编写函数,判断一个数是否为素数。调用该函数判断从键盘中输人的数是否为素数。素数也称质数,是指只能被1和它本身整除的数。


def is_prime(n):
    """
    判断一个数是否为素数
    :param n: 待判断的整数
    :return: 如果n是素数,返回True;否则返回False
    """
    if n <= 1:
        return False
    elif n == 2:
        return True
    elif n % 2 == 0:
        return False
    else:
        i = 3
        while i * i <= n:
            if n % i == 0:
                return False
            i += 2
        return True

    # 从键盘获取输入


num = int(input("请输入一个整数: "))

# 调用函数并打印结果
if is_prime(num):
    print(f"{num}是素数")
else:
    print(f"{num}不是素数")

3、求因子

编写函数,求出一个数除了1和自身以外的因子。从键盘输人一个数,调用该函数输出除了1和它自身以外的所有因子。


def find_factors(n):
    """
    找出除了1和n以外的n的所有因子
    :param n: 整数n
    :return: n的所有因子的列表(不包括1和n)
    """
    factors = []
    for i in range(2, int(n ** 0.5) + 1):  # 只检查到n的平方根即可
        if n % i == 0:
            factors.append(i)
            if i != n // i:  # 避免平方数时重复添加因子
                factors.append(n // i)
    return factors


# 从键盘获取输入
num = int(input("请输入一个整数: "))

# 调用函数并打印因子
factors = find_factors(num)
if factors:
    print(f"{num}除了1和它自身以外的因子有: {factors}")
else:
    print(f"{num}是质数,没有除了1和它自身以外的因子。")

4、判断水仙花数

编写函数,判断一个数是否为水仙花数。调用该函数打印出1000以内的所有水仙花数。水仙花数是指一个"位数(n≥3),它的每个位上的数字的”次幂之和等于它本身例如:1^3+5^3+3^3=153.则153是水仙花数。水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。

def is_narcissistic_number(num):
    """
    判断一个数是否为水仙花数
    """
    # 转换为字符串以便访问每一位数字
    str_num = str(num)
    n = len(str_num)  # 位数
    sum_of_powers = 0

    # 遍历每一位数字,计算其n次幂并求和
    for digit in str_num:
        sum_of_powers += int(digit) ** n

        # 判断和是否等于原数
    return sum_of_powers == num


# 遍历1到999之间的所有整数,找出水仙花数并打印
for i in range(100, 1000):  # 只需要遍历100到999,因为水仙花数至少三位
    if is_narcissistic_number(i):
        print(i)

5、求斐波拉契数列

编写函数求斐波拉契数列的前20项。波拉契数列的第1项和第2项分别是0和1.从第3项开始,每一项都是前两项之和。如:0,1,1,2,3,5,8,13,21…。试用递归函数实现。


def fibonacci_with_memo(n, memo={}):
    if n in memo:
        return memo[n]
    elif n <= 0:
        return "索引无效,请输入大于0的整数。"
    elif n == 1:
        memo[n] = 0
    elif n == 2:
        memo[n] = 1
    else:
        memo[n] = fibonacci_with_memo(n - 1, memo) + fibonacci_with_memo(n - 2, memo)
    return memo[n]


# 打印斐波那契数列的前20项
for i in range(1, 21):
    print(fibonacci_with_memo(i), end=' ')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1639744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法刷题日志】吸氧羊的StarryCoding之旅 - 贡献法计算

题目链接&#xff1a;https://www.starrycoding.com/problem/3 题目描述 吸氧羊终于注册了一个StarryCoding账号&#xff01;&#xff08;她很开心&#xff09; 但是吸氧羊忘记了它的密码&#xff0c;她想起你是计算机大师&#xff0c;于是就来请教你。 她虽然不记得密码了…

java版数据结构:深入理解栈和队列:数据结构与应用(vector,stack,queue)

目录 前言 动态数组类&#xff08;vector&#xff09; 特点&#xff1a; 应用&#xff1a; 栈&#xff08;Stack&#xff09; 栈的基础概念&#xff1a; 栈的常用方法&#xff1a; 模拟栈操作&#xff1a; 队列&#xff08;Queue&#xff09; 队列的基础概念 队列的常…

golang学习笔记(协程的基础知识)

golang的协程 协程是一种轻量级的线程&#xff0c;它可以实现并发执行的并行操作。协程是Go语言中的一个核心特性&#xff0c;它使得程序能够以并发的方式运行&#xff0c;并且非常高效。与传统的线程相比&#xff0c;协程的创建和销毁成本非常低&#xff0c;可以方便地启动大…

三维坐标点按剖面分类

一、写在前面 ①配套文件&#xff1a;根据剖面对三维坐标点&#xff08;X,Y,Z&#xff09;分类资源-CSDN文库 ②脱敏处理&#xff1a;蚀变数据已采用随机数生成覆盖 ③剖面坐标按顺序排列在“剖面坐标点.xlsx”文件中 二、3点确定空间中平面方程 原理&#xff1a; 设3点A&…

C++深度解析教程笔记2

C深度解析教程笔记2 第3课 - 进化后的 const 分析实验-C与C的const区别实验-C与C的const区别&const作用域 第4课 - 布尔类型和引用小结 本文学习自狄泰软件学院 唐佐林老师的 C深度解析教程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 第3课 - 进化后…

列转行(spark 与presto语法)

一、Presto 语法 原始数据&#xff1a; 期望数据&#xff1a; 代码&#xff1a; SELECT info, value FROM ( select 张三 as name,18 as age,男 as gender,清华 as schoolunion allselect 李四 as name,18 as age,男 as gender,清华 as school ) as a CROSS JOIN UNNEST(…

Unreal 编辑器工具 批量重命名资源

右键 - Editor Utilities - Editor Utility Blueprint&#xff0c;基类选择 Asset Action Utility 在类默认值内&#xff0c;可以添加筛选器&#xff0c;筛选指定的类型 然后新建一个函数&#xff0c;加上4个输入&#xff1a;ReplaceFrom&#xff0c;ReplaceTo&#xff0c;Add…

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大&#xff0c;大致有frameworka层源码&#xff0c;硬件层(HAL)源码&#xff0c;内…

机器学习笔记-18

异常检测问题 异常检测虽然主要用于无监督学习问题上&#xff0c;但是和监督学习问题很相似。 异常检测(Anomaly Detection)&#xff1a;给定正确样本集{ x ( 1 ) , x ( 2 ) . . . x ( n ) x^{(1)},x^{(2)}...x^{(n)} x(1),x(2)...x(n)}&#xff0c;记新样本即要检测的样本为…

堆排序以及TOP-K问题

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;今天我们来深入理解堆这种数据结构&#xff0c;分析一下堆排序以及TOP-K问题&#xff0c;准备好了吗&#xff1f;我要开始咯&#xff01; 一、堆排序 这里我们先假设要排成升序&#xff0c;也就是从左到右&#xf…

JSP简介——[JSP]1

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

基于php+mysql+html图书管理系统(含实训报告)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【C++】命名冲突了怎么办?命名空间来解决你的烦恼!!!C++不同于C的命名方式——带你认识C++的命名空间

命名空间 导读一、什么是C?二、C的发展三、命名空间3.1 C语言中的重名冲突3.2 什么是命名空间&#xff1f;3.3 命名空间的定义3.4 命名空间的使用环境3.5 ::——作用域限定符3.6 命名空间的使用方法3.6.1 通过作用域限定符来指定作用域3.6.2 通过关键字using和关键字namespace…

如何用 Redis 实现延迟队列?

延迟队列是一种常见的消息队列模式&#xff0c;用于处理需要延迟执行的任务或消息。Redis 是一种快速、开源的键值对存储数据库&#xff0c;具有高性能、持久性和丰富的数据结构&#xff0c;因此很适合用于实现延迟队列。在这篇文章中&#xff0c;我们将详细讨论如何使用 Redis…

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么&#xff1f;二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#x…

Mysql基础(四)DML之insert语句

一 insert 语句 强调&#xff1a; 本文介绍的内容很基础,仅做记录用,参考价值较少 ① 总述 目的&#xff1a; 增加rows记录1、完整格式insert [into] 表名[字段名1[, 字段名2]] value[s](值1, 值2);备注&#xff1a;指定部分字段添加,没有被指定的字段要么会自动增长,要…

微信小程序demo-----制作文章专栏

前言&#xff1a;不管我们要做什么种类的小程序都涉及到宣传或者扩展其他业务&#xff0c;我们就可以制作一个文章专栏的页面&#xff0c;实现点击一个专栏跳转到相应的页面&#xff0c;页面可以有科普类的知识或者其他&#xff0c;然后页面下方可以自由发挥&#xff0c;添加联…

ensp 配置s5700 ssh登陆

#核心配置 sys undo info-center enable sysname sw1 vlan 99 stelnet server enable telnet server enable int g 0/0/1 port lin acc port de vlan 99 q user-interface vty 0 4 protocol inbound ssh authentication-mode aaa q aaa local-user admin0 password cipher adm…

结构分析的有限元法及matlab实现(徐荣桥)|【PDF教材+配套案例Matlab源码】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

为何数据库推荐将IPv4地址存储为32位整数而非字符串?

目录 一、IPv4地址在数据库中的存储方式&#xff1f; 二、IPv4地址的存储方式比较 &#xff08;一&#xff09;字符串存储 vs 整数存储 &#xff08;二&#xff09;IPv4地址"192.168.1.8"说明 三、数据库推荐32位整数存储方式原理 四、存储方式对系统性能的影响…