💻프로그래밍/python

[파이썬 독학] 10. for문

빅데희터 2021. 1. 25. 11:24
반응형

1. for문의 기본구조

저번 시간에 정리한 while문과 마찬가지로 for문도 반복문의 하나로, 여러 번 반복해야 되는 작업을 for문을 이용하면 간편하게 해결할 수 있다.

for문은 while문처럼 for문 또한 끝에는 콤마(:)를 사용하고 , 수행할 문장들은 들여 쓰기를 통해 구분해주어야 한다는 점은 동일하다. for문의 기본 구조를 조금 더 구체적으로 살펴보자면, for 변수 in 리스트 에서 리스트에 있는 값들을 차례대로 하나씩 변수에 대입되고 그 이후에 수행할 문장들이 수행된다. for문에서는 리스트(튜플, 문자열 등) 더 이상 꺼낼 요소들이 없어지면 반복이 종료된다. 또한 파이썬에서의 for문은 인덱스 별로 하나씩 각 값들을 뽑아오는 개념이 아니라 그냥 순서대로 빼오는 것에 가깝다.

 

 

 

 

2. for문 활용법

 

이번에는 ['김','이','박']이라는 성 뒤에 '씨'를 추가하여 성씨를 완성해보고자 한다. 먼저 변수 people에 하나의 리스트를 만들어 '김', '이', '박'을 넣어준다. 그다음 i(임시 변수)에 각 값들에 '씨'를 더한 하나의 리스트를 만들면 된다. 여기서 i는 아까 만든 리스트인 people에서 값들을 하나씩 뽑아 '씨'를 붙인 것들을 담는 상자라고 생각하면 된다. 따라서 최종적으로 people을 출력해 보았을 때 원래의 리스트 값들에 각각 '씨'가 붙었음을 알 수 있다.

 

 

 

 

2-2. for문의 활용 (합격, 불합격 판단 프로그램)

어떠한 시험의 커트라인이 80점이라고 할 때 총 3명의 학생 중, 이 시험에 합격한 사람과 불합격한 사람을 판단하는 프로그램을 만들어보자.

우선 3명의 점수를 하나의 리스트(students)로 나타낸다. 이때 각 학생에게 번호를 부여해주기 위해 number를 사용하였다. 그 후 리스트students에서 차례로 점수를 뽑아 임시로 설정한 변수 student에 대입하고, for문 안의 문장들을 수행한다. for문이 한번 수행될 때마다 number는 1씩 증가한다. 이를 출력해보면 각 학생이 합격인지 불합격인지 출력해준 것을 볼 수 있다.

 

 

 

 

2-3. for문의 활용 (문자열을 길이로 변환)

이번에는 for문을 이용하여 각 문자열의 길이를 출력해보도록 한다. 우선 하나의 리스트를 만들어준 다음, len( )함수를 사용하여 문자열의 길이를 재고, 괄호 안에는 길이로 변환된 값을 담을 임시 변수(i)를 넣어준다. 이때 i는 리스트 '과일'에서 각 값들을 하나씩 뽑은것이다. len(i) for i in 과일 이라고 입력한 뒤 과일을 다시 출력해보면 '사과'=2, '바나나'=3, '블루베리'=4로 문자열이 길이로 값이 변했음을 알 수 있다.

 

 

 

 

2-4. for문의 활용 (소문자에서 대문자로 변환)

이번에는 소문자인 문자열을 for문을 이용하여 각각을 한번에 대문자 문자열로 바꾸어보자. 먼저 소문자 문자열이 들어있는 하나의 리스트를 만들어준 다음 upper( )함수를 사용하여 대문자 문자열로 변환시켜준다.

 

 

 

 

3. for문과 continue

while문에서 정리해본 continue를 for문에서도 사용할 수 있다. for문 안의 문장들을 수행하는 중에 continue를 만나면 for문의 맨 처음으로 돌아가게 된다.

 

continue를 이용하여 80점 이상 맞아 합격한 학생들에게 축하 메시지를 보내는 프로그램을 만들고자 한다. 이 경우 , if문을 이용해서 if student < 80 즉, 학생의 점수가 80점 미만일 경우 continue 그냥 for문 처음으로 돌아가고, 80점 이상일 경우에만 '%d번학생 합격입니다.'라는 문자를 출력하게 만들어주면 된다.

 

 

 

 

