파이썬의 직관적인 특징을 가장 잘 대변해 주는 것이 바로 이 for문이다. while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 쏙 들어온다는 장점이 있다. for문을 잘 사용하면 프로그래밍이 즐거워질 것이다.
- for문의 기본 구조
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
1. 전형적인 for문
test_list = ['one','two','three']
for i in test_list:
print(i)
one
two
three
one, two, three 리스트의 첫 번째 요소인 one이 먼저 i변수에 대입된 후 print(i) 문장을 수행. 리스트의 마지막 요솎지 이것을 반복 한다.
2. 다양한 for문의 사용
a = [(1,2),(3,4),(5,6)]
for (first,last) in a:
print(first+last)
3
7
11
위 예는 a리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last)변수에 대입된다.
3. for문의 응용
for문의 쓰임새를 알기 위해 다음을 가정해 보자.
"총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오."
우선 학생 5명의 시험 점수를 리스트로 표현해 보았다.
marks = [90,25,67,45,80]
이런 점수를 차례로 검사해서 합격 했는지 불합격했는지 통보해 주는 프로그램을 만들어 보자.
# marks1.py
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number +1
if mark >= 60:
print("%d번 학생은 합격입니다."% number)
else:
print("%d번 학생은 불합격입니다." % number)
1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.
- for문과 continue문
while문에서 살펴본 continue문을 for문에서도 사용할 수 있다. 즉 for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.
# marks2.py
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number + 1
if mark < 60: continue
print("%d번 학생 축하합니다. 합격입니다." % number)
1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.
- for문과 함께 자주 사용하는 range 함수
a = range(10)
a
range(0, 10)
for문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다.
range(10)은 0부터 10미만의 숫자를 포함하는 range 객체를 만들어준다.
시작 숫자와 끝 숫자를 저장하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.
a = range(1,11)
a
range(1, 11) 1,2,3,4,5,6,7,8,9,10
- range 함수의 예시 살펴보기
for와 range 함수를 사용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.
add = 0
for i in range (1,11):
add = add + i
print(add)
55
1+2+3+.....9+10 = 55 이다.
또한 우리가 앞에서 살펴본 '60점 이상이면 합격' 이라는 문장을 출력하는 에제도 range 함수를 사용해서 바꿀 수 있다.
marks = [90, 25, 67, 45, 80]
# marks3.py
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
if marks[number] < 60: continue
print("%d번 학생 축하합니다. 합격입니다." % (number+1))
1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.
- for와 range를 사용한 구구단
ex) 단 4줄만으로 구구단을 출력할 수 있다.
for i in range(2,10):
for j in range(1,10):
print(i*j, end="")
print('')
2
4
6
8
10
12
14
16
18
3
6
9
12
15
18
21
24
27
4
8
12
16
20
24
28
32
36
5
10
15
20
25
30
35
40
45
6
12
18
24
30
36
42
48
54
7
14
21
28
35
42
49
56
63
8
16
24
32
40
48
56
64
72
9
18
27
36
45
54
63
72
81
- 리스트 내포 사용하기
리스트 안에 for문을 포함하는 리스트 내포를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.
a = [1,2,3,4]
result = []
for num in a:
result.append(num*3)
print(result)
[3]
[3, 6]
[3, 6, 9]
[3, 6, 9, 12]
이것을 리스트 내포를 사용하면 다음과 같이 간단히 해결 가능.
a = [1,2,3,4]
result = [num*3 for num in a]
print(result)
[3, 6, 9, 12]
만약 [1,2,3,4]중에서 짝수에만 3을 곱하여 담고 싶다면 다음과 같이 리스트 내포 안에 if조건을 사용할 수 있다.
a= [1,2,3,4]
result=[num*3 for num in a if num%2 ==0]
print(result)
[6, 12]
만약 구구단의 모든 결과를 리스트에 담고 싶다면 ?
result = [ x*y for x in range(2,100)
for y in range(1,10)]
print(result)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81, 10, 20, 30, 40, 50, 60, 70, 80, 90, 11, 22, 33, 44, 55, 66, 77, 88, 99, 12, 24, 36, 48, 60, 72, 84, 96, 108, 13, 26, 39, 52, 65, 78, 91, 104, 117, 14, 28, 42, 56, 70, 84, 98, 112, 126, 15, 30, 45, 60, 75, 90, 105, 120, 135, 16, 32, 48, 64, 80, 96, 112, 128, 144, 17, 34, 51, 68, 85, 102, 119, 136, 153, 18, 36, 54, 72, 90, 108, 126, 144, 162, 19, 38, 57, 76, 95, 114, 133, 152, 171, 20, 40, 60, 80, 100, 120, 140, 160, 180, 21, 42, 63, 84, 105, 126, 147, 168, 189, 22, 44, 66, 88, 110, 132, 154, 176, 198, 23, 46, 69, 92, 115, 138, 161, 184, 207, 24, 48, 72, 96, 120, 144, 168, 192, 216, 25, 50, 75, 100, 125, 150, 175, 200, 225, 26, 52, 78, 104, 130, 156, 182, 208, 234, 27, 54, 81, 108, 135, 162, 189, 216, 243, 28, 56, 84, 112, 140, 168, 196, 224, 252, 29, 58, 87, 116, 145, 174, 203, 232, 261, 30, 60, 90, 120, 150, 180, 210, 240, 270, 31, 62, 93, 124, 155, 186, 217, 248, 279, 32, 64, 96, 128, 160, 192, 224, 256, 288, 33, 66, 99, 132, 165, 198, 231, 264, 297, 34, 68, 102, 136, 170, 204, 238, 272, 306, 35, 70, 105, 140, 175, 210, 245, 280, 315, 36, 72, 108, 144, 180, 216, 252, 288, 324, 37, 74, 111, 148, 185, 222, 259, 296, 333, 38, 76, 114, 152, 190, 228, 266, 304, 342, 39, 78, 117, 156, 195, 234, 273, 312, 351, 40, 80, 120, 160, 200, 240, 280, 320, 360, 41, 82, 123, 164, 205, 246, 287, 328, 369, 42, 84, 126, 168, 210, 252, 294, 336, 378, 43, 86, 129, 172, 215, 258, 301, 344, 387, 44, 88, 132, 176, 220, 264, 308, 352, 396, 45, 90, 135, 180, 225, 270, 315, 360, 405, 46, 92, 138, 184, 230, 276, 322, 368, 414, 47, 94, 141, 188, 235, 282, 329, 376, 423, 48, 96, 144, 192, 240, 288, 336, 384, 432, 49, 98, 147, 196, 245, 294, 343, 392, 441, 50, 100, 150, 200, 250, 300, 350, 400, 450, 51, 102, 153, 204, 255, 306, 357, 408, 459, 52, 104, 156, 208, 260, 312, 364, 416, 468, 53, 106, 159, 212, 265, 318, 371, 424, 477, 54, 108, 162, 216, 270, 324, 378, 432, 486, 55, 110, 165, 220, 275, 330, 385, 440, 495, 56, 112, 168, 224, 280, 336, 392, 448, 504, 57, 114, 171, 228, 285, 342, 399, 456, 513, 58, 116, 174, 232, 290, 348, 406, 464, 522, 59, 118, 177, 236, 295, 354, 413, 472, 531, 60, 120, 180, 240, 300, 360, 420, 480, 540, 61, 122, 183, 244, 305, 366, 427, 488, 549, 62, 124, 186, 248, 310, 372, 434, 496, 558, 63, 126, 189, 252, 315, 378, 441, 504, 567, 64, 128, 192, 256, 320, 384, 448, 512, 576, 65, 130, 195, 260, 325, 390, 455, 520, 585, 66, 132, 198, 264, 330, 396, 462, 528, 594, 67, 134, 201, 268, 335, 402, 469, 536, 603, 68, 136, 204, 272, 340, 408, 476, 544, 612, 69, 138, 207, 276, 345, 414, 483, 552, 621, 70, 140, 210, 280, 350, 420, 490, 560, 630, 71, 142, 213, 284, 355, 426, 497, 568, 639, 72, 144, 216, 288, 360, 432, 504, 576, 648, 73, 146, 219, 292, 365, 438, 511, 584, 657, 74, 148, 222, 296, 370, 444, 518, 592, 666, 75, 150, 225, 300, 375, 450, 525, 600, 675, 76, 152, 228, 304, 380, 456, 532, 608, 684, 77, 154, 231, 308, 385, 462, 539, 616, 693, 78, 156, 234, 312, 390, 468, 546, 624, 702, 79, 158, 237, 316, 395, 474, 553, 632, 711, 80, 160, 240, 320, 400, 480, 560, 640, 720, 81, 162, 243, 324, 405, 486, 567, 648, 729, 82, 164, 246, 328, 410, 492, 574, 656, 738, 83, 166, 249, 332, 415, 498, 581, 664, 747, 84, 168, 252, 336, 420, 504, 588, 672, 756, 85, 170, 255, 340, 425, 510, 595, 680, 765, 86, 172, 258, 344, 430, 516, 602, 688, 774, 87, 174, 261, 348, 435, 522, 609, 696, 783, 88, 176, 264, 352, 440, 528, 616, 704, 792, 89, 178, 267, 356, 445, 534, 623, 712, 801, 90, 180, 270, 360, 450, 540, 630, 720, 810, 91, 182, 273, 364, 455, 546, 637, 728, 819, 92, 184, 276, 368, 460, 552, 644, 736, 828, 93, 186, 279, 372, 465, 558, 651, 744, 837, 94, 188, 282, 376, 470, 564, 658, 752, 846, 95, 190, 285, 380, 475, 570, 665, 760, 855, 96, 192, 288, 384, 480, 576, 672, 768, 864, 97, 194, 291, 388, 485, 582, 679, 776, 873, 98, 196, 294, 392, 490, 588, 686, 784, 882, 99, 198, 297, 396, 495, 594, 693, 792, 891]
지금껏 우리는 프로그램 흐름을 제어하는 if문, while문, for문에 대해 알아 보았다.
출처 : "점프 투 파이썬"
'파이썬 기초' 카테고리의 다른 글
04-2 사용자 입력과 출력 (0) | 2021.03.16 |
---|---|
04-1 함수 (프로그램의 입력과 출력은 어떻게 해야 할까?) (0) | 2021.03.16 |
03-2 while문 (0) | 2021.03.14 |
03 -1 if문 (0) | 2021.03.14 |
02-8 자료형의 값을 저장하는 공간, 변수 (0) | 2021.03.13 |