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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:30:50