루프

2017-10-08 9 views
1

의에서 삼항 연산자를 통해 다른 변수를 증가하는 것은 내가 내 테스트에 따라 다른 변수에 추가하기 위해 노력하고있어 내 루프 :루프

for i in range(alist.__len__()): 
     if alist[i] is not blist[i]: 
      ascore +=1 if alist[i] > blist[i] else bscore+=1 
    print(ascore,bscore) 

이 코드는 작동하지 않습니다. 내가 이해할 수있는 것은 if 조건이 전체 할당에 적용되지 않는다는 것입니다. (조건에 따라 ascore가 증가합니다), 대신 내 값 1에 적용됩니다 (조건에 따라 ascore가 1 증가합니다). 첫 번째 기능과 비슷한 기능을 선호합니다. 내가 여기서 할 수있는 건 뭐니? 필자가 elsif가이 문제를 쉽게 해결할 수 있다고 생각하면 이해할 수 있습니다. 그러나 파이썬에서 삼진 연산자 (한 줄 조건부)가 작동하는 방식에 더 관심이 있습니다. 고맙습니다!

+1

할당은 Python의 표현식이 아니기 때문에 (C/C++과 달리) 여기서는 (표현식에서만 작동하는) 삼항 연산자를 사용할 수 없습니다. –

답변

2

아니요. 안타깝게도 삼항 연산자를 사용할 수 없습니다. 이름에서 알 수 있듯이 연산자이므로 왼손과 오른손 양쪽 모두 표현식이어야합니다. 그러나 많은 다른 언어와 달리 Python assignments are statements, 따라서 표현 대신 사용할 수 없습니다. 제대로 언급 한 바와 같이

이 솔루션은, 정상 조건문 사용하는 것입니다 : 당신이 두 변수를 증가해야하는 경우

for i in range(len(list)): 
     if alist[i] is not blist[i]: 
      if alist[i] > blist[i]: 
       ascore +=1 
      else: 
       bscore +=1 
    print(ascore, bscore) 
0

을 - 다음과 같은 코드로, 사전을 통해 그것을 할 수 :

scores = { 
    True: 0, # ascore 
    False: 0 # bscore 
} 

for i in range(len(alist)): 
    if alist[i] is not blist[i]: 
     scores[alist[i] > blist[i]] += 1 

print(scores) 

또는 동일하지만, 더 명확 :

scores = { 
    'ascore': 0, 
    'bscore': 0 
} 

for i in range(len(alist)): 
    if alist[i] is not blist[i]: 
     scores['ascore' if alist[i] > blist[i] else 'bscore'] += 1 

print(scores) 
0

당신은 또한 확인해야한다 ! 당신이 증강 assignmeng를 사용하여 주장하지 않으면 문이

for i in range(len(alist)): 
    if alist[i]!=blist[i]: 
     if alist[i]>blist[i]: 
      ascore+=1 
     else: 
      bscore+=1 
    print(ascore,bscore) 
+0

'is'는 두 변수가 같은 객체를 가르키면 True를, 변수가 참조하는 객체가 같으면'=='을 반환합니다. 이 연산자는 다른 목적을 가지고 있습니다. –

0

,이처럼 할 수 있다면 사용 = 정상 : ShadowRanger에

ascore, bscore = (ascore + 1, bscore) if alist[i] > blist[i] else (ascore, bscore + 1) 

감사를 내 실수를 가리키는 위해 (내가 괄호를 놓쳤다).

+0

연산자 우선 순위가 잘못되었습니다. 방금 두 개의 엘리먼트에 3 개의 '튜플'을 할당하려고했습니다. 보장 된'ValueError'. 당신은 alist [i]> blist [i] else (ascore, bscore + 1)'이라면 ascore, bscore = (ascore + 1, bscore)를 원했지만 사실상 다음과 같이 썼습니다 :'ascore, bscore = ascore + 1, (bscore alist [i]> blist [i] else ascore), bscore + 1' – ShadowRanger