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
相关产品推荐
相关产品推荐

