250714 [ Day 6 ] - Python (3)

TaeHyun·2025년 7월 14일

TIL

목록 보기
6/182

시작하며

교육 2주차의 첫날이다. 이번 주부터는 새로 옮긴 교육장에서 수업이 진행되었고, 지난 시간에 배웠던 input과 split에 대한 복습과 실습으로 수업을 시작했다.

input과 split 실습

# 실습 3. input 연습하기

name = input("이름을 입력하세요 :")
age = input("나이를 입력하세요 :")

print(f"안녕하세요. 저는 {name}이고, {age}살 입니다.")

# 실습 4. 입력과 연산 연습하기

# 4-1. 사용자로부터 가로와 세로를 입력 받아 넓이와 둘레를 계산하세요

width = int(input("가로의 길이를 입력하세요 :"))
length = int(input("세로의 길이를 입력하세요 :"))

extent = width * length
round = (width + length) * 2

print(f"넓이 : {extent}")
print(f"둘레 : {round}")

# 4-2. 네 자릿수 정수를 입력 받고 각 자릿수를 분리하여 출력하세요.

num = int(input("네 자릿수 정수를 입력하세요 :"))

thousand = num // 1000
hundred = (num // 100) - (num // 1000 * 10)
tens = (num // 10) - (num // 100 * 10)
ones = num - (num // 10 * 10)

print(f"천의 자리 : {thousand}")
print(f"백의 자리 : {hundred}")
print(f"십의 자리 : {tens}")
print(f"일의 자리 : {ones}")

# 실습 5. 발표 순서와 발표 주제 정하기

name1, name2, name3 = input("각 조의 발표자 3명의 이름을 입력해주세요(이름은 띄어쓰기로 구분) :").split()
title1, title2, title3 = input("각 조의 발표 주제 3개를 입력해주세요(각 주제는 띄어쓰기로 구분) :").split()

print(f"1조 발표자 : {name1} - 주제 : {title1}")
print(f"2조 발표자 : {name2} - 주제 : {title2}")
print(f"3조 발표자 : {name3} - 주제 : {title3}")

# 실습 6. 날짜와 시간

year, month, day = input("날짜를 연도.월.일로 구분하여 입력해주세요 :").split(".")
hour, minute, second = input("시간을 시:분:초로 구분하여 입력해주세요 :").split(":")

print(f"RE3의 개강일은 {year}{month}{day}일")
print(f"시작 시간은 {hour}{minute}{second}초 입니다.")

실습을 진행하면서 input, split, f-string, 형 변환 등 배웠던 내용들을 계속 사용하며 점점 익숙해지는 느낌이 들었다. 그런데 실습 4-2번처럼 산술 연산을 응용하는 문제에서는 아직 부족한 느낌을 느껴, 산술 연산 응용을 좀 더 많이 연습해봐야겠다고 생각했다.

이터러블, 컬렉션, 시퀀스

리스트를 배우기 전에 먼저 이터러블 (iterable), 컬렉션 (collection), 시퀀스 (sequence)에 대한 개념 정리부터 시작했다.

이터러블 (Iterable)

반복 (iteration)이 가능한 객체의 총칭

  • 컬렉션 (Collection) 및 제너레이터 (Generator)

컬렉션 (Collection) 자료형

  • 여러개의 데이터를 하나의 변수에 묶어서 저장할 수 있는 자료형
  • 데이터의 묶음을 다룰 수 있는 자료형을 총칭하는 용어
  • 반복문 (for) 을 통한 순회
  • 주요 컬렉션 자료형
    • 리스트 (list) : 순서 있음, 중복 허용, 가변
    • 튜플 (tuple) : 순서 있음, 중복 허용, 불변
    • 집합 (set) : 순서 없음, 중복 불허, 가변
    • 딕셔너리 (dict) : 키-값 쌍 저장, 중복 키 불허, 순서 있음

시퀀스 (sequence)

항목이 순서대로 정렬된 데이터의 묶음

컬렉션의 하위개념으로 볼 수 있음(컬렉션 중 순서가 있는 자료형)

시퀀스의 핵심은 순서(인덱스)가 존재

  • 시퀀스의 종류
    • str : 문자들의 시퀀스 (문자열) - 불변
    • list : 요소들의 시퀀스, 다양한 자료형 가능 - 가변
    • tuple : 요소들의 시퀀스 - 불변
    • range : 정수 시퀀스를 생성 (for 루프에서 자주 사용) - 불변

리스트 (list)

리스트 (list)

  • 여러 값들을 순서대로 저장할 수 있는 자료형(시퀀스)
  • 인덱스(index) : 자료에 부여된 순서 번호
    • 인덱스로 각 원소에 접근 가능
  • 가변 자료형(mutable) : 원소의 추가/수정/삭제가 자유로움

리스트 생성

  • 리스트는 [ ] 로 표현하고 ‘ , ’로 구분
리스트1 = ["안녕하세요", "반갑습니다", "어서오세요"]
리스트2 = [10, "10", 10.0, [1,2,3,4]]

# 리스트 생성함수
리스트3 = list()

# 이터러블을 리스트로 변환
리스트4 = list("안녕하세요")

인덱싱 (indexing)

  • 시퀀스 자료형에서 인덱스를 통해 특정 위치의 값을 조회하는 것
    • 인덱스는 0부터 시작
    • 음수 인덱스를 사용하면 뒤에서부터 접근 가능
    • 인덱스를 통한 수정 가능
리스트1 = [10, 20, 30, 40, 50]
print(리스트1[0]) # = 10
print(리스트1[2]) # = 30
print(리스트1[-1]) # 50

# 인덱싱으로 원소에 접급해 값 수정
리스트1[3] = 4
print(리스트1[3]) # = 4
  • 문자열 인덱싱
    • 문자열 또한 인덱싱 가능
    • 문자열은 불변 자료형이기 때문에 수정 불가
리스트1 = "안녕하세요"
print(리스트1[2]) # = 하
print(리스트1[-2]) # = 세

# 문자열은 '불변 자료형'이기 때문에, 수정 불가
# 리스트1[0] = "가" X 불가능

슬라이싱 (slicing)

  • 시퀀스에서 특정 구간을 잘라내서 추출하는 방법
  • 시퀀스[시작:끝:간격] 으로 이루어져 있음
  • 원본은 변경되지 않으며, 새로운 시퀀스를 생성 (필요시 새로운 변수로 저장)

인덱스 번호는 원소를 나타내는 것이 아닌 원소의 앞부분을 나타내는 것

따라서 위의 그림처럼 ‘30’~’60’을 포함시키 위해 [2:6] 으로 표기

  • 슬라이싱 예시
    num = [10,20,30,40,50,60,70,80,90,100]
    
    print(num[1:4]) 
    # [20, 40]
    
    # :의 뒤를 생략하면 끝까지
    print(num[3:])
    # [40, 50, 60, 70, 80, 90, 100]
    
    # :의 앞을 생략하면 처음부터
    print(num[:4])
    # [10, 20, 30, 40]
    
    # 원본은 변경x -> 새로운 시퀀스 생성
    num2 = (num[:4])
    print(num2)
    # [10, 20, 30, 40]
    
    # 간격 설정
    print(num[1:10:2]) #[1::2]로 생략 가능
    # [20, 40, 60, 80, 100]
    
    # 같은 리스트를 복제 (: 앞뒤 모두 생략)
    print(num[:])
    # [10,20,30,40,50,60,70,80,90,100]
    
    # 뒤집어서 복제
    num[::-1]
    # [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]
    
    # 일부 구간 수정하기
    num[2:4] = [300,400]
    print(num)
    # [10,20,300,400,50,60,70,80,90,100]

조건문 (if)

내일 있을 프로젝트를 위해 진도와는 다르지만 조건문을 미리 배우게 되었다.

조건문 (if)

  • 조건에 따라 프로그램의 실행 흐름을 분기시키는 제어문
  • 조건 : 참/거짓을 구분할 수 있는 문장

if + 조건 → 조건이 참이면 실행
조건문은 True/False로 바뀔 수 있을때 사용

# if 조건:
#     print("참이면 실행")

a = int(input())

if a > 10:
    print("a는 10보다 크다")
print("조건문 종료")

# 들여쓰기 에러
if a > 10:
print("a는 10보다 크다")

# 조건문에 실행할 코드를 작성하지 않았을 때
# pass로 해당 조건문을 넘어갈 수 있음
if a > 100:
    pass

  • 콜론 ( : )의 역할 : 코드블록의 시작을 알리는 신호

  • 들여쓰기 (Indentation) : 같은 블록에 속한 코드들을 그룹화 (콜론 다음 줄부터 들여쓰기를 적용한 모든 줄은 동일한 블록에 속함)

조건식의 평가 (Truthy, Falsy)

  • True와 False는 아니지만, True와 False로 간주되는 값
  • Falsy로 간주되는 값
    • False

    • None

    • 숫자 0, 0.0

    • 빈 문자열 “”, 빈 리스트 [], 빈 튜플 (), 빈 딕셔너리 {}

      그 외 값은 모두 True로 간주 됨 (Truthy)

if - else 문

if - else 문

  • 조건이 참일 경우에는 if 문을, 조건이 거짓일 때는 else문을 실행

else : ‘아니라면’의 의미 → 조건 필요 X, 반드시 if 문과 같이 나와야 됨

ex )

num = int(input("숫자를 입력해주세요 :"))

if num % 2 == 0:
	print("짝수입니다.")
else:
	print("홀수입니다.")

if - elif - else 문

if - elif - else 문

  • elif : else if 의 약자 (그게 아니라 만약 ~ 라면)
  • 조건을 반드시 기록
  • if 가 있어야만 사용 가능

ex )

# 90점 이상이면 A
# 80점 이상이면 B
# 70점 이상이면 C
# 60점 이상이면 D
# 그 외에는 F

score = int(input())

if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
elif score >= 60:
    print("D")
else:
    print("F")

if 여러번 / if - elif

  • if 여러번 사용
    • 모든 조건이 각각 독립적으로 검사
    • 여러 조건이 True이면 모두 실행
    • 조건 간에 서로 배타적이지 않거나 중복 가능성이 있을 때 사용
  • if - elif 사용
    • 위에서부터 순차적으로 검사
    • 첫 번째로 True인 조건이 실행되면, 이후 조건은 검사하지 않고 건너뜀
    • 조건들이 서로 배타적(겹치지 않음)일 때 사용

중첩 조건문 (Nested if)

중첩 조건문 (Nested if)

  • 하나의 if 문 안에 또 다른 if 문을 사용하는 것
user_name = input("ID를 입력하세요 :")

if user_name == "admin":
    password = input("비밀번호를 입력하세요 :")
    if password == "abcd":
        print("로그인 성공!")
    else:
        print("잘못된 비밀번호입니다.")
else:
    print("잘못된 계정입니다.")

and를 활용하여 중첩을 단순화 가능

이후에는 조건문을 활용하여 실습 문제를 풀어보았다.

# 실습1. 날씨에 따른 준비물 안내

weather = input("오늘의 날씨를 입력해주세요(비/맑음) :")

if weather == "비":
    print("우산을 챙기세요!")

if weather == "맑음":
    print("선크림을 바르세요!")
# 실습 2. 짝수 홀수 판별하기

num = int(input("숫자(정수)를 입력해주세요 :"))

if num % 2 == 0:
    print("짝수입니다.")
else:
    print("홀수입니다.")
# 실습 3. 나이에 따른 영화 관람 가능 여부

age = int(input("나이를 입력해주세요 :"))

if age <= 12:
    print("전체 관람가")
elif age <= 15:
    print("12세 이상 관람가")
elif age <= 18:
    print("15세 이상 관람가")
else:
    print("청소년 관람불가 가능")
# 실습 4. 시, 분, 초 구하기

num = int(input("초를 입력해주세요 :"))

hour = num // 3600
minute = (num % 3600) // 60
second = num % 60

if num >= 3600:
    print(f"{hour}시간 {minute}{second}초")
elif num >= 60:
    print(f"{minute}{second}초")
else:
    print(f"{second}초")
# 실습 5. 편의점 도시락 구매하기

money = int(input("금액을 입력해주세요 :"))
food = input("식품명을 입력해주세요(김밥 / 삼각김밥 / 도시락) :")

if food == "김밥":
    if money >= 2500:
        print("구매에 성공했습니다!")
    else:
        print("잔액이 부족합니다.")
elif food == "삼각김밥":
    if money >= 1500:
        print("구매에 성공했습니다!")
    else:
        print("잔액이 부족합니다.")
else:
    if money >= 4000:
        print("구매에 성공했습니다!")
    else:
        print("잔액이 부족합니다.")

마치며

진도가 조금 느려서 수업의 템포가 약간 빨랐지만, 오늘 배운 내용들이 꽤 재미있어서 시간이 정말 빨리 지나간 것 같다.
문제를 해결하기 위해 어떻게 코드를 구성할지 고민하는 시간이 꽤나 재밌다고 느껴진 하루였다.

NOTION

MY NOTION (Python. Input)
MY NOTION (Python. If)

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글