[조건]
(1) 1~30 까지의 숫자 중
(2) 2,3,5로 나누어 지지 않는 숫자만 출력하려고 합니다.
(3) 중첩 for loop를 사용합니다.
== <1> 코드는 잘못된 예 / <2> 코드는 바른 예 입니다 ====
<1>
for a in range(1,30):
for i in [2,3,5]:
if a % i == 0 :
break
else:
print(a, end = ' ')
====출력값==== ( 한 번만 출력되길 원하기에 아래 출력값은 적절치 못합니다)
1 1 1 3 5 5 7 7 7 9 11 11 11 13 13 13 15 17 17 17 19 19 19 21 23 23 23 25 25 27 29 29 29
<2>
for a in range(1,30):
for i in [2,3,5]:
if a % i == 0 :
break
else:
print(a, end = ' ')
====출력값====
1 7 11 13 17 19 23 29
<2> 코드는 if 와 else의 들여쓰기가 같은 선상에 있지 않은데 오류가 나지 않고 오히려 제가 원하는 값을 출력해줍니다.
들여쓰기가 맞지 않음에도 정상적으로 작동하는 이유가 무엇인가요?
파이썬에서는 for else와 while else가 가능합니다. 그러나 다른 프로그래밍 언어에는 이러한 문법 구조가 없습니다. 보통 else는 어떤 조건들이 모두 실행되지 않을 때 사용하지만, for else와 while else는 반복문이 정상적으로 실행되었을 때 else 블록이 실행됩니다. 이는 보통의 프로그래밍 경험과는 반대되는 동작입니다. 이에 파이썬에 있는 문법 구조이지만, 파이썬에서도 안 쓰는 것을 권장하는 동작구조입니다.
문의한 코드는 우연의 일치로 동작하는 코드입니다. for else 구조를 없애고 잘 동작하는 코드를 작성해보세요.