만약 if
그렇지않으면 else
if문 구조
if 조건부분: # 불린 값
수행 부분
while 다운로드 안 받은 이미지가 있다: # 콜론
다음 이미지를 본다 # 들여쓰기
if 이미지가 png 파일이다: # 콜론
이미지를 다운로드 받는다 # 들여쓰기
else: #콜론
print("png가 아닙니다!") # 들여쓰기
temperature = 16
if temperature <= 10:
print("자켓을 입는다.")
else:
print("자켓을 입지 않는다.")
실습과제
학생들에게 최종 성적을 알려 주는 '학점 계산기'를 만들려고 합니다.
이 수업에는 50점 만점의 중간고사와 50점 만점의 기말고사가 있는데요. 두 시험의 점수를 합해서 최종 성적을 내는 방식입니다. 규칙은 다음과 같습니다.
A: 90점 이상
B: 80점 이상 90점 미만
C: 70점 이상 80점 미만
D: 60점 이상 70점 미만
F: 60점 미만
print_grade 함수는 파라미터로 중간고사 점수 midterm_score와 기말고사 점수 final_score를 받고, 최종 성적을 출력합니다.
def print_grade(midterm_score, final_score):
total = midterm_score + final_score
# 코드를 쓰세요.
# 테스트
print_grade(40, 45)
print_grade(20, 35)
print_grade(30, 32)
print_grade(50, 45)
B
F
D
A
과제 해설
만약 경우의 수가 2개라면 그냥 if문과 else문을 사용하면 되는데요. 지금은 경우의 수가 다섯 개(A, B, C, D, F)입니다. 그러면 elif문까지 사용해야겠죠.
어렵지 않은 문제이니 바로 답을 공개하겠습니다.
모범 답안
def print_grade(midterm_score, final_score):
total = midterm_score + final_score
if total >= 90:
print("A")
elif total >= 80:
print("B")
elif total >= 70:
print("C")
elif total >= 60:
print("D")
else:
print("F")
# 테스트
print_grade(40, 45)
print_grade(20, 35)
print_grade(30, 32)
print_grade(50, 45)
B를 받기 위해서는 총 점수가 '80점 이상이면서 90점 미만'이어야 하는데요. 위에 작성된 조건을 보면 80 <= total < 90이 아니라 그냥 total >= 80입니다. 왜 그런 걸까요?
elif문으로 넘어 왔다는 것은 앞선 if문의 조건 부분을 통과하지 않았다는 뜻입니다. 그러니까 점수가 90점 미만일 수밖에 없다는 거죠.
실습과제
while문과 if문을 활용하여, 100 이하의 자연수 중 8의 배수이지만 12의 배수는 아닌 것을 모두 출력하세요.
예를 들어서 16은 8의 배수이지만 12의 배수가 아니니까 조건에 부합합니다. 하지만 48은 8의 배수이면서 12의 배수이기도 해서 조건에 부합하지 않습니다.
실행하면 콘솔에 아래와 같이 출력되어야 합니다.
8
16
32
40
56
64
80
88
i = 1
while i <= 100:
if i % 8 == 0 and i % 12 != 0:
print(i)
i += 1
실습문제
10보다 작은 2 또는 3의 배수는 2, 3, 4, 6, 8, 9이며, 이들의 합은 32입니다.
while문과 if문을 활용하여, 1,000보다 작은 자연수 중 2 또는 3의 배수의 합을 출력하는 프로그램을 써 보세요.
333167
문제 단순화하기
먼저 '2 또는 3의 배수'라는 조건은 무시하고, 그냥 10보다 작은 자연수의 합을 출력하는 프로그램을 작성해 봅시다.
10보다 작은 자연수의 합을 출력하는 프로그램을 쓰기 위해서는 누적된 합을 보관하는 변수가 필요한데요. 우리는 그 변수를 total이라고 하겠습니다. 그러면 이렇게 작성할 수 있습니다.
i = 1
total = 0
while i < 10:
total += i # total = total + i와 동일
i += 1 # i = i + 1과 동일
print(total)
45
반복문을 돌면서 매번 total에 i를 더해 주면 되는 거죠. 그리고 반복문이 끝나면 총 누적된 합인 total을 출력하면 됩니다.
만약 1,000보다 작은 자연수의 합을 출력하려면, 위 코드에서 10을 1000으로 바꿔 주기만 하면 되겠죠?
조건 추가하기
이제 위 코드에서 한 줄만 추가하면 되는데요. total += 1을 매번 하는 게 아니라, i가 '2 또는 3의 배수'라는 조건을 부합할 때만 부르는 것입니다.
2 또는 3의 배수인지 판단하기 위해서는, 2 또는 3으로 나누어 떨어지는지 확인해야 합니다. 어떤 수가 2 또는 3으로 나누어 떨어진다는 것은, 2 또는 3으로 나누었을 때 나머지가 0이라는 의미입니다.
i라는 변수가 2로 나누어 떨어지는지 확인하는 코드는 i % 2 == 0입니다. i라는 변수가 3으로 나누어 떨어지는지 확인하는 코드는 i % 3 == 0입니다. 그렇다면 i가 2 또는 3으로 나누어 떨어지는지 확인하는 코드는?
그냥 불린 연산 or을 사용해서 i % 2 == 0 or i % 3 == 0입니다.
모범 답안
i = 1
total = 0
while i < 1000:
if i % 2 == 0 or i % 3 == 0:
total += i
i += 1
print(total)
참고로 i += 1은 if문 밖에 있어야 합니다. 그렇지 않으면 끝이 안 나는 "무한 루프"에 빠지게 됩니다. 주의해 주세요!
'교육 > [Codeit] 프로그래밍 기초 in Python' 카테고리의 다른 글
피보나치 수열(Fibonacci Sequence) (0) | 2020.11.13 |
---|---|
실습문제 약수찾기, 이자 구하기 (0) | 2020.11.11 |
while 반복문 (0) | 2020.11.10 |
거스름돈 계산기 (0) | 2020.11.10 |
짝수? 홀수? 실습과제 (0) | 2020.11.10 |