[엘리스 AI 7기 프리트랙] 04. 반복문

bee·2023년 1월 29일
0
post-thumbnail

해당 시리즈의 모든 내용은 국비지원 부트캠프 '엘리스 AI 7기' 이호준 선생님의 AI 프리트랙 강의를 수강하며 수업 내용을 정리한 것 입니다.

반복문의 필요성

  • 같은 명령을 반복하는 코드를 묶어서 표현하여 '효율적인 코딩'을 하는 과정이 필요하다.

반복문

어떠한 조건이나, 범위 내에서 명령을 반복적으로 수행하는 것


1. for 문

  • '범위(시퀀스)'와 관련된 반복문
  • 원소로 반복하는 방법으로 시퀀스의 원소를 하나씩 변수에 넣어가면서 명령을 실행한다.
  • for문에 들어갈 명령들은 같은 들여쓰기로 구분한다.
# for 문의 기본 구조
for 변수 in  시퀀스 : 
	<수행할 명령>
    .
    .
    .
# 예제
sum = 0
for i in [1, 2, 3]:
	sum = sum + i
  • for문의 명령은 len(시퀀스) 번 만큼 실행된다.
length = 0
for x in 'abcdefg' : # len('abcdefg') = 7
	length = length + 1

[실습] 원소로 반복 : for

>>> nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> for i in nums :
		print(i)  
1
2
3
4
5
6
7
8
9
10

[실습] 쌀과 쌀

## 변수 mix에 있는 "쌀"의 개수를 세봅시다.
>>> mix = "쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰쌀씰쌀쌀씰쌀씰"
>>> count = 0
>>> for i in mix :
		if i == "쌀" :
        	count += 1
>>> print(count)
300

2. for-range 문

시퀀스가 아니라 '횟수'만 알고 있는 경우에 사용한다.

range(a, b)

연속된 숫자를 만들어주는 시퀀스 자료형

range(a, b) # a, a+1, a+2, ... , b-1
range(0, 9) # 0, 1, 2, 3, 4, 5, 6, 7, 8
range(5) # = range(0,5) = 0, 1, 2, 3, 4

for-range(a,b)

'구간'으로 반복하는 방법으로, a이상 b미만의 수를 변수에 넣어가면서 명령을 수행한다.

# 기본 구조
for 변수 in range(a, b):
	<수행할 명령>
    .
    .
# 예제
>>> a = [1]
>>> for i in range(2, 4): # 2, 3
		a.append(i)
>>> print(a)
[1, 2, 3]

for-range(b)

'횟수'로 반복하는 방법으로, b번 만큼 명령을 수행한다.

# 기본 구조
for 변수 in range(b):
	<수행할 명령>
    .
    .
# 예제
>>> count = 0
>>> for i in range(10): # 0, 1, 2, ... , 9
		count = count + 1
>>> print(count)
10

여기서 i는 range안의 값을 받아오는 곳이기 때문에 반드시 for문 안에서도 사용될 필요는 없다.

[실습] 범위로 반복 : for-range(a,b)

>>> for i in range(1, 11): # 1, 2, 3, ... 10
		print(i)
1
2
3
4
5
6
7
8
9
10

[실습] 횟수로 반복 : for-range(b)

>>> for i in range(5): # 0, 1, 2, 3, 4
		print(i)
0
1
2
3
4

>>> for i in range(5):
		print("I Love Python!")
I Love Python!
I Love Python!
I Love Python!
I Love Python!
I Love Python!

[실습] 19단을 외자

>>> for i in range(1, 20): # 1, 2, ... , 19
		print("19 *", i, "=",  19*i)
19 * 1 = 19
19 * 2 = 38
19 * 3 = 57
19 * 4 = 76
19 * 5 = 95
19 * 6 = 114
19 * 7 = 133
19 * 8 = 152
19 * 9 = 171
19 * 10 = 190
19 * 11 = 209
19 * 12 = 228
19 * 13 = 247
19 * 14 = 266
19 * 15 = 285
19 * 16 = 304
19 * 17 = 323
19 * 18 = 342
19 * 19 = 361

3. while문

조건으로 반복하는 방법으로, 조건이 'True'인 동안 명령을 수행한다.

# while문 기본 구조
while 조건 :
	<수행할 명령>
    .
    .
    .
# 예제
>>> i = 5
>>> while i > 0:
		print(i)
        i = i - 1
