250930 TIL

2025. 9. 30. 18:25Courses/아이티윌 오라클 DBA 과정

복습 Quiz

# 문제1) 간단한 계산기 프로그램
""" 
    실행화면   
    3 + 5 = 8   
    3 - 5 = -2
    3 * 5 = 15
    3 / 5 = 0.6   
    3 % 5 = 3   
""" 
a = 3
b = 5
op = ["+", "-", "*", "/", "%"]

for o in op:
    if o == "+":
        print(f"{a} {o} {b} = {a + b}")
    elif o == "-":
        print(f"{a} {o} {b} = {a - b}")
    elif o == "*":
        print(f"{a} {o} {b} = {a * b}")
    elif o == "/":
        print(f"{a} {o} {b} = {a / b}")
    elif o == "%":
        print(f"{a} {o} {b} = {a % b}")

# 문제2) 1~100중에서 짝수의 합, 홀수의 합을 각각 구하시오
even = 0  #짝수의 합
odd = 0   #홀수의 합

for i in range(1, 101, 2):
    odd += i
    even += i + 1

# switch 이론
# -> 짝수/홀수, Yes/No, On/Off, True/False
even = 0
odd = 0
flag = False
i = 1

while i <= 100:
    if flag :
        flag = False
        even += i
    else:
        flag = True
        odd += i
    i += 1

print(f"짝수의 합: {even}")
print(f"홀수의 합: {odd}")

# 문제3) 운행거리에 따라 택시 요금을 계산하는 프로그램
#      2000m까지는 기본요금 900원이고
#      2000m초과 운행시 200m단위마다 기본요금에 100원씩 가산하여 요금을 계산한다
"""
    예1) 운행거리 1600 -> 기본요금 : 900
    예2) 운행거리 3000 -> 1000초과 (기본요금 900 + 추가 500 = 1400)
    예3) 운행거리 2900 ->  900초과 (기본요금 900 + 추가 500 = 1400)
"""
import math

distance = 2900
charge = 900

if distance > 2000:
    diff = distance - 2000
    add = math.ceil(diff / 200) * 100
    charge += add

print(f"택시 요금은 {charge}원입니다")

문자열 처리

# 문자열 관련 함수
str = "Life is too short. You need Python"
print(str)

# 글자 개수
print(len(str)) # 34

print(str.count('i'))       # 2
print(str.count('a'))       # 0
print(str.count('short'))   # 1
print(str.count('nice'))    # 0

print(str[3])   # e
print(str[0])   # L 문자열의 인덱스는 0부터 시작
print(str[-1])  # n -1은 마지막 글자
print(str[-3])  # h

# 특정 글자나 단어가 마지막으로 등장하는 위치 조회
print(str.rfind("i"))       # 5
print(str.rfind("a"))       # -1 찾고자 하는 문자열이 없을 때
print(str.rfind("short"))   # 12
print(str.rfind("nice"))    # -1

# 특정 글자나 단어가 처음 등장하는 위치 조회
print(str.index("short"))   # 12
# print(str.index("nice"))    # 에러 ValueError: substring not found

# 특정 단어나 글자로 시작하는지 여부 검사(True,False)
print(str.startswith("L"))      # True
print(str.startswith("l"))      # False
print(str.startswith("Life"))   # True
print(str.startswith("H"))      # False
print(str.startswith("Hello"))  # False

# 특정 단어나 글자로 끝나는지 여부(True,False)
print(str.endswith("N"))
print(str.endswith("n"))
print(str.endswith("Python"))
print(str.endswith("python"))

print(str.upper())      #전부 대문자로 변경       LIFE IS TOO SHORT. YOU NEED PYTHON
print(str.lower())      #전부 소문자로 변경       life is too short. you need python
print(str.swapcase())   #대소문자 서로 바꿔서     lIFE IS TOO SHORT. yOU NEED pYTHON
print(str.capitalize()) #문장의 첫글자만 대문자로  Life is too short. you need python
print(str.title())      #각 단어의 첫글자 대문자   Life Is Too Short. You Need Python

# 글자 치환 My height is too short. You need Python
print(str.replace("Life", "My height"))

# 공백제거
k = "    py th on  "
print("#" + k.lstrip() + "#")  #py th on  #
print("#" + k.rstrip() + "#")  #    py th on#
print("#" + k.strip() + "#")   #py th on#

