在Python字典的上下文中理解真/假计算

2024-09-27 00:11:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习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是一个包含药物名称键和TrueFalse{'a':True,'b':True}的字典。我的问题是,在newResistances字典中似乎只有字典的第一个元素被计算和更改。如果这个问题太含糊/需要更多的上下文,请告诉我。你知道吗


Tags: 代码selffalsetrueif字典random课程
1条回答
网友
1楼 · 发布于 2024-09-27 00:11:42

这是因为你的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)

相关问题 更多 >

    热门问题