블로그 이미지
김고노

calendar

1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

Notice

2018. 3. 27. 14:31 파이썬 복습

for문이란?


직관적인 반복문 이다.



for문의 기본 구조



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

    수행할 문장1

    수행할 문장2

    ...


리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지


차례로 변수에 대입되어 '수행할 문장1', '수행할 문장2' 등이 수행됨.




전형적인 for문



>>>test_list = ['one', 'two', 'three']

>>>for i in test_list:      ← one, two, three를 순서대로 i에 대입

. . .    print(i)

. . .

one

two

three




다양한 for문의 사용



>>>a=[(1,2),(3,4),(5,6)]

>>>for (first, last) in a:

. . .      print(first+last)

. . .

3

7

11


a 리스트의 요소값이 튜플이라 각각의 요소들이 자동으로


(first, last)라는 변수에 대입됨.



for문의 응용



"총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오."



위 예제를 for문을 이용해 만들어보자



marks = [90, 25, 67, 45, 80]


학생 5명의 시험점수를 리스트로 표현해보면 1번학생은 90점, 5번학생은 80점임.




>>>marks = [90, 25, 67, 45, 80]  ←학생들의 시험 점수 리스트

>>>number = 0            ←학생에게 붙여 줄 번호

>>>for mark in marks:     ← 90, 25, 67, 45, 80을 순서대로 mark에 대입

. . .      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문의 처음으로 돌아감



앞의 예제로 60점 이상인 사람에게 축하메시지를 보낸다고 하면



>>>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번 학생 축하합니다. 합격입니다.



★continue 가 있으면 굳이 들여쓰기 추가로 안해도됨.





for와 함께 자주 사용하는 range함수



range 함수의 간단한 사용법


>>>a = range(10)

>>>a

range(0,10)   ← 0, 1, 2, 3, 4, 5, 6, 7, 8, 9



range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만듬.



시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태이고


이때 끝 숫자는 포함되지 않음.


>>>a = range(1, 11)

>>>a

range(1, 11)   ← 1, 2, 3, 4, 5, 6, 7, 8, 9, 10





for와 range 함수를 이용하면 1부터 10까지 더하는 것을 쉽게 구현 가능



>>>sum = 0

>>>for i in range(1, 11):

. . .      sum = sum + i

. . .

>>>print(sum)

55



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


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


sum + i 라는 문장을 반복적으로 수행하고 sum은 최종적으로 55


★i값을 연달아 넣을때마다 sum 의값도 바뀌기때문에 다 더하는것




◆ print(list(range(1,11,2))) → 1부터 10까지의 숫자를 2씩 더해서 리스트에담고 출력


[1, 3, 5, 7, 9]



◆ print(list(range(20, 0, -3))) → 20부터 1까지의 숫자를 -3씩해서 리스트에담고 출력



[20, 17, 14, 11, 8, 5, 2]




앞의 60점 이상이면 합격이라는 문장을 range 함수를 이용해 바꿔보면




>>>marks = [90, 25, 67, 45, 80]

>>>for number in range(len(marks)):

. . .      if marks[number] < 60: continue  ←점수가 60점 미만이면 맨처음으로 돌아감

. . .      print("%d번 학생 축하합니다. 합격입니다." %(number+1))

1번 학생 축하합니다. 합격입니다.

3번 학생 축하합니다. 합격입니다.

5번 학생 축하합니다. 합격입니다.



★len 함수는 리스트 내 요소의 개수를 돌려주는 함수





for와 range를 이용한 구구단




for와 range 함수를 이용하면 소스코드 4줄만으로 구구단 출력가능.



>>>for i in range(2, 10):       ←1번 for문

. . .      for j in range(1, 10):    ←2번 for문

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




1번 for문에서 2부터 9까지의 숫자가 차례로 i에 대입되고


i가 처음 2일 때 2번 for문을 만난다.


2번 for문에서 1부터 9까지의 숫자가 j에 대입되고


그 다음 문장인 print(i*j) 를 수행함.





★print(i*j, end=" ")와 같이 입력 인수 end를 넣어 준 이유는 해당 결과값을


출력할 때 다음줄로 넘기지 않고 그 줄에서 계속해서 출력하기 위해서이고


print('')는 2단, 3단 등을 구분하기 위해 두 번째 for 문이 끝나면 결과값을


다음 줄부터 출력하게 해주는 문장이다.   ←먼말인지 모르겠음 ㅎㅎ






리스트 안에 for문 포함하기



>>>a = [1,2,3,4]

>>>result = []

>>>for num in a:

. . .      result.append(num*3)

. . .

>>>print(result)

[3, 6, 9, 12]



a라는 리스트의 각 항목에 3을 곱한 결과를 result 라는 리스트에 담는 예제인데


리스트 내포를 이용하면 간단히 해결할 수 있다.



>>>result = [num*3 for num in a]

>>>print(result)

[3, 6, 9, 12]



짝수에만 3을 곱하여 담고싶다면?



>>>result = [num*3 for num in a if num % 2 ==0]

>>>print(result)

[6, 12]



리스트 내포의 일반적인 문법


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


'if 조건' 부분은 앞의 예제에서 보다시피 생략가능


 


for문을 2개 이상 사용하는 것도 가능



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

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

        ...

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




구구단의 모든 결과를 리스트 내포를 이용하여 리스트에 담고싶다면



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

. . .                       for y in range(1,10)]

>>>print(result)

[2, 4, 6, 8, 10, · · · · 4, 8 ,12, · · · 12, 18, 24, · · · 9, 18, 27, · · · 72, 81]






★enumerate -> 인덱스와 값 둘 다표시


a = ["기범", "기범2", "기범3", "기범4"]


for i, b in enumerate(a):

    print( i, b)


0 기범

1 기범2

2 기범3

3 기범4


i+1 이면


1 기범

2 기범2

3 기범3

4 기범4

'파이썬 복습' 카테고리의 다른 글

3/30 함수 (1/2)  (0) 2018.03.30
3/29 연습문제  (0) 2018.03.29
3/26 while문(2/2)  (0) 2018.03.26
3/26 While문(1/2)  (0) 2018.03.26
3/24 if 문 (2/2)  (0) 2018.03.24
posted by 김고노