- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE232
Python求解猴子吃桃问题
任务要求
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
任务分析
根据题意,猴子每天吃掉前一天剩余桃子的一半加一个,到第10天仅剩1个桃子。逆向推导公式为:前一天的桃子数=(当天剩余数+1)×2
例如:
第10天剩余1个→第9天剩余(1+1)×2=4个
第9天剩余4个→第8天剩余(4+1)×2=10个
以此类推,最终得到第一天的桃子总数。
任务实现
方法一:逆推循环法
defmethod1():
peaches=1#第10天的桃子数
fordayinrange(9,0,-1):
peaches=(peaches+1)*2
returnpeaches
print(猴子共摘桃子的个数是:,method1())
说明:从第10天反向循环到第1天,每次计算前一天的桃子数。
方法二:递归算法
defmethod2(day=10):
ifday==1:#递归终止条件:第10天剩1个
return1
return(method2(day-1)+1)*2
print(猴子共摘桃子的个数是:,method2())
说明:递归函数从第10天逐层返回计算到第1天。递归深度为10层,可能在大规模计算时导致栈溢出。
方法三:数学公式法
defmethod3():
return3*(2**9)-2#推导公式:(2^n2)*3/2,n=9天
print(猴子共摘桃子的个数是:,method3())
说明:通过等比数列求和公式可得总桃子数为3*(2^9)-2=1534,适用于快速验证结果。
运行结果
猴子共摘桃子的个数是:1534
进程已结束,退出代码为0
Python实现字母大小写互换
任务要求
1.输入一个包含大小写字母的字符串(如HelloWorld!)
2.将字符串中的大写字母转为小写,小写字母转为大写
3.保留非字母字符不变
任务分析
字母大小写互换的核心逻辑在于:
1.ASCII码差异:大写字母(A-Z)的ASCII码范围为65-90,小写字母(a-z)为97-122,两者相差32。
2.内置函数:Python的str.swapcase()可直接实现该功能。
3.位运算优化:利用异或运算(^32)可快速切换大小写。
任务实现
方法1:使用内置函数swapcase()
defswap_case1(s):
returns.swapcase()
#示例
print(swap_case1(HelloWorld!))#输出:hELLOwORLD!
说明:直接调用字符串的内置方法swapcase(),代码最简洁。
方法2:循环遍历+条件判断
defswap_case2(s):
result=[]
forcharins:
ifchar.islower():
result.append(char.upper())
elifchar.isupper():
result.append(char.lower())
else:
result.append(char)
return.join(result)
#示例
print(swap_case2(HelloWorld!))#输出:hELLOwORLD!
说明:
遍历每个字符,通过islower()和isupper()判断大小写
使用upper()和lower()转换后存入列表
方法3:ASCII码运算
defswap_case3(s):
swapped=[]
forcharins:
ascii_val=ord(char)
if65=ascii_val=90:
swapped.append(chr(ascii_val+32))
elif97=ascii_val=122:
swapped.append(chr(ascii_val-32))
else:
文档评论(0)