python报错对象没有属性_Python错误:AttributeError:'int'对象没有属性'append'

博主正在编写一个简化版的Clite词典词法分析器,从输入文件中提取词汇并创建符号表。遇到的问题是在符号表中更新相同标识符的行号时,无法正确追加新行号。代码尝试在遇到重复标识符时将其行号添加到字典条目,但遇到了错误。目前的代码可以识别关键字、标识符、整数和浮点数,并将相关信息打印出来。
摘要由CSDN通过智能技术生成

所以我看过类似的问题,我仍然遇到同样的问题,无法弄清楚。对于此编程任务,我正在为Clite词典的一小部分创建词法分析的简化版本。我从输入文件中提取令牌,输出我的分析结果。我正在为使用字典创建的标识符创建一个符号表。当我在不同的行上找到相同的标识符时,我需要在符号表中追加找到的行。例如,我在第2行找到标识符“number18”,并再次在第7行。所以符号表需要从{number18:2}到{number18:2,7}

当我尝试将新行号附加到当前字典条目时,问题就出现了。我在问题标题中发布错误。这是我的代码到目前为止

y = 0

s2 = ()

stable = dict()

for line in open("Sample.txt","r"):

x1 = ''

for char in line:

if char.isalpha():

x1 = x1 + char

elif char.isdigit():

x1 = x1 + char

elif char == '.':

x1 = x1 + char

elif x1 != '':

break

#print (x1)

if (x1 == "for" or x1 == "bool" or x1 == "char" or x1 == "else" or x1 == "false" or x1 == "float" or x1 == "if" or x1 == "int" or x1 == "main" or x1 == "true" or x1 == "while"):

s2=(y,"Keyword",x1)

elif x1.isidentifier():

s2=(y,"Identifier",x1)

if x1 in stable.keys():

stable[x1].append(y)

else:

stable[x1]=y

elif x1.isdigit():

s2=(y,"Int",x1)

else:

s2=(y,"Float",x1)

print (s2)

y=y+1

print (stable)

非常抱歉,这个错误是因为在LIFNeuron类中缺少了一个用于存储膜电位的属性v。我会修正代码并重新展示给你。 ```python import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.datasets import mnist # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 对数据进行归一化 x_train = x_train / 255.0 x_test = x_test 255.0 #建LIF神经元模型 class LIFNeuron: def __init__(self, tau_m, tau_ref, tau_syn): self.tau_m = tau_m # 膜电位时间常数 self.tau_ref = tau_ref # 绝对不应期时间常数 self.tau_syn = tau_syn # 突触后电流时间常数 self.v_threshold = 1.0 # 阈值电压 self.v_reset = 0.0 # 复位电压 self.ref_counter = 0 # 不应期计数器 self.v = self.v_reset # 膜电位 def update(self, i_inj, dt): if self.ref_counter > 0: # 如果在不应期内 self.ref_counter -= 1 # 减少不应期计数器 self.v = self.v_reset # 维持复位电压 else: dv_dt = (-(self.v - self.v_reset) + i_inj) / self.tau_m self.v += dv_dt * dt if self.v >= self.v_threshold: # 达到阈值电压 self.v = self.v_reset # 复位电压 self.ref_counter = int(self.tau_ref / dt) # 进入不应期 # 构建脉冲神经网络模型 class SpikingNeuralNetwork: def __init__(self, num_inputs, num_outputs, tau_m, tau_ref, tau_syn, w_max, w_min, learning_rate): self.num_inputs = num_inputs self.num_outputs = num_outputs self.tau_m = tau_m self.tau_ref = tau_ref self.tau_syn = tau_syn self.w_max = w_max self.w_min = w_min self.learning_rate = learning_rate self.neurons = [LIFNeuron(tau_m, tau_ref, tau_syn) for _ in range(num_outputs)] self.weights = np.random.uniform(w_min, w_max, size=(num_inputs, num_outputs)) def update_neurons(self, x, dt): for neuron in self.neurons: i_inj = np.dot(x, self.weights) # 计算输入电流 neuron.update(i_inj, dt) def update_weights(self, x_pre, x_post, dt): dw_dt = np.outer(x_pre, x_post) * dt # 计算权重变化率 self.weights += self.learning_rate * dw_dt # 更新权重 self.weights = np.clip(self.weights, self.w_min, self.w_max) # 限制权重范围 def train(self, x_train, y_train, num_epochs, dt): for epoch in range(num_epochs): for x, y in zip(x_train, y_train): self.update_neurons(x, dt) x_post = np.zeros(self.num_outputs) x_post[y] = 1.0 self.update_weights(x, x_post, dt) def predict(self, x_test): predictions = [] for x in x_test: self.update_neurons(x, dt) pred = np.argmax([neuron.v for neuron in self.neurons]) predictions.append(pred) return predictions # 定义训练参数 num_inputs = 784 # 输入神经元数量(MNIST图像大小为28x28) num_outputs = 10 # 输出神经元数量(0-9的数字类别) tau_m = 20.0 # 膜电位时间常数 tau_ref = 2.0 # 绝对不应期时间常数 tau_syn = 5.0 # 突触后电流时间常数 w_max = 1.0 # 权重上界 w_min = 0.0 # 权重下界 learning_rate = 0.01 # 学习率 num_epochs = 5 # 训练迭代次数 dt = 0.1 # 时间步长 # 创建脉冲神经网络模型实例 snn = SpikingNeuralNetwork(num_inputs, num_outputs, tau_m, tau_ref, tau_syn, w_max, w_min, learning_rate) # 训练脉冲神经网络 snn.train(x_train, y_train, num_epochs, dt) # 在测试集上进行预测 predictions = snn.predict(x_test) # 计算准确率 accuracy = np.mean(predictions == y_test) * 100 print("准确率:", accuracy, "%") ``` 修正后的代码中,我添加了一个属性v来存储膜电位,并在`LIFNeuron`类的构造函数中进行初始化。这样,在神经元更新时,可以通过`neuron.v`来访问膜电位值。 希望这次修改后的代码能够正常运行。如果你还有其他问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值