# 문제) str변수의 문자열값에서 공백을 모두 제거하시오
print(str.strip().replace(' ', ''))

print(len(" ")) # 1
print(len(""))  # 0

# 문자열의 인덱싱 - 특정 위치의 글자를 추출
print(str[0])   #0번째문자 인덱스(순서)는 0부터 시작
print(str[3])   #3번째문자
print(str[-3])  #문자열 뒤에서 부터 시작
print(str[-1])  #문자열 맨 마지막 글자

# 문자열의 슬라이싱 - 특정 범위의 글자들을 추출
print("#" + str[0:3] + "#") #Lif#  0번째부터 (3-1)까지
print("#" + str[5:7] + "#") #is#
print("#" + str[19:] + "#") #You need Python#    19번째부터 마지막 까지
print("#" + str[:17] + "#") #Life is too short#  0번째부터 (17-1)까지

print("#" + str + "#")        #Life is too short. You need Python#
print("#" + str[:] + "#")     #Life is too short. You need Python#
print("#" + str[19:-7] + "#") #You need#

a = ","
print(a.join("PYTHON"))        #P,Y,T,H,O,N
#########################################################################

# 문제)주민번호에서 문자열 추출
#       출력결과
#       -> 출생년도 : 1989년
#       -> 출생월 : 12월
#       -> 출생일 : 03일
#       -> 성별코드 : 2
jumin = "8912032"
print(f"출생년도 : {('19' if int(jumin[6:]) < 3 else '20') + jumin[:2]}년")
print(f"출생월 : {jumin[2:4]}월")
print(f"출생일 : {jumin[4:6]}일")
print(f"성별코드 : {jumin[6:]}")

# 성별 코드에 따라 성별을 출력하시오
code = int(jumin[6:])
if code == 1 or code == 3:
    print("남자")
elif code == 2 or code == 4:
    print("여자")

컬렉션

  • 연속형 자료형
  • 하나의 변수에 여러 개의 값을 저장하는 형태
  • List, Tuple, Dictionary, Set, DataFrame, Series
  • Element, 요소, 원소
  • Index, 색인, 순서 (대부분 0부터 시작해서 1씩 증가한다)
  • DataFrame + Series 은 pandas 모듈 설치해야 함
    명령프롬프트 > pip install pandas

List

# 1. List
## 1) 1차원 리스트
grade = [90, 85, 73, 64, 100]
print(grade)        # [90, 85, 73, 64, 100]
print(type(grade))  # <class 'list'>

print(grade[0])
print(grade[1])
print(grade[2])
print(grade[3])
print(grade[4])

print(len(grade)) # 5 요소의 개수

for idx in range(len(grade)):
    print(grade[idx])

names = ["홍길동", "무궁화", "개나리", "진달래", "라일락"]
print(names)
print(type(names))

for name in names:
    print(name)

num = [5, 8, -1, 9, -6]
size = len(num)

# 문제 1) 음수의 개수를 구하시요
cntNegative = 0

for n in num:
    if n < 0:
        cntNegative += 1

print(cntNegative)

# 문제 2) 양수 중에서 홀수의 합을 구하시오
sumOfOdd = 0

for n in num:
    if n > 0 and n % 2 == 1:
        sumOfOdd += n

print(sumOfOdd)

# 문제 3) num[4]의 등수를 구하시오
rank = 1

target = num[4]

for n in num:
    if target < n:
        rank += 1

print(f'{target} : {rank}등')
########################################################

## 2) 2차원 리스트
## -> 행(row)과 열(col)로 구성
students = [
    ["joy", 20],
    ["kiara", 30],
    ["tom", 40],
]   # 3행 2열

print(students)         # [['joy', 20], ['kiara', 30], ['tom', 40]]
print(type(students))   # <class 'list'>

# 행 전체
print(students[0])          # ['joy', 20]
print(students[1])          # ['kiara', 30]
print(students[2])          # ['tom', 40]

# 각 요소 값 [행][열]
print(students[0][0])       # joy
print(students[0][1])       # 20

for y in students:
    for x in y:
        print(x)

print(len(students))        # 3 -> 행의 개수
print(len(students[0]))     # 2 -> 0행의 열의 개수
print(len(students[1]))     # 2 -> 1행의 열의 개수
print(len(students[2]))     # 2 -> 2행의 열의 개수

