2014-11-18 1 views
-2
내가 온라인 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 사전에서 변경된 것으로 보입니다. 이 질문이 너무 모호하거나 더 많은 상황이 필요한 경우 알려 주시기 바랍니다.

+2

, 당신은 거의'사용하지 == TRUE '또는'== FALSE'안됩니다. '자기 저항력 '이라면'자기 저항력'이라면'자기 저항력'은'자기 저항력' (그러나이 경우에도 후자는 불필요하며'else :'를 사용하십시오. 테스트에 이르면'self.resistances [drugs]'가 사실이 아니라는 것을 이미 알고 있으므로 왜 그렇지 않은지 확인하십시오 ?) – abarnert

+0

다음 번에 코드를 디버깅해야합니다. –

+0

'if'와'else'의 전체 외부는 건너 뛸 수 있고,'not' 키워드로 불리언 값을 무시하기 쉽기 때문에, 몸체 사이의 중복 된 코드가 결합 될 수 있습니다 :'if resistancePicker Blckknght

답변

2

return의 위치가 잘못 되었기 때문입니다. for으로 정렬하여 이동하면 모든 키를 반복하는 코드가 표시됩니다.

if predicate: 대신에 if predicate==True과 같은 구문을 제거하도록 코드를 업데이트했습니다.

여기에 코드가 보일 것입니다 방법은 다음과 같습니다 보조 노트로

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)