티스토리 뷰

반응형

6강 요약

6강에서는 2가지의 반복문(for문, while문)을 각각 비교 및 총 정리하는 시간을 가졌고, 반복문을 사용할때 들여쓰기(indentation)를 하는 것이 왜 중요한지 배웠다. 들여쓰기는 일반적인 글쓰기에서도 중요한 형식임을 생각하면 이해하기 쉬운데, 들여쓰기를 통해 각각의 구문이 독립적으로 따로 노는 것이 아니라 서로 종속되어 있는 관계임을 드러낼 수 있다. 

  • depth 1
    • depth 2
      • depth 3
    • depth 2
  • depth 1 

depth 1, 2, 3을 하나씩 놓고보면 개별적인 구문이지만, 들여쓰기를 함으로써 depth 1 -> depth 2 -> depth 3의 방향으로 서로 관련되어 있음을 알 수 있다. 들여쓰기를 tab키로 하느냐, space 바로 하느냐에 대해서는 나름 논란이 있다던데, 파이썬 들여쓰기 스타일 가이드 를 참고하면 대략 답이 나온다. 판단은 각자의 몫으로 ㅎㅎㅎ (파이썬 형식 가이드 바로가기)

 

이번 강의에서는 Reeborg's World라는 게임툴을 활용하여 특정한 퀘스트를 수행하며 for문과 while문에 대해 익혔다. 

ㄴ Reeborg's World: 링크 바로가기

로봇이 내가 완성한 코드에 맞춰 목적지에 도달한다. 은근히 재밌었다.

 

for문 vs. while문

둘다 반복문에 사용되는 문법이라면, 도대체 어떤 차이가 있는 것일까? 

for문은 특정한 리스트안의 각각의 아이템들을 단순히 반복하거나 특정한 작업을 수행할때 적합하다. 

예를 들면 fruits라는 리스트가 있고, 이 리스트 안에 들어있는 요소들을 반복하는 작업을 수행할때는 for문이 적절하다. 

fruits = ["Apple", "Pear", "Orange"]

for fruit in fruits:
	print(fruit) 
    

for n in range(6):
	print(n)

마찬가지로 특정한 범위내의 숫자(1~6)를 출력하는 작업에 대해 반복 수행해야 할때도 for 문이 적절하다. 

 

반면 while문은 단순히 어떤 아이템을 반복할지 보단, "특정한 조건에 도달할 때까지" 수없이 반복 수행하고자 할때 사용된다. 

따라서 특정한 조건에 도달하지 못한다면 동일한 구문을 무한정으로 수행하게 된다는 side effect가 발생할 수 있다 ('Infinite Loop')

#while 문의 예시 

while something_is_true:
 Do_something_repeatedly_until_it_is_not_true()

 

프로젝트: 미로에서 로봇 구출하기

이번 프로젝트는 조금 많이 어려웠다ㅎㅎㅎ 여태는 안젤라 선생님 가이드대로 영상을 멈추고, 원하는 결과물을 출력한 후 정답 해설을 보는 식이었는데 이번에는 살짝 컨닝 후 작업하였다. 어려울 수록 돌아가란 말이 있듯이, 잘 안풀릴 때는 손으로 케이스별로 방향을 작성해본 후 하는 것도 좋은 것 같다. 

 

내가 작성한 우측 코드를 이용해 로봇이 따라 움직이며 결국 탈출하였다! 

로봇은 무작위 지점에서 출발하므로 어떤 위치에서 출발하든 동일하게 적용할 수 있는 규칙으로 움직일 수 밖에 없다. 

 

탈출 Tip:
인간의 시선으로 가장 짧은 경로를 고민하지 않고
눈이 보이지 않는 로봇이 벽을 더듬으며 탈출한다고 가정하자. 

 

1) 오른쪽 벽을 따라 움직인다. 

2) 가다가 앞에 벽을 만나면 방향을 튼다.

3) 1)도 2)도 아니면 그냥 앞으로 이동한다. 

 

일단 내가 작성한 코드로 대부분(거의 모든)의 출발지에서 로봇이 탈출할 수 있었으나, 

강의 마지막에 안젤라 선생님이 보여주신 케이스에 따르면 위 코드는 로봇이 무한 루프에 빠질 위험이 있었다. 

 

이 무한 루프를 해결하는 부분은 중급 레벨의 디버깅 실력이 필요하므로 초보 수강생들은 15일차 강의를 들은 후에 다시 돌아오라고 하셨다. (15일차부터 벌써 중급자라니...+_+ 설레는군)

 

느낀점

  • for문과 while문의 사용 목적이 어떻게 다른지 이해할 수 있었고, 초급 수준의 코드는 작성할 수 있게 되었다. 하지만 다양한 케이스를 고려해야하는 코드는 아직 어렵고 이럴땐 손으로 케이스를 정리해가며 하나씩 실행해보는 방법이 굉장한 도움이 되었다. 
  • 반복문의 복잡도가 높아질수록 indentation error를 범할 가능성이 크다. 들여쓰기를 정확하게 하는 것은 특정 기능이 확실하고 명확하게 수행되는 부분 뿐만 아니라, 제 3자가 자신의 코드를 보았을때 이해하기 쉽도록 도와주는 간편한 도구임을 잊지 말자!