【Python】函数设计

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=' ')

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦樂~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值