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

Codewars题目《Are they the same?》Python代码报错求助

问题分析与代码修正

你的代码存在几个关键问题,导致大部分测试用例失败:

  • 类型不匹配:用空字符串string存储平方根结果,最后和数组array1比较,类型完全不同,必然出错
  • 语法错误:string =+ sqrt_i是错误写法,正确的累加运算符是+=,但就算修正,字符串也无法直接拼接浮点数
  • 逻辑错误:未考虑数组元素的顺序问题,题目允许array2是array1元素平方的任意排列,原代码的逻辑完全没覆盖这种情况
  • 边界情况未处理:没有判断array1或array2为None、长度不一致的情况

修正后的代码

def comp(array1, array2):
    # 处理边界情况:任一数组为None或长度不同直接返回False
    if array1 is None or array2 is None or len(array1) != len(array2):
        return False
    # 将array1每个元素平方后排序,和排序后的array2比较
    return sorted(x*x for x in array1) == sorted(array2)

补充说明

  • 先检查边界条件可以快速过滤无效输入,避免后续计算出错
  • 通过排序后比较,不管两个数组的元素顺序如何,只要array2是array1元素的平方集合,就能返回正确结果
  • 不需要用math.sqrt,直接对array1元素平方后和array2比对,比开平方更高效,还能避免浮点数精度问题(比如大整数开平方可能出现精度丢失)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:28:11