Python中的程序逻辑经典案例详解
2023-12-16 23:55:07
文章首发于公众号:小肖学数据分析
Python作为一种强大的编程语言,以其简洁明了的语法和强大的标准库,成为了理想的工具来构建这些解决方案。
本文将通过Python解析几个经典的编程问题。
经典案例
水仙花数
问题描述:水仙花数指的是一个n位数,它的各位数字的n次幂之和等于它自身。例如,对于三位数153,其满足1^3 + 5^3 + 3^3 = 153,因此它是一个水仙花数。
Python代码实现:
def?is_narcissistic(number):
????#?将数字转换成字符串,便于后续遍历其各个位上的数字
????digits?=?[int(d)?for?d?in?str(number)]
????#?比较原数和其各位数字幂次和是否相等,从而判断是否为水仙花数
????return?sum(d**len(digits)?for?d?in?digits)?==?number
#?检索并打印出所有三位水仙花数
narcissistic_numbers?=?[num?for?num?in?range(100,?1000)?if?is_narcissistic(num)]
print("水仙花数:",?narcissistic_numbers)
百钱百鸡
问题描述:古中国数学家提出的问题。现有100文钱,需要买100只鸡。其中公鸡每只5文钱,母鸡每只3文钱,小鸡3只1文钱。如何买?
Python代码实现:
def?calculate_hundred_chickens():
????solutions?=?[]
????#?遍历公鸡的可能数目
????for?roosters?in?range(21):??#?公鸡最多买20只
????????#?遍历母鸡的可能数目
????????for?hens?in?range(34):??#?母鸡最多买33只
????????????#?通过总数和总金额限制计算小鸡数目
????????????chicks?=?100?-?roosters?-?hens
????????????if?5?*?roosters?+?3?*?hens?+?chicks?/?3?==?100:
????????????????solutions.append((roosters,?hens,?chicks))
????return?solutions
#?输出可能的买鸡方案
print("百钱买百鸡的方案:",?calculate_hundred_chickens())
Craps骰子游戏
问题描述:玩家掷两个骰子,如果第一次掷出7点或11点则玩家胜,掷出2点、3点或12点则庄家胜,其他点数玩家继续掷骰,直到点数重复则玩家胜,掷出7点则庄家胜。
Python代码实现:
from?random?import?randrange
def?roll_dice():
????#?模拟掷骰子,返回两个骰子点数之和
????return?randrange(1,?7)?+?randrange(1,?7)
def?play_craps():
????#?第一轮掷骰子结果
????point?=?roll_dice()
????#?玩家胜利的点数
????wins?=?{7,?11}
????#?庄家胜利的点数
????losses?=?{2,?3,?12}
????#?根据第一轮的结果判断胜负
????if?point?in?wins:
????????return?"玩家胜利!"
????elif?point?in?losses:
????????return?"庄家胜利!"
????#?若未分出胜负,继续游戏
????while?True:
????????roll?=?roll_dice()
????????if?roll?==?point:
????????????return?"玩家胜利!"
????????elif?roll?==?7:
????????????return?"庄家胜利!"
#?模拟游戏并输出结果
print("Craps赌博游戏结果:",?play_craps())
进阶练习题
斐波那契数列
问题描述:斐波那契数列是这样一个数列,除前两个数字外,每个数字都是前两个数字之和。求斐波那契数列的第n项。
Python代码实现:
from?functools?import?lru_cache
@lru_cache(maxsize=None)
def?fibonacci(n):
????#?基准情况处理
????if?n?in?(0,?1):
????????return?n
????#?递归求解斐波那契数列的前两项
????return?fibonacci(n-1)?+?fibonacci(n-2)
#?计算前20个斐波那契数列数并打印
for?i?in?range(20):
????print(fibonacci(i),?end="?")
print()
完美数
问题描述:一个等于其所有真因子(即除了自身以外的约数)之和的数称为完美数。求不超过10000的所有完美数。
Python代码实现:
def?is_perfect_number(n):
????#?计算除自身外所有因子的和
????factors?=?[1]?+?[i?for?i?in?range(2,?int(n**0.5)+1)?if?n?%?i?==?0]
????#?检查因子和是否等于原数
????return?sum(factors)?+?sum(n?//?i?for?i?in?factors?if?i?!=?1?and?n?//?i?!=?i)?==?n
#?寻找并打印所有完美数
print([n?for?n?in?range(2,?10001)?if?is_perfect_number(n)])
素数生成
问题描述:素数是只能被1和它自己整除的大于1的数。求不超过100的所有素数。
Python代码实现:
def?eratosthenes_sieve(limit):
????#?创建一个布尔数组,初始假设所有数字都是素数
????primes?=?[True]?*?limit
????#?用埃拉托斯特尼筛法筛选素数
????for?num?in?range(2,?int(limit**0.5)?+?1):
????????if?primes[num]:
????????????#?将num的倍数标记为非素数
????????????primes[num*num:limit:num]?=?[False]?*?((limit?-?num*num?-?1)?//?num?+?1)
????#?筛选并返回素数列表
????return?[num?for?num?in?range(2,?limit)?if?primes[num]]
#?打印100以内的素数
print(eratosthenes_sieve(100))
结语
掌握构建程序的逻辑,就像攀登一座山峰。在这个过程中,我们不断地解决问题,逐步攀升,直到最终达到顶峰。让我们享受编程带来的挑战和乐趣。
文章来源:https://blog.csdn.net/qq_41387939/article/details/135039364
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!