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

使用列表推导生成随机列表后出现除零错误的技术问询

问题分析与解决方案

你遇到的“除以零”错误,核心原因是变量作用域混淆导致的。让我拆解一下问题:

  • 你在全局作用域定义了一个空列表v = [];
  • 但generate_v()函数里的v是局部变量——它和全局的v是完全独立的两个变量,函数内部的赋值不会改变全局的空列表;
  • 当你调用avg_v()时,它访问的是全局的那个空列表,len(v)为0,自然触发了除以零的错误。

另外提一句:你代码里的random.randint(0,100)和你需求的“1到20之间的随机数”不符,下面的修正代码会顺便调整这个点,如果是笔误可以按需修改。

方案一:利用函数返回值(推荐,更符合编程规范)

这种方式避免全局变量的耦合,让函数职责更清晰:

import random

def generate_v():
    # 直接返回1-20之间的100个随机数列表
    return [random.randint(1, 20) for _ in range(100)]

def avg_v(num_list):
    # 接收列表作为参数,计算平均值
    return sum(num_list) / len(num_list)

# 生成列表并赋值给变量
v = generate_v()
print("生成的随机数列表:", v)
print("列表平均值:", avg_v(v))

方案二:使用全局变量(不推荐,耦合性高)

如果你坚持要使用全局变量,需要在函数内部用global关键字声明要使用全局的v:

import random

v = []
def generate_v():
    global v  # 声明该函数使用全局作用域的v变量
    v = [random.randint(1, 20) for _ in range(100)]
    return v

def avg_v():
    return sum(v) / len(v)

# 先调用generate_v修改全局v,再计算平均值
generate_v()
print("生成的随机数列表:", v)
print("列表平均值:", avg_v())

这样修改后,程序就能正确获取生成列表的长度并计算平均值了。

内容的提问来源于stack exchange,提问作者Luís Lopes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:09:11