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