4. for문과 range함수

range( ) 함수는 for문과 자주 쓰이므로 알아두는 것이 좋다. 예를 들어 1부터 10까지의 값을 모두 출력하고 싶을 때 for문과 리스트 [1,2,3,4,5,5,6,7,8,9,10]으로 표현할 수 있지만, 만약 1부터 100까지의 값을 출력하고 싶을 때 100가지의 값을 모두 쓰기에는 너무 번거롭다. 이러한 경우 사용할 수 있는 것이 range함수이다. 1부터 10까지의 값을 range함수를 이용하여 나타내고 싶다면 range(1,11)로 표시해주면 된다. 즉, range함수의 괄호 안에 두 값들을 (이상, 미만)이라는 의미로, (1,11)은 1보다 크거나 같고 11보다 작은 값이라고 생각하면 된다.

 

 

4-1. range 함수 활용

그렇다면 range함수를 이용하여 1부터 10 미만의 숫자들을 모두 더하는 프로그램을 만들어보자. 먼저 sum = 0으로 선언하여 하나의 변수를 만들어주고, for i in range(1,10)으로 1부터 9까지의 숫자를 하나씩 뽑아 변수 i에 넣는다. 이때 sum = sum + i 로 sum에 i의 값을 하나씩 계속 더해준 뒤 최종적으로 sum을 출력해보면, 1부터 9까지 더한 값인 45가 출력된다.

 

 

 

 

5. 이중 for문 (구구단 프로그램 만들기)

이중 for문을 사용하여 (for문 안에 또 다른 for문) 구구단을 실행하는 프로그램을 만들어보자. 먼저 for i in range(2,10)으로 2부터 10전까지 각각의 값들이 i안으로 들어가게 만든다. 다음으로는 그 for문 안에 for j in range(1,10)이라는 또 다른 for문을 넣어준다. 즉 우리가 구구단을 할 때 2단 (2*1, 2*2.... 2*9)를 실행한 다음 3단으로 넘어가는 프로그램을 만든 것이다. 이와 같이 이중 for문은 안쪽 for문이 다 완료되어야 바깥쪽에 있는 for문이 그다음 실행된다. (구구단에서 2단이 다 끝난 다음 3단으로 넘어감) 이때 end = ' '는 띄어쓰기를 해준다는 의미이다. (print함수의 옵션이라고 생각하면 됨)

 

 

 

6. for문으로 리스트 만들기 (리스트 내포, append 함수)

위의 코드는 리스트 a의 각 값들에 10을 곱해서 하나의 box에 담는 예제이다. 이 코드를 조금 더 간단하게 바꿀 수 없을까? 이러한 경우에 사용하는 게 리스트 내포(List comprehension)이다. 

box = [num*10 for num in a]를 해석해보자면 우리는 box에 담고 싶은 것은 num에 10을 곱한 값들의 리스트를 만들고 싶은 것이다. 이때 num이 어디서 나왔나?를 보면 for num in a 로, 리스트 a에있는 값들이다. 결론적으로 리스트a에 있는 각 값들 [1,2,3]을 하나씩 뽑아서 num이라는 임시 보관함에 넣어 각 10씩을 곱해주고 그 전체를 다시 box에 넣는 것이다 라고 생각하면 된다.

 

 

 

그렇다면 위의 코드를 같은 원리로 해석해보자. box = [num//2 for num in a if num % 2 == 0] 에서, 우리가 결론적으로 담고 싶은 것은 num//2로, num에 2를 나누었을 때의 몫들을 box에 넣고 싶은 것이다. 이때 num은 리스트 a에서 나온 값이며, if num % 2 == 0이라는 조건문을 이용하여 조건을 걸어주었다.

 

 

 

본문 5번에 보면 이중 for문을 이용하여 구구단 프로그램을 만들었다. 구구단 프로그램 코드를 조금 더 간단하게 표현하면 box = [x *y for x in range(2,5) for y in range(1,3)]로 표현할 수 있다. 여기서 우리가 결론적으로 하고 싶은 것은 x*y인데, 이때 x는 range(2,5)에서 뽑은 각각의 값들이고, y는 range(1,3)에서 뽑은 각각의 값들이다.

반응형