관리 메뉴

정리왕

파이썬 반복문 for 1 (for문이란?) 본문

6.개발/파이썬 공부하기

파이썬 반복문 for 1 (for문이란?)

정리합니다 2020. 11. 29. 15:21
반응형

 

프로그래밍을 하는 이유는 반복작업을 편리하게 하기 위함이다.

파이썬의 직관적인 특징을 가장 잘 대변해 주는 것이 바로 이 for문이다.

while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 쏙 들어온다는 장점이 있다.

for문을 잘 사용하면 프로그래밍이 즐거워질 것이다.

 

 

1. for문의 사용방법

for 변수 in 리스트 (또는 튜플, 문자열):

    실행할 문장1

    실행할 문장2

    ...

 

for문의 기본 구조는 for 명령어를 넣고,

변수를 정의하고,

in 을 입력하고,

리스트 or 튜플 or 문자열의 입력하면

리스트 or 튜플 or 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입된다.

그리고 for문 안에 있는 '수행할 문장1' , '수행할 문장2' 등이 실행된다.

 

 

 

 

 

2. 예제를 통해 for문 이해하기

for문은 실제로 코딩을 해보면 가장 이해하기 쉽다.

 

 

1)  실습1

for문을 연습 해 보자.

 

(1) test 리스트를 하나 만들어서 리스트안에 요소값으로 1, 2, 3을 정의한다.

 

 

 

(2) for문 변수에 test변수 요소값이 1, 2, 3을 순서대로 i변수에 대입 해 보자.

     for문에 변수값 i를 넣고, 리스트 test를 선택해서 

 

 

(3) for문 변수 i에 test 요소값의 첫번째 요소부터 마지막 요소까지 차례대로 변수에 대입된다.

 

 

(결과) i변수에 test요소값의 첫번째 요소부터 마지막 요소까지 차례대로 대입되면서, 실행할문장1 print(1), print(2), print(3)을 실행한다.

 

(결과확인) print(1), print(2), print(3)처럼 출력이 된다.

 

 

 

 

 

 

2) 실습2

for문의 다양한 실습을 직접 꼭 해봐야 for문에 대해서 이해하기 쉽다.

 

 

 

(1) test1 리스트를 하나 만들어서 리스트안에 요소값으로 "파이썬", "공부가", "제일", "쉽다" 을 정의한다.

 

 

 

(2) for문 변수에 test1변수 요소값이 "파이썬", "공부가", "제일", "쉽다" 을 순서대로 i변수에 대입 해 보자.

     for문에 변수값 i를 넣고, 리스트 test1를 선택해서 

 

 

(3) 이번에는 test1 요소값, 요소값 길이수, 요소값 위치 3개를 동시에 출력 해 보자.

for문 변수 i에 test1 요소값의 첫번째 요소부터 마지막 요소까지 차례대로 변수에 대입된다.

 

 

 

(결과) i변수에 test1요소값의 첫번째 요소부터 마지막 요소까지 차례대로 대입되면서, 실행할문장1 print("파이썬"), print("공부가"), print("제일"), print("쉽다")을 실행한다.

 

 

(결과확인) print 내장함수를 이용하면 아래와 같이 출력 된다.

 

 

 

3) 실습3

이번에도 무조건 실습을 직접 해봐야 이해하기 쉽다.

 

튜플과 리스트를 활용해서 연습 해 보자.

실습3 : 튜플안에 있는 값을 더하기 연습이다.

 

 

(1) a 변수에 리스트안에 튜플로 된 값을 정의해 보자.

 

 

(2) for문을 활용하여, 튜플값 1+2, 3+4, 5+6 을 만들어보자.

for문 명령어를 만들고, 튜플값 (first, last)를 for문 변수로 정의 한다.

그리고 in 을 입력하고,

a 값을 하나씩 대입하는 for문을 만든다.

 

 

(3) a 리스트의 요소값이 튜플이기 때문에, 처음요소 (1,2)  /  (3,4)   /  (5,6)  이렇게 대입된다.

 

 

 

(결과) for문을 활용하여 요소값 하나씩 출력되는 것을 확인할 수 있다. 

 

 

 

 

 

4) 실습4

이번에는 학교점수를 통해서 합격인지 불합격인지 판단하는 코딩을 해보자.

 

