#1.5 monkey_banana

本文探讨了两种不同的编程方法来解决猴子与香蕉的问题。通过使用左移运算符和乘法运算,展示了如何通过迭代计算得出猴子获得香蕉所需的跳跃次数。代码示例清晰地比较了两种方法,并解释了其背后的数学原理。
#1.5 monkey_banana
#coding = utf-8
"""书上标准求法"""
n=1
for i in range(5,0,-1):
    n=(n+1)<<1
print(n)

"""自己第一反应想到的"""
n=1
for i in range(1,6):
    n=(n+1)*2
print(n)
#和上面类似,自己用的是*2,上面用的是<<1

# 代码概述 该请求基于“猴子摘香蕉”问题,要求将符号逻辑规划问题转化为可执行的 Python 程序。程序需模拟猴子通过行走、推箱、爬箱、摘香蕉等动作,从初始状态达到目标状态。 我们将使用类和谓词函数来建模环境状态与动作,确保每一步操作都满足先决条件,并更新全局状态。 --- # 代码解析 ```python class MonkeyBananaProblem: def __init__(self): # 初始状态 self.monkey_at = &#39;a&#39; self.box_at = &#39;c&#39; self.banana_at = &#39;b&#39; self.on_box = False self.has_banana = False def walk(self, pos): """猴子从当前位置走到指定位置""" if self.on_box: print("猴子正在箱子上,无法行走。") return False print(f"猴子从 {self.monkey_at} 走到 {pos}") self.monkey_at = pos return True def push_box(self, to_pos): """猴子将箱子从当前位置推到新位置""" if not (self.monkey_at == self.box_at and not self.on_box): print("猴子必须和箱子在同一位置且不在箱子上才能推箱子。") return False print(f"猴子将箱子从 {self.box_at} 推到 {to_pos}") self.box_at = to_pos self.monkey_at = to_pos return True def climb_up(self): """猴子爬上箱子""" if self.monkey_at != self.box_at: print("猴子必须在箱子旁边才能爬上箱子。") return False if self.on_box: print("猴子已经在箱子上了。") return False print("猴子爬上了箱子。") self.on_box = True return True def grasp_banana(self): """猴子摘香蕉""" if self.on_box and self.box_at == self.banana_at and self.monkey_at == self.banana_at: print("猴子成功摘到了香蕉!") self.has_banana = True return True else: print("无法摘香蕉:需站在位于香蕉下方的箱子上。") return False def is_goal(self): """检查是否达到目标状态""" return self.has_banana and self.on_box and self.box_at == &#39;b&#39; and self.monkey_at == &#39;b&#39; def show_state(self): """打印当前状态""" print(f"当前位置 -> 猴子: {self.monkey_at}, 箱子: {self.box_at}, " f"香蕉: {self.banana_at}, 在箱子上: {self.on_box}, 已摘香蕉: {self.has_banana}") # 执行行动计划 if __name__ == "__main__": problem = MonkeyBananaProblem() print("初始状态:") problem.show_state() print("\n开始行动:") problem.walk(&#39;c&#39;) # 步骤1:从 a 走到 c problem.push_box(&#39;b&#39;) # 步骤2:将箱子从 c 推到 b problem.climb_up() # 步骤3:爬上箱子 problem.grasp_banana() # 步骤4:摘香蕉 print("\n最终状态:") problem.show_state() if problem.is_goal(): print("✅ 成功达成目标状态!") else: print("❌ 未达成目标状态。") ``` --- # 知识点 - **状态建模与封装**:使用类封装状态与行为,实现清晰的状态管理和方法调用,符合面向对象设计原则。 - **条件控制与动作验证**:每个动作前检查先决条件,防止非法状态转移,增强程序健壮性。 - **状态转移模拟**:通过顺序执行合法动作,模拟智能体在环境中的规划路径,体现经典AI问题求解思路。 写python代码,并且可以可视化
11-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值