- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
이제 본격적으로 반복문을 코딩해보는 작업을 할 것입니다. 반복문은 조건문과는 달리 조금의 코드만으로도 작업량이 굉장히 많아질 수 있습니다. 반복문에서는 한두 줄이라도 반복을 수천번 수백번 할 수 있기 때문에 다소 조심히 다루어야 합니다.
우선 이러한 반복을 유심히 살펴보게 해주는 도구를 먼저 알아볼 텐데요, 바로 우리가 지금까지 많이 써왔던 print
함수에 대한 중요성을 먼저 강조한 후 넘어가보겠습니다.
print
활용하기
다음은 앞선 시간의 break
에 관한 예제에서 print
에 좀 더 신경쓴 모습입니다. 실제 동작은 똑같습니다. 앞으로 print
를 더 잘 쓰는 방법에 대해서 배우게 될 테지만 간략한 방법 하나를 바로 소개해드리겠습니다. print
함수를 쓸 때, 내부에 쉼표로 항목들을 구분지을 수가 있는데, 저렇게 하면 형을 str
로 고치지 않고도 int
와 같은 숫자형을 바로 볼 수 있다는 게 장점입니다. 항목간 구분은 공백 한 칸으로 대체됩니다.
durability = int(input("샌드백의 내구도를 입력하세요 >> "))
attack = 1
loop_number = 1 # 루프가 몇 번째 돌았는지 알게 해주는 변수
while True:
before_attack = attack # 해당 루프에서 attack 값이 바뀌기 전에 저장
before_durability = durability # 해당 루프에서 durability 값이 바뀌기 전에 저장
# 실제 동작
durability -= attack
attack += 1
# 출력. 실제 동작 전과 동작 후를 비교할 수 있음.
print("------------" , loop_number , "번째 루프 ------------")
print("이전 | attack:", before_attack, ", durability:", before_durability)
print("이후 | attack:", attack, ", durability:", durability)
if durability <= 0:
break
loop_number += 1 # 증감하기
print("샌드백이 부서졌습니다! 최종 공격력은 " + str(attack) + "입니다.")
샌드백의 내구도를 입력하세요 >> 21
------------ 1 번째 루프 ------------
이전 | attack: 1 , durability: 21
이후 | attack: 2 , durability: 20
------------ 2 번째 루프 ------------
이전 | attack: 2 , durability: 20
이후 | attack: 3 , durability: 18
------------ 3 번째 루프 ------------
이전 | attack: 3 , durability: 18
이후 | attack: 4 , durability: 15
------------ 4 번째 루프 ------------
이전 | attack: 4 , durability: 15
이후 | attack: 5 , durability: 11
------------ 5 번째 루프 ------------
이전 | attack: 5 , durability: 11
이후 | attack: 6 , durability: 6
------------ 6 번째 루프 ------------
이전 | attack: 6 , durability: 6
이후 | attack: 7 , durability: 0
샌드백이 부서졌습니다! 최종 공격력은 7입니다.
어때요, 보기가 좀 더 편해지지 않았나요? before_attack
, before_durability
, loop_number
은 오로지 print
를 보조하기 위한 변수라 낭비라고 생각하실 수도 있는데, 변수 몇 개 더 쓰는거는 프로그램에겐 아무런 일도 아니므로 쓰고 싶은 만큼 왕창왕창 쓰도록 합시다! 뭐가 어떻게 돌아가는지, 왜 의도한 대로 작동하지 않는지 궁금하다면 머리를 싸매고 고민하는 것보다 print
를 많이 써서 어떻게 돌아가는지 직접 눈으로 보는 게 훨씬 현명한 판단입니다!
반복문의 설계
반복문은 아주 강력한 도구입니다. 한두 줄의 코드를 써도 그것이 몇 백번, 몇 천번 반복하게 만들 수 있으니까요. 같은 코드를 몇 천줄 쓴다고 상상해보세요. 복사 붙여넣기 하는데만 한 세월일 것입니다.
하지만 반복문을 처음 맞닥뜨렸을 때 반복문을 어떻게 활용해야 할지 막막합니다. 언제 어떻게 써야 할지 감이 잘 오지가 않죠. 왜냐하면 반복문은 실제로 코드가 어떻게 실행되는지 상상하기가 어렵기 때문입니다. if
문 같은 경우에는 코드가 실행되거나, 실행되지 않거나 입니다. 눈으로 따라가며 코드의 흐름을 어느정도 파악할 수 있습니다. 반복문은 한 번 반복할지, 세 번 반복할지, 혹은 100번 반복할지 모르는 법입니다.
반복문을 설계할 때 고려할 세 가지 핵심 생각은 다음과 같습니다.
- 초기화 : 반복문에 들어가기 전에, 준비 작업은 어떻게 할까?
- 조건 : 조건을 어떻게 작성할까?
- 증감 : 반복문 내부에서 조건 변수를 어떻게 조정할까?
반복문에 들어가기 전에 준비 작업은 어떻게 할까?
다음 코드는 위 예제에서 attack = 1
을 while
블록 내부로 옮긴 코드입니다. 실행해볼까요? 아마도 우리의 의도대로 움직이지 않을겁니다.
durability = int(input("샌드백의 내구도를 입력하세요 >> "))
loop_number = 1 # 루프가 몇 번째 돌았는지 알게 해주는 변수
while True:
attack = 1
before_attack = attack # 해당 루프에서 attack 값이 바뀌기 전에 저장
before_durability = durability # 해당 루프에서 durability 값이 바뀌기 전에 저장
# 실제 동작
durability -= attack
attack += 1
# 출력. 실제 동작 전과 동작 후를 비교할 수 있음.
print("------------" , loop_number , "번째 루프 ------------")
print("이전 | attack:", before_attack, ", durability:", before_durability)
print("이후 | attack:", attack, ", durability:", durability)
if durability <= 0:
break
loop_number += 1 # 증감하기
print("샌드백이 부서졌습니다! 최종 공격력은 " + str(attack) + "입니다.")
샌드백의 내구도를 입력하세요 >> 6
------------ 1 번째 루프 ------------
이전 | attack: 1 , durability: 6
이후 | attack: 2 , durability: 5
------------ 2 번째 루프 ------------
이전 | attack: 1 , durability: 5
이후 | attack: 2 , durability: 4
------------ 3 번째 루프 ------------
이전 | attack: 1 , durability: 4
이후 | attack: 2 , durability: 3
------------ 4 번째 루프 ------------
이전 | attack: 1 , durability: 3
이후 | attack: 2 , durability: 2
------------ 5 번째 루프 ------------
이전 | attack: 1 , durability: 2
이후 | attack: 2 , durability: 1
------------ 6 번째 루프 ------------
이전 | attack: 1 , durability: 1
이후 | attack: 2 , durability: 0
샌드백이 부서졌습니다! 최종 공격력은 2입니다.
매 루프마다 attack += 1
을 해주었음에도 불구하고 계속 현재 공격력이 1
이라 출력하고 있습니다. 원인은 매 루프마다 실행되는 attack = 1
대입문입니다. 이전 루프에서 attack += 1
이 실행되어 attack
이 2
가 되었음에도 불구하고 다시 attack = 1
로 대입해주고 있습니다. 결국 매 루프마다 공격력은 변하지 않은 채 내구도는 1씩 닳게 되겠죠.
attack
에 대한 초기화는 while
내부에 존재하면 안 됩니다. 반복문 이전에 설정해야 할 초깃값이 되어야 논리가 맞아 떨어집니다.
조건을 어떻게 작성할까?
while
에서 조건은 True
일 경우에만 계속해서 동작합니다. 한 번이라도 False
가 되면 while
문을 빠져나오게 되며, 다시는 돌아갈 수 없게 됩니다. 가장 처음으로 while
에 맞닥뜨렸을 때 False
라면, 한 번도 실행되지 않은 채 다음으로 넘어갑니다. 즉, 반복문이 반복될 동안은 조건이 True
로 유지되었다가, 종료하고 싶을 때 조건이 False
로 바뀌기만 하면 된다는 것입니다.
반면 break
는 어느 정도 반대의 논리를 따릅니다. break
는 대개 if
문 내부에 쓰이는 식으로 함께 쓰이는데, 이 때 if
조건은 False
여야 내부의 break
를 건들지 않아 종료되지 않고 계속해서 실행될 수 있으며, 한 번이라도 True
가 된다면 break
가 실행되는 결과를 낳아서 반복문이 종료됩니다.
while
에서의 조건이나, if
와 break
에서의 조건이나 마찬가지로, 대개 조건에서는 변수를 활용해야 합니다. 왜냐하면 바뀌지 않는 조건은 결과 또한 True
또는 False
로 고정되기 때문에, 노트북의 배터리가 방전될 때까지 무한히 반복하는 프로그램이 되거나 단 한번도 실행될 수 없는 무용지물이 되겠지요. 예를 들어, 다음 while
은 쓸모가 없습니다.
# 무한히 반복합니다.
while 3 < 8:
코드
# 절대 실행될 수 없습니다.
while 3 > 8:
코드
# 영원히 종료되지 않습니다.
while True:
코드
if 3 > 8:
break
# 마찬가지로 단 한번만 실행됩니다.
while True:
코드
if 3 < 8:
break
# a < b 조건이 충족한다 하더라도 단 한번만 실행됩니다.
while a < b:
코드
break
조건에 어떤 변수를 넣느냐가 관건입니다.
반복문 내부에서 조건 변수를 어떻게 조정할까?
조건 변수를 조정한다는 게 어떤 의미일까요? 우리가 만든 while
문에서 조건은 durability > 0
입니다. 우리는 값을 직접 입력하여 durability
의 초기값을 설정했습니다. 우리가 위에서 8000
, 300
이라고 입력한 것처럼요. 하지만 만약에 이 durability
가 영원히 변하지 않는다면 어떻게 될까요? 지금은 while
문 내부에서 durability -= attack
으로 지속적인 변화를 주고 있습니다만, 이 명령이 없다면 어떻게 될까요? 계속해서 while
문의 조건은 8000 > 0
으로 고정되어 버릴테고, 우리의 루프는 영영 끝나지 않게 되어 버릴 겁니다.
조건을 아무리 잘 설정했다 하더라도, 실제 조건에 관여하는 변수들을 지속적으로 관리하고 조정해나가지 않는다면 조건은 무용지물입니다. 그러므로 변수들을 어떻게 변화시켜나갈 것인가 또한 중요한 화두입니다.
훌륭한 방법이 있습니다. 앞서 print("공격력: " + str(attack) + ", 내구도: " + str(durability))
이 줄을 추가한 것처럼 변화하는 변수를 실시간으로 확인할 수 있도록 변수의 내용을 매 루프마다 출력시키는 것입니다. print
함수는 아무리 많이 써도 닳지 않습니다. 어떤 식으로 변수가 변화하는지 파악하기에 가장 좋은 방법입니다.
실전 예제
처음에는 감이 오지 않습니다. 다음 문제를 풀어보도록 합시다.
수를 입력받고 이 수의 모든 약수를 출력하는 프로그램을 작성하여라.
처음에는 이것을 반복문을 써야 하는지 아닌지도 감이 오시지 않을 겁니다.
컴퓨터가 이해할 수 있는 식을 생각하기
우리는 약수가 무엇인지는 대충 압니다. a
를 b
로 나눴을 때 딱 나누어 떨어진다면 b
는 a
의 약수입니다. 하지만 나누어 떨어진다는 것은 무엇일까요? 우리는 저 문장으로도 뜻이 바로 통해버리기에 쉽게 생각하지만 컴퓨터는 딱 나누어 떨어진다
라는 말을 이해할 수 없습니다. 컴퓨터는 0
과 1
, 아니 조금 더 확장시켜서 우리가 작성한 코드로만 이해할 수 있기 때문에 컴퓨터가 이해할 수 있도록 컴퓨터의 언어로 번역해줘야 합니다.
우리는 처음에 입력을 받는다고 했습니다. 그러므로 a
는 이미 정해진 상황입니다. b
는 임의로 우리가 4
라고 정해봅시다. 그렇다면 딱 나누어 떨어진다
라는 것을 어떻게 코드로 적어줄 수 있을까요? 다음과 같이 하면 될 것 같습니다.
a = int(input())
b = 4 # 임시로 적었습니다.
if a % b == 0:
print(str(b) + '는 ' + str(a) + '의 약수입니다!')
else:
print(str(b) + '는 ' + str(a) + '의 약수가 아닙니다!')
12
4는 12의 약수입니다!
이 단계에서의 핵심은 a % b == 0
이라고 적은 것입니다.
후보군을 파악하기
계속해서 상상력을 발휘해봅시다.
a
는 입력으로 들어옵니다. (앞서 수를 하나 입력받는다고 했습니다.)- 컴퓨터는 어떤 숫자가 약수일지 미리 판단할 수 없습니다. 컴퓨터는
a % b == 0
라는 식을 돌려야 비로소b
가a
의 약수임을 확인할 수 있습니다.
실제로 컴퓨터가 어떻게 돌아가는지 상상하기 위해 a
가 12
라고 가정해보겠습니다.
- … 음수의 모든 결과는
False
12 % -1 == 0
의 결과는False
12 % 0 == 0
의 결과는False
12 % 1 == 0
의 결과는True
12 % 2 == 0
의 결과는True
12 % 3 == 0
의 결과는True
12 % 4 == 0
의 결과는True
12 % 5 == 0
의 결과는False
12 % 6 == 0
의 결과는True
12 % 7 == 0
의 결과는False
12 % 8 == 0
의 결과는False
12 % 9 == 0
의 결과는False
12 % 10 == 0
의 결과는False
12 % 11 == 0
의 결과는False
12 % 12 == 0
의 결과는True
12 % 13 == 0
의 결과는False
12 % 14 == 0
의 결과는False
- … 이하 결과는 모두
False
좋습니다. 이제서야 1
, 2
, 3
, 4
, 6
, 12
가 12
의 약수임을 컴퓨터는 확신할 수 있습니다. 가능한 모든 수를 검사해봤기 때문이죠. 우리는 앞으로 더 큰 숫자가 들어와도 이를 무리없이 행해야 합니다. 일일히 우리가 손으로 모든 상황을 검사해줄 수 없으니 검사의 범위를 지정해주어야 합니다.
그러한 검사의 범위를 후보군이라고 이야기하겠습니다. 우리가 입력을 받는 순간 우리는 검사해야 할 범위를 명시해줄 수 있습니다. 그러니까 12
의 약수를 구할 때 -1000
같은 건 검사할 필요도 없이 우리가 아니라고 말할 수 있습니다. 왜냐하면 음수는 약수를 논하는 자리에서는 아예 논리적으로 맞지 않는 불청객이기 때문입니다. 1000
같이 아주 큰 숫자도 전혀 필요 없습니다. 10000
도 마찬가지지요. 왜냐구요? 약수는 무조건 해당 숫자보다 작거나 같은 범위에 있기 때문이지요.
그렇다면, 19
는 28371
의 약수가 될까요? 사람이 대답한다면 “모릅니다”라고 대답할 수 밖에 없을 겁니다. 암산으로도 하기가 힘들지요. 컴퓨터가 계산하면 정답을 알 수 있습니다. 어찌 되었든 19
는 28371
이라는 숫자의 약수를 구할 때 후보군이 될 자격이 충분합니다. 정말 누가 봐도 불가능한 영역과, 직접 검사를 해보지 않고서는 모르는 영역을 나누어야 합니다. 그 후, 검사를 해야 하는 영역을 검사해보면 됩니다.
약수를 구하는 문제에서 검사해야 할 후보군은 명확합니다. 1 이상 a 이하의 수
를 검사해보면 됩니다. a보다 큰 숫자나, 1보다 작은 숫자는 약수가 될 가능성이 제로입니다.
이 단계에서의 핵심은 1 이상 a 이하의 수가 a의 약수가 될 가능성이 있다
고 이야기할 수 있다는 것입니다.
반복문의 설계를 떠올리며 변동하는 부분 파악하기
지금껏 정리한 내용은 다음과 같습니다.
- 컴퓨터가 어떤 수가 약수인지 판단하는 근거는
a % b == 0
입니다. a
는 입력으로 정해집니다. 이 때 검사해야 할b
의 범위는1 이상 a 이하
입니다.
좋습니다. 이제 반복문을 이용해 b
를 제어할 차례입니다. b
는 우리가 언제든지 새로 대입(=
)해서 값을 만들어낼 수도 있고, +=
또는 -=
를 통해 값을 증가시키거나 감소시킬 수도 있습니다. 우선 반복하면서 변화하는 b
를 제어하기 위해 초기값을 설정해줍시다. 여기서는 b
를 후보군의 시작인 1
부터 차례대로 증가시키겠다고 가정하겠습니다. 왜 차례대로 1
씩 증가하냐면, 후보군 내의 모든 수를 검사해야 하기 때문입니다. 1
만 하고 2
를 건너뛰고 3
을 검사하면 안될 노릇이지요.
그렇다면 초기의 b의 값은 1
로 정해지는 것이며, 매번 반복문을 돌 때마다 1씩 증가
하는 것은 정해졌습니다. 이제 조건을 설정해야 합니다. 조건을 설정하지 않으면 b
는 a
를 넘어 1000
, 10000
, 100000
등등 컴퓨터가 동작하는 그 날까지 무한대로 1
씩 증가할 것입니다. b
가 증가하면서 검사해야 할 조건은 b가 a 이하
인지만 검사하면 됩니다. b
는 처음에 1
에서 부터 출발하여 증가하므로, 0 이하인지 아닌지 생각할 필요도 없습니다.
이 모든 내용을 표로 정리하면 다음과 같습니다.
간단한 이름 | 항목 | 조치 | 코드 |
---|---|---|---|
초기화 | 반복문에 들어가기 전에, 준비 작업은 어떻게 할까? | b 를 1 로 초기화시킨다. |
b = 1 |
조건 | 조건을 어떻게 작성할까? | b 가 a 이하일 때까지만 |
b <= a |
증감 | 반복문에서 조건 변수를 어떻게 조정할까? | b 를 1 씩 증가시킨다. |
b += 1 |
이 단계에서의 핵심은 초기화, 조건, 증감에 해당하는 코드를 직접 적어보는 것입니다.
반복문 작성하기
좋습니다. 이제 작성해봅시다.
a = int(input())
b = 1
while b <= a:
if a % b == 0:
print(str(b) + '는 ' + str(a) + '의 약수입니다!')
b += 1
12
1는 12의 약수입니다!
2는 12의 약수입니다!
3는 12의 약수입니다!
4는 12의 약수입니다!
6는 12의 약수입니다!
12는 12의 약수입니다!
a
에 12
를 입력했을 때, 위와 같은 결과가 나옵니다. 이를 루프 횟수에 따라 표로 정리하면 다음과 같습니다. 우선 b
의 초깃값은 1
입니다.
루프 횟수 | a % b == 0 |
b 의 변화 |
---|---|---|
1 |
12 % 1 == 0 : True |
1 증가 |
2 |
12 % 2 == 0 : True |
1 증가 |
3 |
12 % 3 == 0 : True |
1 증가 |
… | ||
11 |
12 % 11 == 0 : False |
1 증가 |
12 |
12 % 12 == 0 : True |
1 증가 |
13 |
– | – |
마지막에 b
가 13
이 되었을 때에, while
의 조건을 그대로 대입해보면, 13 <= 12
를 체크해 보았을 때 False
이므로 while
을 빠져나가게 됩니다.
성공했습니다! 훨씬 큰 숫자를 써도 잘 작동하는 것을 확인하실 수 있을 겁니다.
코드 전체에서 조건식은 2개가 등장했습니다. 하나는 while
문에 들어간 b <= a
이고 하나는 if
문에 들어간 a % b == 0
입니다. 이 두 개의 구분은 유념해주시기 바랍니다. 후보군을 순회하는 것과 실제 조건이 들어맞는지 아닌지 체크하는 것은 별도의 작업이기 때문입니다.
프로그래밍 문제
- 다음과 같이 출력하는 프로그램을 만들어라.
하
하하
하하하
하하하하
…
하하하하하하하하 - 작은 수 하나와 큰 수 하나를 입력받고, 그 사이에 있는 모든 짝수를 출력하는 프로그램을 만들어라.
- 5개의 양의 정수를 입력받고, 이들 중 가장 큰 수를 출력하여라.
- 학생 10명의 점수를 각각 입력받고, 그 합계를 출력하라.
- 수를 계속 입력받아라. 입력받은 수는 계속해서 곱한다. 그 값이 1000이 넘어간다면, 그 값을 출력하고 프로그램을 종료하라.
- 수를 계속해서 입력받는다. 5 이상의 수가 3번째로 입력되는 순간 입력을 멈추고, 지금까지 입력받았던 모든 수를 합하여 출력하라.
- 다음 수식을 계산하고 그 결과를 출력하는 프로그램을 작성하여라.
S = 1 + 2 + 4 + 7 + 11 + 16 + 22 + ... + 191
- 먼 미래, 인류는 치명적 바이러스 때문에 멸종 위기에 처했다. 인구는 50,000명 밖에 남지 않았으며, 이마저도 매년 10%씩 감소하는 추세이다. 이윽고 20,000명 이하가 될 때까지 몇 년이 걸리는지 계산하여라.
- 고대 그리스의 어떤 국가의 인구는 100,000명이다. 이 국가는 한창 성장세라서 인구가 매년 10% 증가한다. 하지만 호전적인 국가이기 때문에 매년 5,000명이 전쟁으로 사망한다. 200,000명이 넘을 때까지 몇 년이 걸리는지 계산하라. (단, 인구가 먼저 증가한 다음에 전쟁으로 사망한다고 가정한다.)
- 피보나치 수열은 앞 두개의 숫자는 1이며 다음 숫자는 바로 이전 숫자 두 개의 합이다.
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...)
사용자로부터 양수 N을 입력받고, 피보나치 수열의 N 번째 수를 출력하여라.
프로그래밍 문제 정답
- 코드입니다.
msg = ''
i = 0
while i < 8:
msg += '하'
print(msg)
i += 1
- 코드입니다.
low = int(input('작은 수를 입력하세요 >> '))
high = int(input('큰 수를 입력하세요 >> '))
i = low
while i <= high:
if i % 2 == 0:
print(i)
i += 1
- 코드입니다.
i = 0
max_num = 0
while i < 5:
num = int(input("숫자를 입력하세요 >> "))
if max_num < num:
max_num = num
i += 1
print('최댓값은', max_num, '입니다')
- 코드입니다.
result = 0
i = 1
while i <= 10:
result += int(input(str(i) + '번째 학생의 점수를 입력하세요 >> '))
i += 1
print('합계는', result, '점 입니다.')
- 코드입니다.
result = 1
while True:
result *= int(input())
if result > 1000:
print(result)
break
- 코드입니다.
count = 0
result = 0
while True:
num = int(input())
result += num
if num >= 5:
count += 1
if count >= 3:
break
print(result)
- 코드입니다.
num = 1
ac = 1
result = 0
while num <= 191:
result += num
num += ac
ac += 1
print(result)
- 코드입니다.
people = 50000
year = 0
while True:
people *= 0.9
year += 1
if people <= 20000:
break
print(year, "년이 지났습니다.")
- 코드입니다.
pop = 100000
year = 0
while pop < 200000:
pop *= 1.1
pop -= 5000
year += 1
print(year)
- 코드입니다.
i = int(input("숫자를 입력하세요 >> "))
if i == 1 or i == 2 :
print(1)
else:
s1 = 1
s2 = 1
j = 3
while j <= i:
s3 = s1 + s2
s1 = s2
s2 = s3
j += 1
print(s3)
- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
One thought on “파이썬 강좌 – 반복문 코딩하기”