DATA ANALYSIS/TIL

[Day6] Python 기초(4)

yel1nk 2023. 5. 3. 00:25

조건문

age = 19

# 삼항 연산자 : 참일 때의 값 / i / 조건식 / else / 거짓일 때의 값
is_adult = '성인입니다.' if age > 20 else '미성년자입니다.'
print(is_adult)
my_list = ['i','like','to','study','python']
new_list = []

i = len(my_list)
if i == 5:
  new_list.append(my_list[::2])   # 1. [['i','to','python']]
# new_list.append(my_list[0:2])   # 6. [['i', 'like']]
# new_list.extend(my_list[::2])   # 3. ['i','to','python']
print(new_list)
# 숫자를 입력했을때 짝수와 홀수를 구분하는 if문
number = input("정수 입력 > ")
last_character = number[-1] 

if last_character in "02468":
    print("짝수입니다")
if last_character in "13579":
    print("홀수입니다.")

태어난 연도를 입력받아 생애주기 받기 2023년 6월 28일 부터 만나이로 변경이 되면서 나이에 혼선이 생기고 있는 가운데 정부 연령기준에 맞춰 자신이 어떤 나이대 인지 찾아보자. (https://www.gosims.go.kr/hh/hh001/retrieveLfcySearch.do)
정부기준으로 영유아는 0-5 / 아동은 6-12 / 청소년 13-18 / 청년 19-29 / 중년 30-49 / 장년 50-64 / 노년 65세 이상 / 연령대 무관으로 나눈다. 태어난 연도를 입력 받아서 만나이 적용 날짜를 산출한다. if문을 통해 어떤 종류의 생애주기 인지를 출력한다.

import datetime
from datetime import timedelta, timezone

year = int(input("태어난 연도를 입력하세요"))
month = int(input("태어난 월을 입력하세요"))
day = int(input("태어난 일을 입력하세요"))
birthday = datetime.date(year, month, day)

# 만나이 적용일자
d_day = datetime.date(2023, 6, 28)

# 만나이 계산
age = d_day.year - birthday.year - ((d_day.month, d_day.day) < (birthday.month, birthday.day))

# 결과 출력
print('2023년 6월 28일 기준 만 나이는')
if age >= 0 and age <= 5:
    print(f"{age}살 이므로 영유아 입니다.")
elif age >= 6 and age <= 12:
    print(f"{age}살 이므로 아동 입니다.")
elif age >= 13 and age <= 18:
    print(f"{age}살 이므로 청소년 입니다.")
elif age >= 19 and age <= 29:
    print(f"{age}살 이므로 청년 입니다.")
elif age >= 30 and age <= 49:
     print(f"{age}살 이므로 중년 입니다.")
elif age >= 50 and age <= 64:
    print(f"{age}살 이므로 장년 입니다.")
elif age >= 65:
    print(f"{age}살 이므로 노년 입니다.")  
else:
    print(f"연령대가 제대로 입력이 되지 않아 연령대 무관으로 분류됩니다.")  

반복문

[사용 상황]

  • 월별/분기별/연도별 산출할 게 있을 경우
  • 컬럼별 데이터 검사 및 특이값 이상치 발견
  • Rule Base 최적 상품 추천
  • ML/DL모델을 파라미터를 바꿔서 반복 시행할때
  • 기타 3번 이상 반복 작업 해야하는 반복되는 일들

-> 업무의 최소화, 빠른 퇴근, 나의 체력 안배

for

d = {"key1" : 1000 , "key2" : 2000, "key3" : 3000}
for i in d.keys():     # for i in d:
    print(i)        # key 값
for i in d.values():
    print(i)        # value 값    
for i in d.items():
    print(i)        # 모든 값

for - else

for x in [1, 2, 3, 4]:
    if x % 3 != 0:
        print(x)    # x가 3의 배수가 아니면 출력
    else:
        break          # x가 3의 배수이면 반복문에서 빠져나감
else:
    print("리스트의 원소를 모두 출력했어요")
# 1
# 2
for x in [1, 2, 3, 4]:
    if x % 5 != 0:
        print(x)      # x가 5의 배수가 아니면 출력
    else:
        break          # x가 5의 배수이면 반복문에서 빠져나감
else:
    print("리스트의 원소를 모두 출력했어요")
# 1
# 2
# 3
# 4
# 리스트의 원소를 모두 출력했어요

break / continue

for i in range(10):
    if i == 3:
        break
    if i == 1:
        continue
print(i)     # 반복문 밖에 있음
# 3
for i in range(10):
    if i == 3:
        break
    if i == 1:
        continue
    print(i) # 반복문 안에 있음
# 0 2

지능형 리스트 (리스트 컴프리헨션)

for i in range(2, 10):
    for j in range(1,10):
        print(f'{i} x {j} = {i*j}')

y = [f'{i} x {j} = {i*j}' for i in range(2,10) for j in range(1,10)]
print(y)
def example(i):
    if i % 100 == 0:
        return i
    else:
        return 0

old_list = [100,200,300,101,202,303]
new_list = [example(i) for i in old_list]
# new_list = [i if i % 100 == 0 else 0 for i in old_list] # 삼항 연산자

print(new_list)
# [100, 200, 300, 0, 0, 0]

enumerate

skill = [
        ('고기잡이', 100, 300),
        ('고기팔기', 120, 400),
        ('낚시', 5, 500),
        ('통발', 5, 600),
        ('큰그물', 5, 700)
]

for i,j,z in skill:
    print(i,j,z)
# 고기잡이 100 300
# 고기팔기 120 400
# 낚시 5 500
# 통발 5 600
# 큰그물 5 700

for i, (skillName, skillLevel, skillGrade) in enumerate(skill):
    print(i, skillName, skillLevel, skillGrade)
# 0 고기잡이 100 300
# 1 고기팔기 120 400
# 2 낚시 5 500
# 3 통발 5 600
# 4 큰그물 5 700

for i, j in enumerate(skill, 100):
    print(i, j)
# 100 ('고기잡이', 100, 300)
# 101 ('고기팔기', 120, 400)
# 102 ('낚시', 5, 500)
# 103 ('통발', 5, 600)
# 104 ('큰그물', 5, 700)

while

while - else

countdown = 5
while countdown > 0:
    print(countdown)
    countdown -= 1
    if input() == '중단':  # while 문이 break될 경우 else 블록이 실행되지 않음
        break
else:
    print('발사!')
# 5
# 4
# 3
# 중단
시간 = 0
현재시간 = int(input("시를 입력해주세요"))
종료시간 = 18

if 현재시간 > 종료시간:
    print('수업이 끝났기 때문에 Q&A시간을 가지겠습니다.')
else:
    while True:
        시간 += 1
        현재시간 += 1
        print(f'{시간}시간이 지나 {현재시간}시가 되었습니다.')
        if 현재시간 == 종료시간:
            print('수업 종료시간이 되었기 때문에 Q&A시간을 가지겠습니다.')
            break
# 시를 입력해주세요 15
# 1시간이 지나 16시가 되었습니다.
# 2시간이 지나 17시가 되었습니다.
# 3시간이 지나 18시가 되었습니다.
# 수업 종료시간이 되었기 때문에 Q&A시간을 가지겠습니다.

continue / pass

  • continue의 사전적 의미를 살펴보면 '계속하다'라는 뜻이 있습니다. 파이썬에서 continue문은 반복문이 실행하는 코드 블록의 나머지 부분을 실행하지 않고 다음 반복으로 건너가게 흐름을 조정합니다.
  • pass의 사전적 의미는 '지나치다'라는 뜻이며, 파이썬에서 pass문은 단순히 실행할 코드가 없다는 것을 의미하며 아무런 동작을 하지 않고 다음 코드를 실행합니다.
count_amount= [
    (3, 15000),
    (8, 40000),
    (0, 0),
    (2, 10000)
]

# continue
for count, amount in count_amount:
    if count < 1:
        continue
    print(f'구매개수는 {count}, 구매가격은 {amount}')
# 구매개수는 3, 구매가격은 15000
# 구매개수는 8, 구매가격은 40000
# 구매개수는 2, 구매가격은 10000

# pass
for count, amount in count_amount:
    if count < 1:
        pass
    print(f'구매개수는 {count}, 구매가격은 {amount}')
# 구매개수는 3, 구매가격은 15000
# 구매개수는 8, 구매가격은 40000
# 구매개수는 0, 구매가격은 0
# 구매개수는 2, 구매가격은 10000
  • 1개도 구매하지 않았을 경우 if의 조건이 참(True)이 되어 continue문을 실행합니다. 따라서 나머지 코드블록인 구매개수와 가격을 출력해주는 print문을 실행하지않고 다시 for 반복문의 내부 코드블록 시작부분으로 돌아갑니다.
  • 여기서 continue라고 되어 있는 부분을 pass로 바꾸면 수험번호 0개의 0원도 출력하는 것을 볼 수 있습니다. 반복 중간에 continue를 만나면 다음 반복으로 넘어가지만 pass를 만나면 그 라인만 지나치고 아래 문장을 그대로 실행합니다.
# 맞을 때까지 반복
import random    
i = 0
while i != 3:    # 주사위 숫자가 3이 아닐 때 계속 반복
    i = random.randint(1, 6)    # randint를 사용하여 가상 주사위를 만듬
    print(i)
# 특정 데이터 제거
cust_all = [1,2,1,2,3] 
print(cust_all)

value = 1
while value in cust_all:
    cust_all.remove(value)
print(cust_all)
# [1, 2, 1, 2, 3]
# [2, 2, 3]
# 1~100사이의 숫자를 맞출때까지 반복하는 while문 작성

# 내가 입력한 숫자가 컴퓨터 숫자보다 작으면 "값이 작다"
# 내가 입력한 숫자가 컴퓨터 숫자보다 크면 "값이 크다"
# 답이 맞으면 맞았습니다. 

import random
guess_number = random.randint(1,100)
user_input = int(input("숫자를 입력해서 값을 맞춰보세요"))

while (user_input != guess_number):
    if user_input > guess_number:
        print("숫자가 큽니다.")
    else:
        print("숫자가 작습니다.")
    user_input = int(input("숫자를 입력해서 값을 다시 맞춰보세요"))
else:
    print("정답입니다.")

'DATA ANALYSIS > TIL' 카테고리의 다른 글

[VOD] 같이 푸는 PYTHON [기초]  (0) 2023.05.04
[Day7] Python 기초(5)  (0) 2023.05.04
[Day5] Python 기초(3)  (0) 2023.05.02
[Day4] Python 기초(2)  (0) 2023.04.29
[Day3] Python 기초(1)  (0) 2023.04.28