row = len(students)         # 3
for r in range(row):        # 0~2
    col = len(students[r])
    for c in range(col):
        print(students[r][c])

# print(students[3][3])   # 에러 IndexError: list index out of range
# 3행 3열은 존재하지 않음
######################################################################

## 3) 리스트 관련 함수
## -> 리스트의 인덱싱, 슬라이싱

mylist = [10, 20, 30, 40, 50]

for m in mylist:    # for 요소값 in 덩어리
    print(m)

print(mylist[1:3])      # [20, 30]
print(mylist[1:-2])     # [20, 30]

mylist.append(60)       # 맨뒤 요소 추가    
print(mylist)           # [10, 20, 30, 40, 50, 60]

mylist.insert(1, 30)    # 1번째 요소로 30 삽입
print(mylist)           # [10, 30, 20, 30, 40, 50, 60]

print(mylist.count(30)) # 2 30값의 개수

mylist.pop()            # 마지막 요소 삭제
print(mylist)           # [10, 30, 20, 30, 40, 50]

x = mylist.index(30)
print(x)                # 1

mylist.remove(30)  
print(mylist)           # [10, 20, 30, 40, 50]

score = [9, 3, 5, 1, 7]

score.reverse() # 순서 뒤집기
print(score)    # [7, 1, 5, 3, 9]

score.sort()    # 오름차순 정렬 Ascending Sort (1->9, A->Z, a->z, ㄱ->ㅎ)
print(score)    # [1, 3, 5, 7, 9]

score.sort(reverse=True)    # 내림차순 정렬 Descending Sort
print(score)                # [9, 7, 5, 3, 1]

str = "Gone,With,The,Wind"
word = str.split(',')
print(word)         # ['Gone', 'With', 'The', 'Wind']
print(type(word))   # <class 'list'>

for w in word:
    print(w)

Tuple

# 2. Tuple
# 리스트와 기본적으로 동일하지만, 처음 할당한 요소의 값을 수정할 수 없다

grade = (12, 13, 14, 15, 16)
print(grade)    # (12, 13, 14, 15, 16)
print(grade[0]) # 12
# print(grade(0)) # 에러 TypeError: 'tuple' object is not callable

names = ("홍길동", "무궁화", "진달래", "개나리", "라일락")
print(names)

stud1 = ("봉선화", 90)
print(stud1)        # ('봉선화', 90)
print(stud1[0])     # 봉선화
print(stud1[1])     # 90

# stud1[0] = "코리아" # 에러 TypeError: 'tuple' object does not support item assignment

Python Tutorial

https://www.w3schools.com/python/default.asp

Jupyter

설치

pip install jupyter

실행

jupyter notebook

요일 구하기

서기 1년 1월 1일 ~ 2025년 9월 30일 까지의 총 일수: ?????? % 7 구하기
나머지 0 일, 1 월, 2 화, 3 수, 4 목, 5 금, 6 토

# 변수 선언하기
cYear = 2025
cMonth = 9
cDate = 30

hap = 0 # 총 일수

1단계

서기 1년 ~ 2024년
평년이면 += 365
윤년이면 += 366

# 1단계
for year in range(1, cYear):
    if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
        hap += 366
    else:
        hap += 365

print(hap)

2단계

1월 ~ 8월
31일 : 1, 3, 5, 7, 8, 10, 12
30일 : 4, 6, 9, 11
29일 : 2 => 윤년
28일 : 2 => 평년

# 2단계
dal = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (cYear % 4 == 0 and cYear % 100 != 0) or cYear % 400 == 0:
    dal[2] = 29

for month in range(1, cMonth):
    hap += dal[month]

3단계

일수(30) 더하기

# 3단계
hap += cDate    # 739524

요일 구하기

day = ('일', '월', '화', '수', '목', '금', '토')

d = hap % 7    # 2

print(day[d])    # 화

'Courses > 아이티윌 오라클 DBA 과정' 카테고리의 다른 글

251010 TIL  (0) 2025.10.10
251002 TIL  (0) 2025.10.02
251001 TIL  (0) 2025.10.01
250929 TIL  (0) 2025.09.29
250926 TIL  (0) 2025.09.26