KT AIVLE School/[TIL] AIVLE School 당일 복습

[TIL] [KT AIVLE School] KT 에이블스쿨 6기(DX 트랙) 2주차 1일. 제어문 - if, for, while 문

guoyee94 2024. 9. 10. 00:01
목차
1. if 문
2. for 문

 

힘차게 밝은 에이블스쿨 2주차 첫날.

 

1주차까지는 어찌어찌 넘어왔다만,

2주차부터는 나같은 문돌이를 시험에 들게 하는 내용들이 나온다.

 

그래도 따라가지긴 하는 거 보면,

AICE 떨어지면서 뭐라도 남았나보다. 전화위복일세.

 

여튼 그래서 시작해 보는 TIL(Today I Learned) 포스팅.

 

오늘의 메뉴는 제어문이다.

 

 


 

if 문

 

말 그대로 조건문이다.

 

특정 조건에 맞는 경우에 코드를 실행하고,

아닌 경우에 넘어가거나, 다른 조건을 걸거나 한다.

 

기본형, else형, elif - else형으로 나눌 수 있다.

 

 

  • 기본형 if 문
# 변수 선언
my_score = 73

# 80보다 크거나 같으면 10 더하기
if my_score >= 80:
    my_score +- 10

# 결과 출력
print(my_score)

# 결과
73

 

가장 기초적인 형태. 지정한 조건에 맞지 않으면 아무런 일도 일어나지 않는다.

 

모든 제어문이 그렇지만 콜론(:)들여쓰기에 유의하자

 

# 리스트 만들기
score_list = [75, 80, 70, 95, 90]

# 리스트에 요소가 있으면 출력
if len(score_list) != 0:  ##len(list) == 0이란건 빈 리스트라는 뜻
    print(score_list)

# 또는
if score_list:            ## if는 기본적으로 bool형태로 연산     ## 값이 있으니까 True
    print(score_list)

# 결과
[75, 80, 70, 95, 90]
[75, 80, 70, 95, 90]

 

이런 식으로 뒤에 오는 조건에 대해 bool 연산을 거쳐 자기 블럭을 실행하거나, 생략한다.

 

 

 

 

 

 

  • else형 if 문이름은 내 맘대로 지었다.
# 변수 선언
my_score = 73

# 80보다 크거나 같으면 Pass, 아니면 Fail
if my_score >= 80:
    my_result = 'Pass'

else:
    my_result = 'Fail'

# 결과 출력
print(my_result)

# 결과
Fali

 

if에 해당하지 않는 경우를 모두 else 블럭으로 보낸다.

 

# 리스트 만들기
score_list = [75, 80, 70, 95, 90]

# 우선 pass
if score_list:
    pass        ## 뭐 하지 말고 넘기라는 뜻           
else:
    print('요소 없음')

 

이렇게 pass를 통해 else만 동작시킬 수도 있다.

 

# 입력 받기
my_score = input('점수를 입력하세요:')

# 정수로 변환 : input()으로 받은 값은 무조건 문자열
my_score = int(my_score)  # str --> int

# 입력값 확인
print('점수:', my_score)

# 조건처리
if my_score >= 80:
    print('합격')

else:
    print('불합격')

 

이렇게, 사용자로부터 입력받는 함수 input()도 같이 배웠다.

 

오늘부터 시작된 코딩마스터스에서는 sys.stdin.readline()로 받아야 하더라.

 

이걸로 고생 좀 했는데, 아직 둘이 뭐가 다른지는 잘 모르겠다(...)

 

 

 

 

 

  • elif - else형 if 문
# 변수 선언
my_score = 76

# 점수에 따른 학점 주기
if my_score >= 90:
    my_grade = 'A'
elif my_score >= 80:
    my_grade = 'B'
elif my_score >= 70:
    my_grade = 'C'
elif my_score >= 60:
    my_grade = 'D'
else:
    my_grade = 'F'

# 결과 출력
print(my_grade)
C

 

이런 방식으로 여러 조건에 걸친 연산을 진행해 준다.

 

