我正在线上完成EdEx 6.00.2x课程,并且正在努力学习我的一部分代码:
newResistances = copy.deepcopy(self.resistances)
for drugs in self.resistances:
resistancePicker = random.random()
if self.resistances[drugs] == True:
if resistancePicker < self.mutProb:
print self.mutProb
newResistances[drugs] = False
elif self.resistances[drugs] == False:
if resistancePicker < self.mutProb:
print self.mutProb
newResistances[drugs] = True
print newResistances
return ResistantVirus(self.maxBirthProb, self.clearProb, newResistances, self.mutProb)
self.resistances
是包含药品名称密钥以及True
或False
值{'a':True,'b':True}
的字典。我的问题是,只有字典的第一个元素似乎在newResistances
字典中被评估和更改。如果这个问题太模糊/需要更多背景,请告诉我。
答案 0 :(得分:2)
这是因为您的return
位置错误。如果将其移动到与for
对齐,您将看到代码遍历所有键。
我还更新了代码以删除if predicate==True
之类的构造,因为您可以改为if predicate:
。
以下是代码的外观:
for drugs in self.resistances:
resistancePicker = random.random()
if self.resistances[drugs]:
if resistancePicker < self.mutProb:
print self.mutProb
newResistances[drugs] = False
elif not self.resistances[drugs]: # or else:
if resistancePicker < self.mutProb:
print self.mutProb
newResistances[drugs] = True
print newResistances
return ResistantVirus(self.maxBirthProb, self.clearProb, newResistances, self.mutProb)