【python报错】:NameError: name ‘append‘ is not defined

在运行代码的时候程序报错:
NameError: name ‘append’ is not defined
我发现是因为在打代码的过程中,把

 caches.append(cache)

打成了:

caches = append(cache)

这里用的时 = 而不是 . 调用函数,修改后这个问题解决了

抱歉,这是因为在计算数据包等待时延时,变量`n1、n2、n3、n4`没有定义。为了解决这个问题,我们需要将节点对象存储在一个列表中,并在计算数据包等待时延时遍历该列表。以下是修改后的代码,你可以参考一下: ```python import simpy import random # 定义仿真参数 SIM_TIME = 100 # 仿真时间 LAMBDA = 1/1000 # 平均每毫秒生成一个包 PKT_SIZE_MIN = 1024 # 包的最小大小 PKT_SIZE_MAX = 10 * 1024 # 包的最大大小 BW = 10 * 1024 * 1024 # 带宽,单位bps # 定义节点类 class Node: def __init__(self, env, name, out_links): self.env = env self.name = name self.out_links = out_links self.queue = [] # 队列 self.busy = False # 是否忙碌 # 发送数据包 def send_pkt(self, pkt): # 随机选择一个输出链接 link = random.choice(self.out_links) # 传输时间 t_transmit = pkt.size * 8 / BW # 等待传输完成 yield self.env.timeout(t_transmit) # 发送数据包到对应的节点 link.recv_pkt(pkt) # 接收数据包 def recv_pkt(self, pkt): # 将数据包加入队列 self.queue.append(pkt) # 如果节点当前空闲,开始处理数据包 if not self.busy: self.busy = True self.env.process(self.process_pkt()) # 处理数据包 def process_pkt(self): while len(self.queue) > 0: # 从队列中取出一个数据包 pkt = self.queue.pop(0) # 等待处理完成 yield self.env.timeout(pkt.size * 8 / BW) # 处理完成后,节点变为空闲状态 self.busy = False # 定义数据包类 class Packet: def __init__(self, env, size): self.env = env self.size = size self.timestamp = env.now # 定义网络拓扑结构 def create_topology(env): # 创建节点 n1 = Node(env, 'N1', []) n2 = Node(env, 'N2', []) n3 = Node(env, 'N3', []) n4 = Node(env, 'N4', []) # 设置节点之间的链接关系 n1.out_links = [n2] n2.out_links = [n3, n4] # 开始生成数据包 while True: # 生成一个数据包 pkt_size = random.randint(PKT_SIZE_MIN, PKT_SIZE_MAX) pkt = Packet(env, pkt_size) # 将数据包发送到N2节点 n2.queue.append(pkt) # 根据70%的概率将数据包发送到N3节点,30%的概率将数据包发送到N4节点 if random.random() < 0.7: n3.recv_pkt(pkt) else: n4.recv_pkt(pkt) # 计算下一个数据包的生成时间 t = random.expovariate(LAMBDA) yield env.timeout(t) # 存储节点对象 nodes = [n1, n2, n3, n4] # 运行仿真程序 env = simpy.Environment() env.process(create_topology(env)) env.run(until=SIM_TIME) # 统计数据包的等待时延 pkt_delays = [] for node in nodes: for pkt in node.queue: pkt_delays.append(env.now - pkt.timestamp) if len(pkt_delays) > 0: print('最大等待时延:{}ms'.format(max(pkt_delays))) print('最小等待时延:{}ms'.format(min(pkt_delays))) print('平均等待时延:{}ms'.format(sum(pkt_delays) / len(pkt_delays))) else: print('没有数据包等待') ``` 希望这次能够顺利运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值