for문을 배우면 전통적으로 구구단을 한번 돌려봐야 한다. 어린이들이 외우는 구구단을 컴퓨터로 구현함으로써 for제어문을 더 잘 알 수 있다. 구구단은 사실 심오하다. 요즘은 유튜브에서 인도 수학이 뜨던데 흥미롭다. 유튜브에 multification table이라고 검색하면 재미있는 영상들이 많이 올라와있다. 인도의 전통복장이 마음에 든다.
다음 코드는 for 문으로 구구단을 출력하는 것이다.
for i in range(2,10):
for j in range(1,10):
print("{0} x {1} = {2:>3}".format(i,j,i*j))
print("-"*12)
가장 기본적인 구구단 출력이다. for문을 두개 사용한다. 한개는 2~9단까지의 숫자를 다른 하나는 1~9까지의 숫자를 가져온다. 2단 에서 9개 3단에서 9개 이런식으로 루프를 돌게 해놨다. print 문의 포맷은 조금 생소하지만 잘 보면 규칙이 보인다. {0} {1} {2} 이는 format 메소드의 매개변수를 말한다. 첫번째가 i 두번째가 j 마지막 {2}는 i*j 이다.
다음의 결과를 얻는다.
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
------------
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
------------
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
------------
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
------------
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
------------
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
------------
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
------------
출력이 너무 길고 보기가 불편하다. 이럴 때는 코드를 바꾼다.
for i in range(2,10):
for j in range(1,10):
print("| {0} x {1} = {2:>2}".format(i,j,i*j), end = ' ')
print()
print 매개변수에 end = ' '로 줄바꿈을 빼버린다. print는 기본값으로 줄바꿈을 한다. 아래와 같은 값을 얻는다.
| 2 x 1 = 2 | 2 x 2 = 4 | 2 x 3 = 6 | 2 x 4 = 8 | 2 x 5 = 10 | 2 x 6 = 12 | 2 x 7 = 14 | 2 x 8 = 16 | 2 x 9 = 18
| 3 x 1 = 3 | 3 x 2 = 6 | 3 x 3 = 9 | 3 x 4 = 12 | 3 x 5 = 15 | 3 x 6 = 18 | 3 x 7 = 21 | 3 x 8 = 24 | 3 x 9 = 27
| 4 x 1 = 4 | 4 x 2 = 8 | 4 x 3 = 12 | 4 x 4 = 16 | 4 x 5 = 20 | 4 x 6 = 24 | 4 x 7 = 28 | 4 x 8 = 32 | 4 x 9 = 36
| 5 x 1 = 5 | 5 x 2 = 10 | 5 x 3 = 15 | 5 x 4 = 20 | 5 x 5 = 25 | 5 x 6 = 30 | 5 x 7 = 35 | 5 x 8 = 40 | 5 x 9 = 45
| 6 x 1 = 6 | 6 x 2 = 12 | 6 x 3 = 18 | 6 x 4 = 24 | 6 x 5 = 30 | 6 x 6 = 36 | 6 x 7 = 42 | 6 x 8 = 48 | 6 x 9 = 54
| 7 x 1 = 7 | 7 x 2 = 14 | 7 x 3 = 21 | 7 x 4 = 28 | 7 x 5 = 35 | 7 x 6 = 42 | 7 x 7 = 49 | 7 x 8 = 56 | 7 x 9 = 63
| 8 x 1 = 8 | 8 x 2 = 16 | 8 x 3 = 24 | 8 x 4 = 32 | 8 x 5 = 40 | 8 x 6 = 48 | 8 x 7 = 56 | 8 x 8 = 64 | 8 x 9 = 72
| 9 x 1 = 9 | 9 x 2 = 18 | 9 x 3 = 27 | 9 x 4 = 36 | 9 x 5 = 45 | 9 x 6 = 54 | 9 x 7 = 63 | 9 x 8 = 72 | 9 x 9 = 81
dan = int(input("몇 단부터 출력합니까? (1~9단) :"))
for i in range(dan,10):
for j in range(1,10):
print("| {0} x {1} = {2:>2}".format(i,j,i*j), end = ' ')
print()
dan 변수에 사용자에게 입력받는다. 바깥 for 루프의 시작점에 dan을 대입하면 그 단부터 시작된다.
꼭 9단까지 하라는 법은 없다. 19단도 해보고 100단도 해보자. range의 마지막 숫자만 바꿔주면 된다. 바깥쪽과 안쪽의 차이점을 알면 된다.
for i in range(2,20):
for j in range(1,20):
print("| {0:>2} x {1:>2} = {2:>3}".format(i,j,i*j), end = ' ')
print()
유니코드 이모지를 사용해서 출력해본다. ' ' 안에 *를 쓰는 건 지겨워서. 유니코드가 동작하지 않는 환경이면 * 별표로 바꾸면 된다.
1) 직각삼각형그리기
for i in range(1,6):
print('\U0001f603'*i)
- 출력결과: 높이를 조절한다. range(1, 높이)
😃
😃😃
😃😃😃
😃😃😃😃
😃😃😃😃😃
2) 사각형그리기
for i in range(1,6):
print('\U0001f603'*5)
- 출력결과: 높이와 너비를 조절한다. '유니코드'*너비
😃😃😃😃😃
😃😃😃😃😃
😃😃😃😃😃
😃😃😃😃😃
😃😃😃😃😃
3) 안이 비어있는 사각형
이모지로 하면 가로길이가 안맞아서 글자 O를 사용하였다. w와 h를 조작함으로써 사각형의 너비와 높이 조절가능하다.
w = 20
h = 7
for i in range(1,h+1):
if i == 1 or i == h:
print("O"*w)
else:
print("O"," "*(w-2),"O",sep='')
4) 위쪽을 향한 삼각형 아래쪽을 향한 삼각형
range로 큰 수에서 작은수로 내려오며 만드는 삼각형이다. 사용자에게 높이 입력을 받아서 그린다
rg = eval(input("input triangle length: "))
for i in range(rg, 0, -1):
print(" " * i, end='')
print("*" * (rg - i + 1), end='')
print("*" * (rg - i), end='\n')
아래쪽을 향한 삼각형이다.
rg = eval(input("input triangle length: "))
for i in range(1,rg):
print(" "*(i+1),end='')
print("*"*(rg-i),end='')
print("*"*(rg-i-1))
enumerate 메소드로 인덱스와 값을 동시에 꺼내준다. 현재 위치확인이 용이하다.
a = [35,52,40,81,25,46,75]
for i,j in enumerate(a):
print("index : {0} | value : {1}".format(i,j))
*시작 인덱스를 1로 바꿀 수 있다.
a = [35,52,40,81,25,46,75]
for i,j in enumerate(a,start=1):
print("index : {0} | value : {1}".format(i,j))