>>> print("Launch!")
5
4
3
2
1
Launch!

무한루프

while문에서 조건이 항상 True라면 무한정 코드가 실행된다. 이처럼 빠져나올 수 없는 반복문을 '무한루프'라 한다.

>>> i = 1
>>> while i > 0 : # 항상 True
		print(i)
        i = i + 1
1
2
3
...
...

break문

반복문을 탈출하는 역할로, if문에 조건을 걸어준 다음 break를 실행하면 된다.

>>> i = 0
>>> while True :
		print("knock")
        if i >= 3 :
        	break
        i = i + 1
knock
knock
knock
knock

[실습] 조건으로 반복 : while

>>> i = 1
>>> while i < 11:
		print(i)
        i = i + 1
1
2
3
4
5
6
7
8
9
10

[실습] 10년 형에 처한다.

>>> j = 1
>>> while j <= 10 : # 1, 2, ..., 10
		print(j, "년때 수감중입니다.")
        j += 1
>>> print("감옥에서 석방되었습니다!")
1 년 째 수감중입니다.
2 년 째 수감중입니다.
3 년 째 수감중입니다.
4 년 째 수감중입니다.
5 년 째 수감중입니다.
6 년 째 수감중입니다.
7 년 째 수감중입니다.
8 년 째 수감중입니다.
9 년 째 수감중입니다.
10 년 째 수감중입니다.
감옥에서 석방되었습니다!

[실습] 반복문 탈출! : break

>>> i = 1
>>> while True :
		print(i)
        if i == 5:
        	print("i가 5에요!")
	        break
        i += 1
1
2
3
4
5
i가 5에요!

[실습] 위기탈출 넘버원

>>> i = 1
>>> ans = 0
>>> while True:
		ans = ans + i
        if i > 9:
        	break
        i += 1
>>> print(ans)

[실습] 별 그리기

>>> n = int(input())
>>> for i in range(1, n+1):
		print("*" * i)
        i += 1

[실습] 평균 구하기 ★★★

while 문을 이용해서, 0을 입력할 때 까지 입력을 받습니다. 0을 입력받았으면, 0을 입력한 바로 이전까지의 수들의 평균을 구합니다.

>>> my_data = []
>>> s = 0 # sum

>>> while True:
    	i = int(input())
    	if i == 0:
       		break
    	s += i
    	my_data.append(i)

>>> n = len(my_data)   
>>> print(s / n)

20
10
0

15.0

이 문제 하나로 몇시간을 고민했는지 모르겠다. 고민하다가 결국에 질문했는데, 알고보니 무한루프와 break문을 사용하면 충분히 해결 가능한 문제였다.

첫번째 난관은 데이터를 여러줄로 입력받는 것이었다.
처음에는 [input() for _ in range(n)] 의 방법까지 서치해봤는데, 이 방법은 사전에 내가 입력할 데이터의 개수를 먼저 정의해야 했다. 그렇기 때문에 이건 정답이 아닌 것이다. 해결방법은 무한루프 내에 input() 함수를 사용하여 계속해서 입력을 받게 하고, if 조건문을 활용해 내가 입력한 데이터가 0일 때 break 로 반복문을 빠져나오게 만들어야 했다.

두번째 난관은 평균의 분모에 필요한 '데이터의 개수'를 구하는 것이었다.
내 코드는 처음에 아래와 같았다...

>>> i = int(input()) # 입력받을 데이터
>>> s = 0 # sum
>>> n = 0 # number

>>> while i > 0:
		
		s += i
        n += 1
>>> print(s/n)

진짜 엉망진창..ㅠㅠ 비전공자 코딩초짜 다 티내는 허접코드 .. n이라는 변수를 하나 더 선언해서 while문 안에 넣고 반복문을 한바퀴 돌 때마다 1씩 늘어나게 했다. 이런식으로 내가 입력한 데이터의 개수를 세려고 했던 것이다. 이 부분은 반복문 전에 빈 리스트 my_data = []를 선언해서 반복문 안에서 my_data.append(i)로 데이터를 추가하고 len(my_data)로 개수를 세면 해결된다.

이번에 틀렸으니까 다음에 맞으면 된다. 똑같이 실수하면 내가 공부를 안한 것이다.
화이팅..!

profile
벌집처럼 밀도있게 차곡차곡 쌓아나가는중

0개의 댓글