총 5명의 학생이 시험을 보았는데,
시험 점수가 60점이 넘으면 합격이고,
60점 미만이면 불합격이다.
합격인지? 불합격인지? 결과를 보여줘!!

 

우선 학생 5명의 시험 점수 리스트를 표현해 보자.

90점, 25점, 67점, 45점, 80점

 

 

 

(1) a 변수에 학생들 점수를 대립한다.

 

 

(2) 학생번호를 student 변수로 정의 한다.

 

 

(3) for문을 활용하여 for문 변수를 check로 정의하고, point의 리스트값을 하나씩 대입 해보자.

 

 

 

 

 

3. for문과 continue문

for문 안에서 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.

 

 

앞에서 for문 응용 예제를 그대로 사용해서 60점 이상인 사람에게는 축하 메시지를 보내고,
나머지 사람에게는 아무 메시지도 전하지 않는 프로그램을 에디터를 사용해 작성해 보자.

 

 

점수가 60점 이하인 학생일 경우에는 check < 60이 참여 되어 continue문이 수행된다.

따라서 축하 메시지를 출력하는 부분인 print문을 수행하지 않고 for문의 처음으로 돌아가게 된다.

 

 

 

 

 

 

 

4. for문과 함께 자주 사용하는 range( ) 함수

1) range(숫자)

for문은 숫자 리스트를 자동으로 만들어 주는 range( ) 함수와 함께 사용하는 경우가 많다.

range( ) 함수를 이용하면 수열을 만든다.

5를 적으면 마지막숫자 5는 포함되지 않는다.

 

 

 

2) range(시작 숫자, 끝 숫자)

시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이 때 끝 숫자는 포함되지 않는다.

 

 

 

3) range(시작 숫자, 끝 숫자, 스텝)

끝값은 만들어지는 수열에 포함되지 않습니다.

range(10) 은 10개의 값을 만드는데, 길이 10인 시퀀스의 항목들을 가리키는 올바른 인덱스들입니다. 범위가 다른 숫자로 시작하거나, 다른 증가분을 (음수조차 가능합니다; 때로 이것을 〈스텝(step)〉이라고 부릅니다) 지정하는 것도 가능합니다:

 

 

(1) 0부터 9까지 3씩 증가하는 것을 for문의 i 변수값에 대입하라.

 

 

 

(2) -10부터 -100까지 -30씩 증가하는 것을 for문의 i 변수값에 대입하라.

 

 

 

4) range( )함수와 len( )내장함수를 활용해 보자.

 

(1) a 변수에 'Mary', 'had', 'a', 'little', 'lamb' 를 정의한다.

 

 

(2) len( ) 내장함수를 이용하여 range( )함수에 정수로 이용할 수 있다.

 

 

 

(3) 실전연습

for와 range 함수를 사용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.

range(1, 11)은 숫자 1부터 10까지 (1이상 11미만)의 숫자를 데이터로 갖는 객체이다.

따라서 위 예에서 i 변수에 리스트의 숫자가 1부터 10까지 하나씩 차례로 대입되면서

add = add + i 문장을 반복적으로 수행하고 add는 최종적으로 55가 된다.

 

 

 

 

 

(4) 실전연습

우리가 앞에서 살펴본 '60점 이상이면 합격' 이라는 문장을 출력하는 예제도 range 함수를 사용해서 바꿔 보자,

 

 

1> 점수를 point변수에 정의한다.

 

2> for문 명령어를 입력하고,

for문 변수를 check로 한다.

그리고 in 을 입력하고,

range함수를 point변수의 len( )내장함수를 이용한다.

len( )내장함수는 요소의 전체 개수를 알려주는 함수이다.

 

 

3> 조건문 if문을 이용하여 60점미만 인경우 continue를 이용하여 스킵한다.

 

 

4> 조건문 60점 미만이 아닌것은 print( )함수를 이용하여 출력한다.

 

len( ) 내장함수는 리스트 안의 요소 갯수를 알려준다. 따라서 len(point)는 5가 된다.

range(len(point))는 range(5)가 된다.

 

i 변수에는 차례로 0부터 4까지의 숫자가 대입될 것이고,

point[i]는 차례대로 90, 25, 67, 45, 80 값을 갖게 된다.

 

 

 

 

<미션1> for 문과 range 함수를 사용하여 1부터 100까지 더해 보자.

1> 더할 값을 담을 그릇 a 변수를 만들자.

 

 

