You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodingBat课堂作业:Python same_first_last函数报错调试求助

解决你的CodingBat数组问题:索引越界与语法错误

让我们一步步拆解你遇到的问题,帮你搞定这个作业:

先看你代码里的核心问题

第一个版本的问题

你的初始代码:

def same_first_last(nums):
    if (nums[0] == nums[(len(nums))-1]==6):
        return True
    else:
        return False

这里有两个关键问题:

  • 错误的条件逻辑:nums[0] == nums[(len(nums))-1]==6 是把三个判断连在一起,相当于要求第一个元素等于最后一个,且最后一个元素等于6——这完全偏离了题目“首尾元素相等即可”的要求。
  • 缺少数组长度校验:如果传入空数组[],访问nums[0]会直接触发list index out of range错误,因为空数组没有可索引的元素。

第二个版本的问题

第二个版本的代码:

def same_first_last(nums):
    if (nums[0] == (nums[nums.length]) - 1):
        return True
    else:
        return False

这里的问题更偏向Python语法误解:

  • 混淆了Python与其他语言的长度获取方式:Python列表没有.length属性(这是Java/JavaScript的写法),正确获取长度的方式是len(nums),所以nums.length会直接抛出'list' object has no attribute 'length'错误。
  • 索引计算完全错误:就算改成len(nums),nums[len(nums)]本身就是越界的(列表索引从0开始,最后一个元素的索引是len(nums)-1),你还额外加了-1,完全偏离了“比较首尾元素”的目标。

正确的解决方案

按照题目要求,我们需要同时满足两个条件:

  1. 数组长度大于等于1(避免空数组索引越界)
  2. 第一个元素和最后一个元素相等

这里提供两种写法,功能完全一致:

简洁版(推荐)

def same_first_last(nums):
    return len(nums) >= 1 and nums[0] == nums[-1]

清晰的if-else版

def same_first_last(nums):
    if len(nums) >= 1 and nums[0] == nums[-1]:
        return True
    else:
        return False

代码细节解释

  • len(nums) >= 1:这一步必须放在前面,先确保数组非空,后续访问索引才不会报错。
  • nums[-1]:Python支持负索引,-1直接指代列表的最后一个元素,比nums[len(nums)-1]更简洁,效果完全相同。
  • and逻辑运算符:只有当两个条件都满足时,才会返回True,否则返回False,完美匹配题目要求。

测试示例验证

代入题目给出的示例,结果完全符合预期:

  • same_first_last([1, 2, 3]) → 长度≥1,但1≠3 → 返回False ✔️
  • same_first_last([1, 2, 3, 1]) → 长度≥1,且1=1 → 返回True ✔️
  • same_first_last([1, 2, 1]) → 长度≥1,且1=1 → 返回True ✔️
  • 空数组same_first_last([]) → 长度<1 → 返回False(不会触发索引错误)

内容的提问来源于stack exchange,提问作者Nerdy General

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:17:38