书接上回
只说了简单的说了,我通过豆包MarsCode AI的帮助,最终把题目做出来的事情,这次说说过程,和我自己的感悟。
进入刷题界面,直奔豆包MarsCode AI
下面是豆包MarsCode AI给我的代码(以下直接简称AI)
def solution(A: int) -> int:
# 初始化前两个月的兔子对数
if A == 1:
return 1
if A == 2:
return 1
# 使用列表存储每个月的兔子对数
rabbits = [0] * (A + 1)
rabbits[1] = 1
rabbits[2] = 1
# 从第3个月开始计算每个月的兔子对数
for i in range(3, A + 1):
rabbits[i] = rabbits[i - 1] + rabbits[i - 2]
# 返回第A个月的兔子对数
return rabbits[A]
if __name__ == "__main__":
# 测试用例
print(solution(1) == 1)
print(solution(5) == 8)
print(solution(15) == 987)
这里给的是思路
关键步骤解释
-
初始化前两个月的兔子对数:
- 如果
A是1或2,直接返回1。
- 如果
-
使用列表存储每个月的兔子对数:
- 创建一个长度为
A + 1的列表rabbits,并初始化前两个月的值为1。
- 创建一个长度为
-
从第3个月开始计算每个月的兔子对数:
- 使用循环从第3个月开始,每个月的兔子对数等于前两个月的兔子对数之和。
-
返回第A个月的兔子对数:
- 返回列表中第A个月的值。
你可以根据这个框架继续完善代码,或者根据需要进行调整。
运行之后返回
可以看到第一个测试正确,前两个错误,一定是函数执行逻辑出了问题
现在我们直接把报错返给AI,看看他会做出怎样的改变
从命令行输出可以看出,测试用例的结果是
True, False, False,这意味着代码在某些情况下没有返回正确的结果。我们需要检查代码的逻辑并进行修正。
问题分析
-
初始化前两个月的兔子对数:
- 代码中已经正确初始化了前两个月的兔子对数。
-
使用列表存储每个月的兔子对数:
- 代码中使用了列表
rabbits来存储每个月的兔子对数。
- 代码中使用了列表
-
从第3个月开始计算每个月的兔子对数:
- 代码中使用了循环从第3个月开始计算每个月的兔子对数。
-
返回第A个月的兔子对数:
- 代码中返回了列表中第A个月的值。
问题排查
-
测试用例结果:
solution(1) == 1返回True,说明第一个测试用例是正确的。solution(5) == 8返回False,说明第二个测试用例是错误的。solution(15) == 987返回False,说明第三个测试用例是错误的。
修正代码
我们需要检查代码的逻辑,确保每个月的兔子对数计算正确。
修正后的代码
以下是修正后的代码
def solution(A: int) -> int:
# 初始化前两个月的兔子对数
if A == 1:
return 1
if A == 2:
return 1
# 使用列表存储每个月的兔子对数
rabbits = [0] * (A + 1)
rabbits[1] = 1
rabbits[2] = 1
# 从第3个月开始计算每个月的兔子对数
for i in range(3, A + 1):
rabbits[i] = rabbits[i - 1] + rabbits[i - 2]
# 返回第A个月的兔子对数
return rabbits[A]
if __name__ == "__main__":
# 测试用例
print(solution(1) == 1)
print(solution(5) == 8)
print(solution(15) == 987)
进去编辑还是
可以看到,还是不行滴,和之前的结果没变
那我们换种思路,看看ta给的提示写出来之前那篇代码。