从三角形列表中筛选等腰三角形的Python代码问题求助
问题排查与代码修正
原代码存在的问题:
- 函数
isosceles_1中循环变量定义为value,但判断条件里误用了未定义的变量i,会触发NameError。 return isosceles写在循环内部,导致找到第一个符合条件的三角形后就直接返回,无法遍历完所有元素。- 列表推导式逻辑错误:调用
isosceles_1(valid)会返回整个筛选后的列表,只要列表非空就会被视为True,导致所有原列表元素都被加入isosceles_tri,完全不符合筛选逻辑。 - 函数职责混乱:这个函数应该用来判断单个三角形是否为等腰,而不是直接处理整个列表。
修正后的代码:
valid = [[10, 105, 65], [13, 100, 67], [94, 77, 9], [35, 125, 20], [22, 4, 154], [60, 27, 93], [70, 40, 70], [37, 64, 79], [99, 14, 67], [128, 26, 26]] # 定义判断单个三角形是否为等腰的函数 def is_isosceles(triangle): # 检查是否有任意两个角相等 return triangle[0] == triangle[1] or triangle[1] == triangle[2] or triangle[2] == triangle[0] # 列表推导式筛选所有等腰三角形 isosceles_tri = [tri for tri in valid if is_isosceles(tri)] # 输出结果 print("筛选出的等腰三角形:", isosceles_tri) print("数量:", len(isosceles_tri))
代码说明:
- 重命名函数为
is_isosceles,明确其职责是判断单个三角形是否符合条件。 - 函数接收单个三角形列表作为参数,直接返回布尔值表示是否为等腰三角形。
- 列表推导式遍历原列表,对每个元素调用判断函数,只保留返回
True的元素。 - 运行后会正确筛选出
[70, 40, 70]和[128, 26, 26]这两个等腰三角形,数量为2。
内容的提问来源于stack exchange,提问作者simplemind
相关产品推荐
相关产品推荐