다만 조건이 너무 많으니 다소 난잡한 감이 있는데,

오늘 풀었던 코딩마스터스에서 비슷한 사례를 다르게 해결하는 법을 익혔다.

 

# 입력받은 점수가 10 ~ 15일 때만 A ~ F로 변환해야 하는 상황

# 조건에 맞는 딕셔너리 생성
hex_trans = {
        10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'
    }

# .get() 메서드를 이용해 알파벳으로 변환 
r = hex_trans.get(r, r)    # (r, r) : r이 키 중에 있으면 해당 밸류로 바꾸고, 아니면 r 유지

 

 

그런데 쓰고 보니 첫 예제는 1대 1 대응이 아니라 범주구나.

 

신나게 코드 쓰다가 딕셔너리 작성할 때가 돼서야 깨달았다. 반성.

 

하지만 1대 1 대응일 때는 확실히 딕셔너리와 .get() 메서드를 활용하는 것이 더 효과적인 듯하다.

 

한편 or을 통해 여러 조건을 한 줄로 처리할 수도 있다.

 

# elif를 활용할 때
score1 = 60
score2 = 100
score3 = 76

socre_avg = (score1 + score2 + score3) / 3
if score1 <= 60:
    print('Fail')
elif score2 <= 60:
    print('Fail')
elif score3 <= 60:
    print('Fail')
elif score_avg <= 70:
    print('Fail')
else:
    print('Pass')
    
# or을 활용할 때
if (score1 <= 60) or (score2 <= 60) or (score3 <= 60) or (score_avg <= 70):
    print('Fail')
else:
    print('Pass')

 

물론 이건 여러 조건이 같은 동작을 실행할 때만 가능하겠지.

 

or 대신 |을 활용할 수도 있지만, 연산자이기 때문에 괄호 처리를 신경써줘야 한다.

 

 

 


 

for 문

 

반복문이다.

 

나의 비루한 경험에 비추어봤을 때 가장 활용도가 높은 녀석이다.

 

보통 i나 x로 나타내는 반복자(맞는 표현인가?)와

 

iterable한 자료형(range(), str, list, dict 등)을 취하는 범위를 지정해주어야 한다.

 

이런 식이지.

# 범위가 str
for i in 'PYTHON':
    print(i, end="")

PYTHON

# 범위가 list
for i in [0, 1, 2, 3, 4]:
    print(i)
    
0
1
2
3
4

 

아주 다양한 곳에서 쓰이지만

쉽게 보이는 방식은 빈 리스트에 값을 하나씩 누적시키는 것이다.

# 0~19 범위 생성
nums = range(20)

# 빈 리스트 생성
new_nums = []

# 0~19 중 짝수인 것을 new_nums에 추가
for x in nums:
    if x % 2 == 0:
        new_nums.append(x)

print(new_nums)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

이런 방식.

 

실습에서는 if문과 for문을 활용하여 요일에 따라 아이스크림 가격을 다르게(정상가, 할인가) 표기하라는 문제가 나왔다.

 

  • 과제1
    • 아이스크림 이름을 키, [정가, 할인가]를 값으로 갖는 딕셔너리 icecream을 생성하세요.
  • 과제2
    • 변수 today에 요일을 대입해(예: today = '일')
    • 주말(토, 일)이면, 아이스크림 이름과 할인가를 출력하세요.
    • 평일이면, 아이스크림 이름과 정가를 출력하세요.
# 과제1
icecream = {
    '메로나': [400, 380],
    '비비빅': [400, 350],
    '탱크보이': [500, 450],
    '월드콘' : [1000, 900]
}

# 과제2
today = '월'

for item, price in icecream.items():
    if (today == '토') | (today == '일'):
        print(f'{item}: {price[1]:,}원')      
    else:
        print(f'{item}: {price[0]:,}원')

 

 

코딩마스터스 한다고 시간을 좀 보냈더니 생각보다 시간이 부족하다.목차 링크 걸 시간도 없다니

 

내일은 조금 더 일찍 시작해봐야겠다.