Python新手求助:代码出现AttributeError及多问题修复指导
问题修复与代码优化
报错分析
你遇到的核心报错是:
AttributeError: 'range' object has no attribute 'range'
这是因为mean函数里错误调用了不存在的list.range()方法,同时代码还有其他语法和逻辑问题,以下是逐一修复方案:
具体问题与修复
1. mean函数错误
- 删掉无意义的
list.range()语句:Python中没有列表/Range对象的range()方法,这行代码完全多余。 - 无需额外转换Range对象,直接迭代计算总和即可。
2. median函数索引错误
midIndex = len(list) / 2会返回浮点数,而列表索引必须是整数,改为整数除法midIndex = len(list) // 2。- 当列表长度为奇数时,直接返回
list[midIndex];偶数时取中间两个数的平均值。
3. main函数语法错误
- Python3中
print是函数,必须用括号包裹参数,原代码的写法会触发语法错误。
修复后的完整代码
def median(num_list): if len(num_list) == 0: return 0 sorted_list = sorted(num_list) # 用sorted避免修改原列表 mid_index = len(sorted_list) // 2 if len(sorted_list) % 2 == 1: return sorted_list[mid_index] else: return (sorted_list[mid_index] + sorted_list[mid_index - 1]) / 2 def mean(num_list): if len(num_list) == 0: return 0 total = 0 for number in num_list: total += number return total / len(num_list) def mode(num_list): number_dictionary = {} for digit in num_list: count = number_dictionary.get(digit, 0) number_dictionary[digit] = count + 1 max_value = max(number_dictionary.values()) mode_list = [] for key, value in number_dictionary.items(): if value == max_value: mode_list.append(key) return mode_list def main(): print("Mean of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: ", mean(range(1, 11))) print("Mode of [1, 1, 1, 1, 4, 4]:", mode([1, 1, 1, 1, 4, 4])) print("Median of [1, 2, 3, 4]:", median([1, 2, 3, 4])) main()
额外优化说明
- 避免使用
list作为变量名:list是Python内置类型,用作变量名会覆盖内置功能,改为num_list更规范。 mode函数简化:用get(digit, 0)替代判断None,代码更简洁;遍历字典时用items()同时获取键值对,逻辑更清晰。median函数用sorted()替代list.sort():sorted()返回新列表,不会修改传入的原列表,更安全。
内容的提问来源于stack exchange,提问作者Jonathan Page
相关产品推荐
相关产品推荐

