어떤 조건에 따라 실행이 분기 되는 식
- A if 조건식 else B >> 조건식의 결과가 True이면 A실행, 그렇지 않으면 B실행
if 조건식: (★콜론쓰기 중요)
(★들여쓰기 중요)실행문
-if 조건식이 참이면 실행문을 실행시키고 거짓이면 실행되지 않는다.
- 들여쓰기된 실행문을 코드블럭이라고 한다.
조건식 결과에 따라 둘 중에 하나가 실행됨
조건식이 참일 경우와 거짓일 경우 모두 처리할 수 있다.
if 조건문:
(들여쓰기)실행문
else:
(들여쓰기)실행문
#나이가 65세 이상이면 교통요금 무료를 적용하는 프로그램을 만들어보자
age = int(input('나이:'))
if age >= 65:
print("교통요금 무료")
else:
print("교통요금 유료")
#실행결과
나이:24
교통요금 유료
- 아직 실행문이 결정되지 않았을때 사용( (나중에 코딩하겠음)
- 조건문에서 아무 일도 하지 않게 설정 하고싶을때 사용
if 조건문:
pass
else:
pass
조건식 결과에 따른 실행만 하는 경우 (19. 조건식 6열)
조건식 결과를 변수에 할당하는 경우 (19. 조건식 4,5열)
조건식 >> if ~ else문 : 모든 조건식은 if ~ else문으로 변경할 수 있다.
But, 모든 if ~ else문을 조건식으로 변경할 수 있는 것은 아니다.
다시 말해, 조건식은 간단한(1개)조건 일때 쓰고 2개 이상은 if~else문
여러 가지 조건식 결과에 따라 실행문이 결정됨
- 조건식 순서 중요 (조건이 만족 될때까지 위에서 순차적으로 내려오기때문)
- 조건 범위를 정확하게 명시
조건문 안에 또 다른 조건문이 있을 수 있다.
특정 실행을 반복하는 것 (ex. 대량 메일 및 문자 발송, 구구단 등)
반복문을 사용하면 프로그래밍이 간결하고 유지 보수가 쉽고 효율적
횟수에 의한 반복 : 횟수 만큼 반복 실행함
조건에 의한 반복 : 조건에 만족할때까지 반복 실행함
정해 놓은 반복 횟수에 따라 반복 실행함
반복 횟수를 정해 놓았는가!
for 변수 in 객체:
(들여쓰기)반복코드1
(들여쓰기)반복코드2
.......
변수는 반복문을 수행할 때마다 갱신되는 변수디.
쉽게 말하면
for 가져온것 in 가져올것들: #가져올때마다할행동들
for 변수 in (키워드 반복 횟수)
ex. for i in {range(A) or range(0, A)} -> 0부터 A-1 만큼 반복
범위는 반복문을 수행할 횟수를 결정하는 범위
실행문에 pass 가능, 들여쓰기(코드블럭) 필수
#2단 구구단 코드를 작성해보자
for i in range(10):
print('2 x {} = {}'.format(i,(2*i)))
#숫자를 받아서 구구단이 작성되도록 해보자
a = int(input('숫자를 입력하세요.:'))
for num in range(10):
print('{} x {} = {}'.format(a,num,(a*num)))
for i in range(A, B, C):
A부터 B-1까지 C씩 증가 (A:시작 B:끝 C:단계)
단계가 1인경우 -> C 생략 가능
시작이 0인경우 -> A 생략 가능
조건에 만족하면(조건식이 True이면) 반복 실행한다. 그렇지 않으면 반복을 중단한다.
- 종료 조건을 정해 놓았는가!
- 이러이러할 때까지, 어디까지 시행하자 !
(ex. 매일아침 기상알람, 게임반복 실행, 타이머)- 조건식이 True면 무한루프에 빠짐
원리: 가장 처음에 조건 비교를 수행하게 되고, 이후에 loop 내의 코드가 모두 실행된 뒤, 다시 조건 비교를 수행하여 조건을 어긴 경우 반복을 종료하게 됩니다.
초기화
while 조건문:
(들여쓰기)반복코드
(들여쓰기)변화식
............
i=0 // 초기화(변수 선언) while i<10: // 조건문 반복코드 i+=1 // 변화식
#1부터 100까지의 정수 중 2의 배수와 3의 배수를 구분해서 출력하자.
n = 1 #반복을 마치면 1로 초기화됨(반복횟수를 기억할 변수n)
while n < 101:
if n % 2 == 0:
print('{}는 2의 배수이다.'.format(n))
if n % 3 == 0:
print('{}는 3의 배수이다.'.format(n))
n+=1
#실행결과
2는 2의 배수이다.
3는 3의 배수이다.
4는 2의 배수이다.
6는 2의 배수이다.
6는 3의 배수이다.
.
.
99는 3의 배수이다.
100는 2의 배수이다.
횟수에 의한 반복
조건에 의한 반복
->for문은 100번째까지 나오는 반면 while은 조건에 만족하는 정수가 나오면 끝냄
반복문을 빠져나올 수 없는 경우를 뜻함
while문에서 조건식의 결과가 항상 True인 경우(while True: )
조건식에 논리형 데이터를 사용해서 무한 반복 실행할 수 있다.
- 반복문을 수행하는 도중 continue를 만나면 반복문의 처음으로 돌아가게 된다.
- '한 주기의 실행' 을 중지하고 다른 주기로 넘어가도록 함.
<1부터100까지의 수중 짝수만 출력>
// for 문을 이용
for i in range(1,101):
if i%2 != 0:
continue
print(i)
1부터 100까지의 숫자들을 확인 하다가 변수 i가 홀수인 경우에는 그냥 지나쳤으면 좋겠고, 어떠한 작동도 하지 않고 다시 조건식으로 돌아갔으면 좋겠고 이런 느낌이 들때 continue 사용
// while 문을 이용
i = 0
while i<101:
i+=1
if i%2 != 0:
continue
print(i)
주의할 점: 변화식 즉, i+=1 를 반복코드보다 먼저 써야 한다.
그렇지 않으면 i가 홀수일 때 변화식까지 가기도 전에 continue를 만나서 다시 반복문으로 돌아가고, 변화식을 만나지 못 했으니 또 그대로 홀수여서 continue를 만나 다시 반복문으로 돌아가고 무한루프가 지속된다.
else의 실행문은 반복문이 종료된 후 실행된다.
#0부터 100까지 7의 배수를 구하자
cnt = 0
for i in range(1,101):
if i % 7 != 0:
continue
print('{} 는 7의 배수입니다'.format(i))
cnt += 1
else:
print('0부터 100까지 7의 배수는 {} 개 입니다.'.format(cnt))
- 위에서 언급한 Continue 함수와 다르게 반복을 실행하다 break를 만나면 남은 반복문이 있더라도 그냥 종료해버리는 키워드이다. (실행을 중단하고 반복문을 빠져나옴)
- break키워드를 쓰고 반복문을 빠져나와야하니 그다음 실행문은 코드블럭 밖으로 나와 써야 에러가 안난다.
- 주로 무한 루프에서 특정 조건을 만족할 때 종료하는 데 사용
#1부터 100까지 정수를 더할 때, 합계가 100이 넘는 최초의 정수 찾기.
sum = 0
for i in range(100):
sum += i
if sum > 100:
num_wanted = i
break
print(num_wanted)
#실행결과 14
#새끼 강아지 체중이 2.2kg가 넘으면 이유식을 중단하려고 한다. 한번 이유식을 먹을때 체중이 70g 증가한다고 할때,
#예상되는 이유식 중단 날짜를 구하자. (현재 체중은 800g)
recentWeight = 800
date = 0
signal = True
while signal:
date += 1
recentWeight += 70
if recentWeight > 2200:
date_wanted = date
break
print('예상되는 이유식 중단 날짜는: {}'.format(date_wanted),'일')
#실행결과 예상되는 이유식 중단 날짜는: 21 일
반복문안에 또 다른 반복문을 선언한다.
for문과 while문 서로 충첩해서 쓸수 있다.
#for문 안에 for문
>>> for 변수1 in 반복 가능한 객체1:
>>> for 변수2 in 반복 가능한 객체2:
>>> 실행할 코드
>>> for i in range(2, 10):
>>> for j in range(1, 10):
>>> print(f"{i} * {j} = {i * j}")
>>> print()
#while문 안에 while문
>>> while 조건1:
>>> while 조건2:
>>> 실행할 코드
>>> 조건1에 관련된 변수 변경
>>> i = 2
>>> while i < 10:
>>> j = 1
>>> while j < 10:
>>> print(f"{i} * {j} = {i * j}")
>>> j += 1
>>> print()
>>> i += 1
#for 문과 while문 중첩
>>> for 변수 in 반복 가능한 객체:
>>> while 조건:
>>> 실행할 코드
>>> 조건에 관련된 변수 변경
>>> while 조건:
>>> for 변수 in 반복 가능한 객체:
>>> 실행할 코드
>>> 조건에 관련된 변수 변경
#왼쪽으로 기울어진 별 피라미드
n = int(input("floor:"))
for i in range(n):
for j in range(i+1):
print("*",end="")
print()
여러 층이 존재하고 하나의 층에 1개 이상의 별이 있는 걸 볼 수 있다. 다시 말해서, 층을 쌓는 for문 그리고 각 i 에 대해서(각 층에서) 세로 방향으로 나란히 별들을 배치하는 for문이 필요하다.
쉬운 이해를 위해 격자판을 상상해볼수있다. 격자판의 각 격자를 가르키기 위해 우린 두개의 숫자가 필요하다. 예를 들어 격자판의 왼쪽 위 모서리에 해당하는 칸을 (1,1)라고 할 수 있는데, 같은 맥락에서 모든 (i,j)에 대해 별을 그릴 것인지 정하는 작업이 피라미드를 그리는것과 똑같다. 그리고 작업 순서를 각 i와j에 대해 오름차순으로 나열한것이 중첩 반복문인 것이다.
그리고 모든 별들을 배치한다음에 마지막에 다음줄로 이동하기 위해 print()를 꼭 적어줘야 한다.
#오른쪽으로 기울어진 별 피라미드
n = int(input("floor:"))
// 층에 대한 for문
for i in range(n):
// 각 층에서 빈칸과 별들을 배치하는 for문
for j in range(n-i+1):
print(" ",end="")
for j in range(i+1):
print("*",end="")
print()
맨 위층을 분석하고 일반화시키면 편하게 정할 수 있다. 맨 위층은 i=0일때 인데 빈칸이 4개 있고 별이 1개 있으므로 일반적으로 i 일때(i+1층에서) 5-i+1개의 빈칸과 i+1개의 별들이 순서대로 배치 되어있음을 알수있다.
#속이 비어있는 삼각형
n = int(input("floor:"))
for i in range(n):
// 맨 아래층이 아닌경우 빈칸들의 나열+별하나+빈칸들의 나열+별하나로 구성되어있다
if i!=n-1:
for j in range(n-i-1):
print(" ",end="")
print("*",end="")
// i=0일때 range함수 안의 값이 -1이 되면서 별이 두개가 출력되므로 이 경우 별 하나만 출력하고 줄 건너뛰어버린다
if i==0:
print()
continue
else:
for j in range(2*i-1):
print(" ",end="")
print("*",end="")
print()
//맨 아래층의 경우 별들의 나열이다
else:
for j in range(2*n-1):
print("*",end="")
층에 대한 for문과 각 층에서 빈칸들과 별의 개수를 헤아리면서 배치해야 한다. 위에서 말했듯이 i=0일때를 분석하면서, 또 j=0일때를 분석하면서 개수를 분석하고 일반화시키면 된다.
이 문제 같은 경우가 별들 사이에 있는 빈칸의 개수가 홀수개이기 때문에 2*i-1개의 빈칸으로 정해야 하는데 i=0일때 분석할 수 없기 때문에 다른 층들을 봐야한다.