0%

반복문, 조건문

조건문과 반복문

조건문과 반복문이 반복되면 가독성이 떨어지고, 실수할 상황이 발생합니다.이런 문제를 해결하기 위해 조건문과 반복문에서 할 수 있는 몇 가지 팁을 공유합니다.

조건문

함수의 설계에서 조건문은 다음과 같은 방법으로 쓸 수 있습니다.

1
def process():
2
  if state :
3
    return True
4
  else :
5
    return False

이 방식을 다르게 쓰면 다음과 같습니다.

1
def process():
2
  if state : return True
3
  return False

if 문 등을 통해서 이미 return을 했다면, elifelse 를 굳이 사용하지 않아도 됩니다.

함수를 설계하며 가장 중요한 점은 return 을 하는 순간 함수의 생명은 끝이라는 것입니다.이런 return의 특징 때문에 함수 종료를 위해 return을 사용하는 경우도 있습니다.굳이 이미 끝난 함수의 반복문이나 남은 프로세스를 break 등으로 끊지 않아도 탈출할 수 있다는 것입니다.

그 다음은 3항 연산자를 사용하는 방법이 있습니다.

1
def process():
2
  return True if state else False

조건문이 참일 때는 앞의 항을 선택하고, 거짓이면 뒤의 항을 선택합니다.같은 함수의 표현식이지만 간결한 정도가 다른 것을 알 수 있습니다.

조건문도 여러가지 트릭을 사용하면 쉽게 풀 수 있는 문제가 많습니다.다음 문제를 풀어보며 왜 clean code가 필요한지 살펴봅시다.

파이썬의 비교연산은 연속으로 할 수 있습니다.

1
print(1 < 2 and 2 <3)
2
print(1 < 2 < 3)

반복문

N by N, 즉 2중 반복문을 돌릴 때의 코드는 다음과 같습니다.

1
for i in range(N):
2
  for J in range(N):
3
    pass

코드의 indent가 적당히 존재하는 경우, 가독성이 뛰어나지만 indent가 3, 4, 5개 늘어나는 순간부터 가독성은 매우 떨어집니다.이런 경우, 시간에 엄청 큰 영향은 받지 않고 다음과 같은 과정을 거칠 수 있습니다.

1
for ij in range(N*N):
2
  i, J = ij//N, ij%N
3
  pass

i, j가 늘어나고 줄어드는 주기를 사용하면 위의 방식처럼 사용할 수 있습니다.많이 사용하는 트릭은 아니지만 알아두면 좋습니다.

또한 반복문과 조건문이 있을 때는 가독성이 떨어지기 쉽습니다.예를 들면 다음과 같은 상황이 있습니다.

1
for i in range(N):
2
  if state :
3
    process()

이렇게 반복문과 조건문이 함께가 되는 경우, indent가 계속 늘어날 수 있습니다.이런 경우에는 조금 바꿔 생각하면 다음과 같이 작성할 수 있습니다.

1
for i in range(N):
2
  if not state : continue
3
    process()

조건문이 참일 때 실행하라 가 아닌 조건문이 거짓이면 넘어가라라고 바꾼 것입니다.