2> for문을 이용하여 range( ) 함수를 이용하여 작성 해 보자.

 

 

3> a + i 를 통해 1부터 100을 더해 보자.

 

 

4> print함수를 통해 1 ~ 100까지 더한 결과값을 출력 해 보자.

 

 

 

 

 

<미션2> for와 range를 사용하여 2단~9단까지 구구단을 만들어 보자.

for와 range 함수를 사용하면 소스 코드 단 4줄만으로 구구단을 출력할 수 있다.

 

1> 변수 i 값에 범위 2~9까지 대입하자.

 

2> 변수 j 값에 범위 1~9까지 대입하자.

 

3> print 함수를 이용하여 i * j를  곱해서 출력한다.

 

 

4> 하지만 위의 결과를 보면 세로로 값이 나열되서 보기가 안좋다.

print 함수안에서 매개변수 end=" "를 넣으면 출력할 때 다음 줄로 넘기지 않는다.

 

 

5> 매개변수 end=" "때문에 3단도 다음줄로 넘기지 않아서 출력되어서 보기가 어렵다.

print(' ')를 이용하여 한줄 띄우자.

 

 

위 예를 보면 for문을 두 번 사용했다.

range(2,10) =====>  for문에서 2부터 9까지의 숫자가 차례로 i에 대입된다.

range(1,10) =====> for문에서 1부터 9까지의 숫자가 j에 대입된다.

그다음 print(i * j)를 수행한다.

 

따라서 i가 2일 때 2*1, 2*2, 2*3, 2*4, 2*5, .... 2*9까지 차례로 수행되며 그 값을 출력하게 된다.

그다음 i가 3일 때 역시 2일 때와 마찬가지로 수행될 것이고 i가 9일 때까지 계속 반복된다.

 

 


★ 매개변수 end를 넣어준 이유는 무엇일까?

앞의 예제에서 print(i*j end=" ")와 같이 매개변수 end를 넣어 준 이유는 해당 결과값을 출력할 때 다음 줄로 넘기지 않고 그 줄에 계속해서 출력하기 위해서이다. 그다음에 이어지는 print(' ')는 2단, 3단 등을 구분하기 위해 두 번째 for문이 끝나면 결과값을 다음 줄부터 출력하게 해주는 문장이다.

 

 

 

 

 

# 리스트 내포 사용하기

리스트 안에 for문을 포함하는 리스트 내포(List comprehension)를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.

다음 예제를 보자.

>>> a = [1, 2, 3, 4]
>>> result = []
>>> for num in a:
	result.append(num*3)

	
>>> print(result)
[3, 6, 9, 12]

위 예제는 a리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담는 예제이다.

 

 

이것을 리스트 내포를 사용하면 다음과 같이 간단히 해결할 수 있다.

>>> 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]

 

 

리스트 내포의 일반 문법은 다음과 같다.

'if 조건' 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.

 [표현식 for 항목 in 반복 기능 객체 if 조건]

 

 

조금 복잡하지만 for문을 2개 이상 사용하는 것도 가능하다.

for문을 여러 개 사용할 때의 문법은 다음과 같다.

[표현식 for 항목1 in 반복 가능 객체1 if 조건1

            for 항목2 in 반복 가능 객체2 if 조건2

 

 

 

만약 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 내포를 사용하여 다음과 같이 간단하게 구현할 수도 있다.

>>> result = [x*y for x in range(2,10)
	      for y in range(1,10)]
	      
>>> print(result)

 

 

지금꺼 우리는 프로그램 흐름을 제어하는 if문, while문, for문에 대해 알아보았다.

아마도 여러분은 while문과 for문을 보면서 2가지가 아주 비슷하다는 느낌을 받았을 것이다.

실제로 for문을 사용한 부분을 while문으로 바꿀 수 있는 경우도 많고, while문을 for문으로 바꾸서 사용할 수 있는 경우도 많다.

반응형

'6.개발 > 파이썬 공부하기' 카테고리의 다른 글

파이썬 함수 1 (파이썬 함수의 구조)  (0) 2020.11.29
파이썬 반복문 for문2 (리스트 내포)  (0) 2020.11.29
파이썬 while문 2  (0) 2020.11.29
파이썬 while 문 1  (0) 2020.11.29
파이썬 if문 3 (elif)  (0) 2020.11.29
Comments