Python经典100题:程序11~20(附详细解析与代码)

Python经典100题:程序11~20(附详细解析与代码) 本系列继续整理Python经典编程100题的第11至20题,每道题都包含题目描述、解题思路、完整代码(含注释)、核心思想及难易程度评估,适合初学者巩固基础、培养编程思维。目录程序11:斐波那契数列(兔子繁殖)题目描述解题思路完整代码及注释核心思想难易程度程序12:判断101-200之间的素数题目描述解题思路完整代码及注释核心思想难易程度程序13:水仙花数题目描述解题思路完整代码及注释核心思想难易程度程序14:正整数分解质因数题目描述解题思路完整代码及注释核心思想难易程度程序15:成绩等级判断题目描述解题思路完整代码及注释核心思想难易程度程序16:最大公约数和最小公倍数题目描述解题思路完整代码及注释核心思想难易程度程序17:统计字符类型个数题目描述解题思路完整代码及注释核心思想难易程度程序18:数列求和(a+aa+aaa+...)题目描述解题思路完整代码及注释核心思想难易程度程序19:完数题目描述解题思路完整代码及注释核心思想难易程度程序20:自由落体问题题目描述解题思路完整代码及注释核心思想难易程度总结程序11:斐波那契数列(兔子繁殖)题目描述有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?解题思路这是一个经典的斐波那契数列问题第一个月和第二个月兔子数为1对从第三个月开始,每个月的兔子数等于前两个月之和即:F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2)完整代码及注释# 程序11:斐波那契数列(兔子繁殖) # 方法一:迭代法(推荐) def fibonacci_iter(n): """使用迭代计算第n个月的兔子对数""" if n = 2: return 1 a, b = 1, 1 for i in range(3, n + 1): a, b = b, a + b return b # 方法二:递归法 def fibonacci_rec(n): """使用递归计算第n个月的兔子对数""" if n = 2: return 1 return fibonacci_rec(n - 1) + fibonacci_rec(n - 2) if __name__ == "__main__": print("前20个月的兔子数量:") for i in range(1, 21): print(f"第{i}个月:{fibonacci_iter(i)}对", end=" ") if i % 5 == 0: print() # 每5个换行核心思想斐波那契数列:从第三项开始,每一项等于前两项之和迭代法:使用两个变量不断更新,效率高递归法:理解递归思想,但效率较低,存在重复计算难易程度★☆☆☆☆(简单)理解斐波那契规律即可,是循环和递归的基础练习。程序12:判断101-200之间的素数题目描述判断101-200之间有多少个素数,并输出所有素数。解题思路素数(质数)是指除了1和它本身以外不再有其他因数的自然数判断一个数n是否为素数:检查从2到√n之间是否存在能整除n的数如果存在,则n不是素数;否则是素数完整代码及注释# 程序12:判断101-200之间的素数 import math def is_prime(num): """判断一个数是否为素数""" if num 2: return False # 只需检查到平方根即可 for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: return False return True if __name__ == "__main__": primes = [] for n in range(101, 201): if is_prime(n): primes.append(n) print(f"101-200之间的素数共有{len(primes)}个:") # 每行输出10个 for i, p in enumerate(primes, 1): print(p, end=" ") if i % 10 == 0: print()核心思想素数判断:检查2到√n之间的所有数是否能整除n数学优化:只需检查到平方根,大幅减少循环次数质数分布:101-200之间的素数有21个难易程度★★☆☆☆(中等)需要理解素数的定义和判断优化方法。程序13:水仙花数题目描述打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如:153=1³+5³+3³。解题思路三位数范围:100到999分解出百位、十位、个位数字计算各位数字的立方和,判断是否等于原数完整代码及注释# 程序13:水仙花数 def is_narcissistic(num): """判断一个数是否为水仙花数(三位数)""" # 分解出百位、十位、个位 hundreds = num // 100 tens = (num // 10) % 10 units = num % 10 # 计算立方和 return hundreds ** 3 + tens ** 3 + units ** 3 == num if __name__ == "__main__": narcissistic_nums = [] for num in range(100, 1000): if is_narcissistic(num): narcissistic_nums.append(num) print("水仙花数有:", narcissistic_nums)核心思想数位分解:通过整除和取余操作获取各位数字立方和验证:计算立方和并与原数比较水仙花数只有4个:153, 370, 371, 407难易程度★☆☆☆☆(简单)主要考察数位分解和循环遍历。程序14:正整数分解质因数题目描述将一个正整数分解质因数。例如:输入90,打印出90=2×3×3×5。解题思路从最小的质数2开始,不断尝试整除如果能够整除,则输出该质数,并将原数除以该质数继续用相同的质数尝试,直到不能整除为止换下一个质数继续尝试,直到原数变为1完整代码及注释# 程序14:正整数分解质因数 def prime_factors(n): """分解质因数,返回质因数列表""" factors = [] divisor = 2 temp = n while divisor * divisor = temp: while temp % divisor == 0: