0. 반복문
특정 코드를 반복시키기 위해서 사용한다
- for문
- while문
1. for문
for문바깥쪽
for 변수명 in 반복가능객체 :
반복할 코드
반복할 코드
...
for문바깥쪽
반복가능객체의 요소 개수 만큼 반복
print('프로그램 시작')
for i in [10, 20, 30] :
print('배상엽')
print('for문안쪽!')
print('for문바깥쪽!')
> 프로그램 시작
> 배상엽
> for문안쪽!
> 배상엽
> for문안쪽!
> 배상엽
> for문안쪽!
> for문바깥쪽!
range(end) : 함수 사용 결과는 0부터 end -1까지의 숫자들이
요소로 들어있는 반복가능객체(range 타입)
print(list(range(8)))
> [0, 1, 2, 3, 4, 5, 6, 7]
range(start, end) : 함수 사용 결과는 start 부터 end - 1까지의 숫자들이
요소로 들어있는 반복가능객체(range 타입)
print(list(range(5, 10)))
> [5, 6, 7, 8, 9]
range(start, end, step) : 함수 사용 결과는 start 부터 end - 1까지 step 간격의 숫자들이
요소로 들어있는 반복가능객체
print(list(range(1, 10,3)))
> [1, 4, 7]
for i in range(5) :
print('배상엽')
> 배상엽
> 배상엽
> 배상엽
> 배상엽
> 배상엽
1-1. for문의 변수 자리
for 변수명 in 반복가능객체 :
반복할 코드
- 반복의 횟수 : 반복가능객체의 요소 개수
- 변수에 대입되는 값 : 반복가능객체의 요소들이 차례로 대입된다
# range(5) --> 0,1,2,3,4 가 요소로 들어있는 반복가능객체
for i in range(5) :
print(i)
> 0
> 1
> 2
> 3
> 4
--------------------
for i in [10,20,30,40] :
print(i)
> 10
> 20
> 30
> 40
--------------------
for i in (5,6,7,8) :
print(i)
> 5
> 6
> 7
> 8
--------------------
for i in {'배상엽', '홍길동', '김철수', '김영희'} :
print(i)
> 김영희
> 홍길동
> 김철수
> 배상엽
--------------------
for i in {'국어':50, '수학':60, '영아':70} :
print(i)
> 국어
> 수학
> 영아
--------------------
scores = {'국어':50, '수학':60, '영아':70}
for i in scores :
print(scores[i])
> 50
> 60
> 70
2. continue와 break
- continue : 반복문 안에서 사용되며, continue가 실행되면 즉시 다음 반복을 실행한다.
- break : 반복문 안에서 사용되며, break가 실행되면 즉시 반복을 종료한다
for i in range(5) :
print(f'현재 i값 : {i}')
if i % 2 == 0:
continue
print('for문 안쪽 문장')
print('for문 바깥문장!')
> 현재 i값 : 0
> 현재 i값 : 1
> for문 안쪽 문장
> 현재 i값 : 2
> 현재 i값 : 3
> for문 안쪽 문장
> 현재 i값 : 4
> for문 바깥문장!
i가 0일 때 2로 나눈 나머지가 0이기에 다음 반복을 실행하여 i가 1일 때로 넘어감
-> i가 1일 때로 넘어가면 나머지가 0이 아니므로 print 실행 후 반복문으로 넘어감
> 이런 방식으로 실행됨
# i 0 1 2 3
# i > 2 F F F T break
for i in range(5) :
print(f'현재 i값 : {i}')
if i > 2 :
break
print('for문안쪽!')
print('for문 바깥!')
> 현재 i값 : 0
> for문안쪽!
> 현재 i값 : 1
> for문안쪽!
> 현재 i값 : 2
> for문안쪽!
> 현재 i값 : 3
> for문 바깥!
i가 0일 때 2보다 작아 다음 반복을 멈추지 않고 print 실행 후 i가 1일 때로 넘어감
-> i가 1,2일 때도 마찬가지
-> i가 3일때는 2보다 크기 때문에 반복을 멈춤
-> 바깥쪽 print 실행
예제1
사용자에게 문자열 한글을 입력받고, 숫자로 바꾸어서 출력하기
입력예시
한글입력 >> 일오공육
출력예시
1506
[ 방법 1 ]
# ch '일' '오' '공' '육'
# res '1' '15' '150' '1506'
for ch in target :
if ch == '일' :
res = res + '1'
elif ch == '이' :
res = res + '2'
elif ch == '삼' :
res = res + '3'
elif ch == '사' :
res = res + '4'
elif ch == '오' :
res = res + '5'
elif ch == '육' :
res = res + '6'
elif ch == '칠' :
res = res + '7'
elif ch == '팔' :
res = res + '8'
elif ch == '구' :
res = res + '9'
elif ch == '공' :
res = res + '0'
-> 너무 복잡하므로 줄이는 방법 강구해보자
위의 방법을 기능으로 만든 것이 복합대입연산자이다
복합대입연산자
num += 5 # num = num + 5
num -= 5 # num = num - 5
num *= 5 # num = num * 5
num /= 5 # num = num / 5
num %= 5 # num = num % 5
num //= 5 # num = num // 5
num **= 5 # num = num ** 5
[ 방법 2 ]
target = input('한글입력 >> ')
# target = '일오공육'
# 0 12 3 4 5 67 8 9
korean = '공일이삼사오육칠팔구'
res = ''
# res '1' '15' '150' '1506'
for ch in target : # '일' '오' '공' '육'
res += str(korean.index(ch))
print('결과 : ' + res)
예제2
사용자에게 국어, 영어, 수학 점수를 입력받고, 총점과 평균 출력하기 (리스트 활용하기)
입력예시
국어 >> 85
영어 >> 86
수학 >> 85
출력예시
총점 : 000점
평균 : 000점
[ 방법 1 ]
for i in range(3) :
if i == 0 :
scores.append(int(input('국어점수입력 >> ')))
elif i == 2 :
scores.append(int(input('영어점수입력 >> ')))
elif i == 3 :
scores.append(int(input('수학점수입력 >> ')))
print(scores)
다만 너무 길어지기 때문에 더 단축시키는 방법을 찾아보자.
[ 방법 2 ]
scores = []
subjects = ['국어', '영어', '수학']
for i in range(len(subjects)) : # 그냥 subjects 써도 됨
scores.append(int(input(f"{subjects[i]}점수입력 >> ")))
total = 0
for i in scores :
total += i # total = total + i
print(f'총점 : {total}점')
print(f'평균 : {total / len(scores)}점')
예제3
사용자에게 정수를 입력받고, 1부터 해당 정수까지 옆으로 출력하기, 역순으로도 출력
입력예시
정수입력 >> 5
출력예시
1 2 3 4 5
5 4 3 2 1
[ 방법 1 ]
num = int(input('정수입력 >> '))
# i 0 1 2 3 ... num-1
# 출력대상 1 2 3 4 ... num
for i in range(num) :
print(i + 1, end = ' ')
print()
# i 0 1 2 ... num-2 num-1
# num-i num num-1 num-2 ... 2 1
for i in range(num) :
print(num - i, end = ' ')
예제4
사용자에게 단을 입력받고, 구구단을 출력하기
입력예시
몇단 >> 5
출력예시
---5단---
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
[ 방법 1 ]
num = int(input('몇단 >> '))
print(f'----{num}단----')
for i in range(1, 10) :
print(f'{num} X {i} = {num*i}')
예제5
사용자에게 정수를 입력받고 1부터 해당 정수 사이의 짝수만 출력하기
입력예시
정수 >> 15
출력예시
2 4 6 8 10 12 14
[ 방법 1 ]
num = int(input('정수 >> '))
for i in range(1, num + 1) :
if i % 2 != 0 :
continue
print(i, end = ' ')
# i 1 2 3 4
# i%2 != 0 T F T F
# continue O X O X
# 출력 O O
[ 방법 2 ]
for i in range(1, num + 1) :
if i % 2 == 0 :
print(i, end = ' ')
예제6
사용자에게 띄어쓰기로 숫자를 입력받는다.
그 후 최댓값과 최솟값을 출력하시오
입력예시
숫자들 입력 >> 15 26 4 10 2
출력예시
최댓값 : 26
최솟값 : 2
[ 방법 1 ]
※ 반복문을 사용하지 않았다
nums = list(map(int, input('숫자들 압력 >> ').split()))
nums.sort()
print(f'최댓값 : {nums[-1]}')
print(f'최솟값 : {nums[0]}')
[ 방법 2 ]
nums = list(map(int, input('숫자들 압력 >> ').split()))
maxNum = nums[0]
for num in nums[1:] :
if maxNum < num :
maxNum = num
print(f'결과 : {maxNum}')
minNum = nums[0]
for num in nums[1:] :
if minNum > num :
minNum = num
print(f'최솟값 : {minNum}')
예제7
사용자에게 숫자를 입력받고 자릿수 출력하기
(일의자리부터 최대 십만자리까지만 입력된다)
입력예시
숫자 입력 >> 86322
출력예시
만의자리 : 8
천의자리 : 6
백의자리 : 3
십의자리 : 2
일의자리 : 2
[ 방법 1 ]
num = input('숫자입력 >> ') # '86322'
location = ['십만', '만', '천', '백', '십', '일']
# 1자릿수 숫자라면 시작은 5
# 4자릿수 숫자라면 시작은 2
# 5자릿수 숫자라면 시작은 1
# 6자릿수 숫자라면 시작은 0
idx = 6 - len(num)
# idx 0 1 2
# i '8' '9' '4'
for i in num :
print(f'{location[idx]}의자리 : {i}')
idx += 1 # idx = idx + 1
3. 컴프리헨션
리스트나 딕셔너리를 쉽게 만들 수 있는 방법
- 리스트 컴프리헨션
- 딕셔너리 컴프리헨션
# 리스트 컴프리헨션
# 1부터 100까지 100개의 요소가 들어있는 리스트
li = []
for i in range(1, 101) :
li.append(i)
print(li)
> [ 1, 2, 3, ..., 100 ]
li = [i for i in range(1, 101)]
print(li)
> [ 1, 2, 3, ..., 100 ]
li = [i*i for i in range(1,101)]
print(li)
> [1, 4, 9, 16, ..., 10000 ]
li = [i for i in range(100) if i % 3 == 0]
print(li)
li = []
for i in range(100) :
if i % 3 == 0 :
li.append(i)
print(li)
> [0, 3, 9, ..., 99 ]
> [0, 3, 9, ..., 99 ]
# 딕셔너리 컴프리헨션
myDict = {}
for i in '안녕하세요' :
myDict[i] = 10
print(myDict)
> { '안' : 10, '녕' : 10, '하' : 10, '세' : 10, '요' : 10 }
myDict = {i : 10 for i in '안녕하세요'}
print(myDict)
> {'안': 10, '녕': 10, '하': 10, '세': 10, '요': 10}
myDict2 = {i : j for i in '안녕하세요' for j in '반갑습니다'}
print(myDict2)
myDict = {}
for a in '안녕하세요':
for b in '반갑습니다':
myDict[a] = b
print(myDict)
> {'안': '다', '녕': '다', '하': '다', '세': '다', '요': '다'}
> {'안': '다', '녕': '다', '하': '다', '세': '다', '요': '다'}
a = '안녕하세요'
b = '반갑습니다'
myDict = {a[i] : b[i] for i in range(5)}
print(myDict)
> {'안': '반', '녕': '갑', '하': '습', '세': '니', '요': '다'}
4 . 이중 for문
for문 안에 for문이 들어있는 형태
해석은 for문 해석 그대로 해석한다
print('시작')
for i in range(3):
print('for문시작')
for j in range(2):
print(f'i:{i} j:{j}')
print('안쪽for문')
print('for문 끝!')
print('끝')
> 시작
for문시작
i:0 j:0
안쪽for문
i:0 j:1
안쪽for문
for문 끝!
for문시작
i:1 j:0
안쪽for문
i:1 j:1
안쪽for문
for문 끝!
for문시작
i:2 j:0
안쪽for문
i:2 j:1
안쪽for문
for문 끝!
끝
scores = [
#0 1 2
[80, 70, 60], #0
[10, 20, 30], #1
[90, 80, 90] #2
]
for i in range(3):
print(scores[i])
for j in range(3):
print(scores[i][j])
> [80, 70, 60]
80
70
60
[10, 20, 30]
10
20
30
[90, 80, 90]
90
80
90
# 구구단 1단부터 9단까지 출력하기
for dan in range(1, 10):
print(f'----{dan}단----')
for i in range(1, 10):
print(f'{dan} X {i} = {dan * i}')
> ----1단----
1 X 1 = 1
1 X 2 = 2
1 X 3 = 3
...
1 X 9 = 9
----2단----
2 X 1 = 2
2 X 2 = 4
...
----9단----
9 X 1 = 9
9 X 2 = 18
...
9 X 9 = 81
☑️ 구구단 3단씩 출력
---1단--- ---2단--- ---3단---
1 X 1 = 1 2 X 1 = 2 3 X 1 = 3
....
---4단--- ---5단--- ---6단---
.....
---7단--- ---8단--- ---9단---
5. while문
while문 바깥
while 조건식:
반복할코드
...
while문 바깥코드
while문을 만나면
1. 조건식을 확인한다
1-1. 조건식이 만약 True라면 while문 안쪽 코드를 실행하고,
while문이 끝나면 다시 조건식을 확인한다.(1 반복)
1-2. 조건식이 만약 False라면 while문 안쪽으로 들어가지 않는다.(반복종료)
i = 0
while i < 5:
print('배상엽')
i += 1 # i = i + 1
print('while문 바깥')
> 배상엽
배상엽
배상엽
배상엽
배상엽
while문 바깥
while True:
num = int(input('입력 >> '))
if num == 5:
break # 반복을 즉시 종료
print('while문 안쪽')
print('while문 바깥')
> 입력 >> 1
while문 안쪽
입력 >> 2
while문 안쪽
입력 >> 4
while문 안쪽
입력 >> 3
while문 안쪽
입력 >> 5
while문 바깥
☑️로또번호 추첨기
랜덤으로 6개의 숫자를 받아온다(번위는 1이상 20이하)
6개의 숫자를 오름차순으로 정렬하여 보여주기(단 중복된 숫자는 존재하면 안된다.
'AI인공지능 by Python > 1. 기초문법' 카테고리의 다른 글
| [ AI 인공지능 ] ⑨ 클래스 (0) | 2023.02.08 |
|---|---|
| [ AI 인공지능 ] ⑧ 함수 (0) | 2023.02.07 |
| [ AI 인공지능 ] ⑥ 조건문 (0) | 2023.02.01 |
| [ AI 인공지능 ] ⑤ 반복가능객체 (0) | 2023.01.31 |
| [ AI 인공지능 ] ④ 문자열 (0) | 2023.01.26 |