12주차 월 1106 (제어문 for...)
★복습
1. 제어문 문장들이 실행되는 순서를 제어하는 문장을 제어문(contolstatement)라고 한다.
조선문의 중요성
만약 프로그램에 조건문이 없다면 프로그램은 항상 동일한 동작만을 되풀이 할 것이다.
3가지의 제어구조
+ 순차구조
+ 선택구조
+ 반복구조
if-else문
조건을 주면 참일때 실행 또는 거짓일 때 실행
형식
if 조건문 :
문장1
--------------------- (들여쓰기.. 한 블록)
else :
문장 2
2. 논리 연산 진리표
A | B | A and B | A | B | A or B | A | not A |
True | True | True | True | True | True | True | False |
True | False | False | True | False | True | False | True |
False | True | False | False | True | True | ||
False | False | False | False | False | False |
반복문의 중요성
생활에서는 반복적인 작업이 필요.
반복적이고 단순한 작업은 컴퓨터를 이용하여 자동화
반복의 종류
횟수 반복 (for 문) : 정해진 횟수만큼 반복
조건 반복 (while 문) : 특정한 조건이 성립되는 동안 반복
★힉습
예제
7명의 심판들의 점수를 입력받아 리스트에 저장하고 최소값과 최대값을 리스트에서 제거하는 프로그램
# 제목 : 콘테스트 평가 프로그램
# 7번의 인풋이 필요 (while)
# 입력값이 실수(float)이다.
# 입력받은 값을 리스트에 저장한다.
# 최솟값을 찾아야 한다.
# 최댓값을 찾아야 한다.
scores = list()
count = 0
while count < 7:
count += 1
jumsu = input(f'{count}번째 심사위원 점수를 입력하세요:')
# 소수점 입력시 체크 확인!
if jumsu.replace('.','').isdecimal():
scores.append(float(jumsu))
min = min(scores)
max = max(scores)
scores.remove(min)
scores.remove(max)
avg = sum(scores) / len(scores)
print(f'평균은: {avg}입니다.')
제어문 for
- 횟수 반복문
- 가장 많이 쓰임
- 리스트/ 튜플/ 문자열의 요소의 갯수만큼 반복한다.
- for 변수 in 리스트/ 튜플/ 문자열: 실행문1…
ls = [1, 2, 3, 4, 5]
for i in ls:
print(i)
1
2
3
4
5
print(ls[0])
print(ls[1])
print(ls[2])
print(ls[3])
print(ls[4])
1
2
3
4
5
같은 원리인데 제어문을 쓰면 편리하게 출력가능
for i in range(0, 10):
print(i)
0 부터 10까지 나옴...
for i in range(len(ls)):
print(ls[i])
#인덱스를 직접 지정하는 것은 좋은 방법은 아니다.
1 부터 5
list(range(len(ls)))
range타입이라 list로 변환
[0, 1, 2, 3, 4]
a = ['a', 'b', 'c']
for i in a:
print(i)
a, b, c
for i in range(len(a)):
print(a[i])
a, b, c
# 자장면을 x그릇 먹으면 무료 쿠폰
for i in range(1, 11):
print(f'자장면을 {i}그릇 먹었습니다.')
print('무료 쿠폰을 받았습니다.')
자장면을 1그릇 먹었습니다.
...
자장면을 10그릇 먹었습니다.
무료 쿠폰을 받았습니다.
# continue, break, pass
# continue : 해당 조건에서 그 루프가 끝나고 다음 루프로 넘어간다.
# pass : 실행할 코드가 없는 건을 뜻함. (모두 다 실행하고 다음 루프로 넘어간다.)
# break : 반복문 자체를 중단 한다.
for i in range(1, 11):
if i % 2 == 0:
continue
print(i)
# 1~11 까지 i 로 넘어가면서 2로 나눴을때 0이 아니면 False가 나와 print로 간다.
# 0이라면 continue
1 3 5 7 9
for i in range(1, 11):
if i % 2 == 0:
break
print(i)
# 첫 반복문에서 i에 1이 들어가서 출력
# 2에서 0이 되어 종료
1
for i in range(1,11):
if i % 2 == 0:
pass
print(i)
1부터 10 까지 다 출력
pass는 현재 로직이 생각이 안나지만 뼈대를 구축할 때 사용 나중에 꼭 로직을 채워줘야함.
# 리스트에서 for 쓰기
ls = []
# ls = list()
for i in range(1, 51):
if i % 5 == 0:
ls.append(i)
print(ls)
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
# 딕셔너리에서 for 쓰기
dic = { 'name' :'Merry',
'num' :1,
"birth" :'jan'}
dic.items()
dict_items([('name', 'Merry'), ('num', 1), ('birth', 'jan')])
for key, value in dic.items():
print(key,' : ', value)
name : Merry
num : 1
birth : jan
# 튜플에서 for 문 쓰기
a = [(1, 2), (3,4), (5, 6)]
for i in a:
print(i[0] + i[1])
3
7
11
인덱스를 이용하는건 위험할 수 있으니 방어적인 코드
for i, j in a:
print(i + j)
3
7
11
b = [[1, 2], [3,4], [5,6]]
for i, j in b:
print(i + j)
3
7
11
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
List Comprehension
- 리스트 안에 for 문을 포함하여 한 줄!!로 편하게 코드 작성 하는 문법
- [표현식 for 항목 in 반복가능객체 if 조건문]
ls = list()
for i in range(1, 5):
ls.append(i)
print(ls)
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
ls = [i for i in range(1,5)]
print(ls)
# for 문 range만큼 i에 반복해서 for의 i 가 표현식 i로 이동 ls에 리턴
[1, 2, 3, 4]
ls = list()
for i in range(1,5):
if i % 2 == 0:
ls.append(i)
print(ls)
[2, 4]
ls = [i for i in range(1, 5) if i % 2 == 0]
print(ls)
# 1,5의 i 가 2로 나누어 나머지가 0일경우 (짝수일때) ls 에 리턴
[2, 4]
ls = list()
for i in range(1, 5):
if i % 2 == 0:
ls.append(i * 4)
print(ls)
[8, 16]
ls = [i * 4 for i in range(1,5) if i % 2 == 0]
print(ls)
[8, 16]
a = list(range(1,5))
ls = [i * 4 for i in a if i % 2 == 0]
print(ls)
[8, 16]
# [표현식 for 항목1 in 반복가능객체1 if 조건문1 for 항목2 in 반복가능객체 if 조건문2...]
gugudan = list()
for i in range(2, 10):
for j in range(1, 10):
gugudan.append(i * j)
print(gugudan)
[2, 4, 6, 8, 10, 12, 14, 16,...81]
gugudan = [i * j for i in range(2, 10) for j in range(1, 10)]
print(gugudan)
[2, 4, 6, 8, 10, 12, 14, 16,...81]
리스트 위주로 자주 쓰이지만 딕셔너리에서도 사용 가능(동적으로 만들 때)
# Dict comprehension
names = ['Marry', 'John', 'Chris']
num = [1, 2, 3]
dic = {names[i]:num[i] for i in range(len(names))}
{'Marry': 1, 'John': 2, 'Chris': 3}
dic1 = dict()
for i in range(len(names)):
dic1[names[i]] = num[i]
{'Marry': 1, 'John': 2, 'Chris': 3}
dic = { k : v for k, v in zip(names, num)}
{'Marry': 1, 'John': 2, 'Chris': 3}