데이터 분석 TIL - 조건문, 반복문, while + MySQL cast

테리·2025년 10월 27일
post-thumbnail

1. 학습 키워드

MySQL: cast
파이썬: 조건문, 반복문, while

2. 학습 내용

MySQL cast 사용 타입변환

cast (값 as 타입변환) 형식으로 사용함
타입변환 종류

  • BINARY: 값을 binary로 변환
  • CHAR: 값을 문자열로 변환
  • DATE: 값을 yyyy-mm-dd의 date로 변환
  • DATETIME: 값을 yyy-mm-dd hh:mm:ss 의 datetime으로 변환
  • TIME: 값을 hh:mm:ss의 time으로 변환
  • DECIMAL: 값을 최대자릿수인(M), 소수점 이하 자릿수(D)로 지정하여 decimal로 변환
select cast(first_login_date as char) as str_type
from basic.users

파이썬

조건문

  • 조건이 참일경우 특정 코드블록을 실행하도록 함.
  • if, elif, else 구조
  • 들여쓰기의 일관성이 중요함.

연산자

비교 연산자

  • > : 초과
  • < : 미만
  • >= : 이상
  • <= : 이하
  • == : 같음
  • != : 같지 않음

논리 연산자

  • and : 모두 참일 때 참
  • or : 하나 이상이 참일 때 참
  • not : 조건을 부정
ex) 두개 동일한 조건
if not (x == 5):
    print("x는 5와 같지 않습니다.")

if x != 5:
	pass

조건문 한줄로 표현

x = 10
result = "양의 짝수" if x > 0 and x % 2 == 0 else "음수 또는 0"
print(result)

반복문 - for

range() 함수와 함께 사용하기

range(): 연속된 정수를 생성하는 내장 함수

range(5): 0부터 4까지
range(start, stop): start부터 stop-1까지
range(start, stop, step)

print문에서 end와 내가 적고 싶은 것을 적어주면 출력한 뒤에 해당 문구를 출력함.

# 0부터 시작하여 5 이전까지의 정수 시퀀스 생성
for i in range(5):
    print(i, end=' ')
# 출력: 0 1 2 3 4

딕셔너리 순회

person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
    print(key, " : ", value)

range() 역방향으로 사용해서 역삼각형 만들기

  • 5부터 시작해서 1까지 1씩 감소
size = 5
for i in range(size, 0, -1):
    for j in range(i):
        print("*", end="")
    print()

반복문 - while

특정 조건이 참(True)일 때에만 실행되며 조건이 거짓(False)이 될 때까지 무한 반복된다.

사용자 한테 입력을 받아 중단시킬 수 있음.

user_input = ''
while user_input != 'quit':
    user_input = input("Type 'quit' to exit: ")
    print("You typed:", user_input)

반복을 끝내는 장치 break

# 사용자가 'quit'을 입력할 때까지 반복하여 숫자를 입력받고 합을 출력
total = 0
while True:
    num = input("숫자를 입력하세요 (종료하려면 'quit' 입력): ")
    if num == 'quit':
        break
    total += int(num)

print("합:", total)

pass

아무런 동작을 하지 않고 다음 반복문 진행. if 다음에 또 다른 처리할게 있으면 처리함.

# 홀수를 출력하는 코드에서 짝수일 경우에는 아무 작업도 수행하지 않고 넘어감
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        pass
    else:
        print(num, "은 홀수입니다.")

continue

continue에 걸리면 바로 반복문으로 다시 올라감.
pass 사용하면 숫자 출력 전부 다됨.

# 1부터 10까지의 숫자 중 짝수를 출력
num = 0
while num < 10:
    num += 1
    if num % 2 == 1:
        continue
    print(num)

함수

특정한 기능을 수행하기 위해 코드를 논리적으로 그룹화하여 재사용 가능한 형태로 만든 것.

함수 정의

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수 내부에서 수행할 작업
    return 결과값  # (선택적) 함수의 결과를 반환

함수 호출

결과 = 함수이름(인수1, 인수2, ...)

문자의 출현 빈도를 구하는 함수

if 조건문에서 in을 사용하면 있으면 참(True)

def char_frequency(string):
    freq_dict = {}
    for char in string:
        if char in freq_dict:
            freq_dict[char] += 1
        else:
            freq_dict[char] = 1
    return freq_dict

# 함수 호출
print(char_frequency("hello"))  # 출력: {'h': 1, 'e': 1, 'l': 2, 'o': 1}

함수 심화

전역변수와 지역변수

전역변수
프로그램 전체에서 접근 가능한 변수

지역변수
특정한 범위(예: 함수 내부)에서만 접근 가능한 변수. 함수 내부에서 정의된 변수.

함수 내부에서 전역변수를 수정할 수 있다.
global 키워드를 사용

# 전역변수 예시
global_var = 10

# 지역변수 예시
def local_example():
    local_var = 20
    print("지역변수 접근:", local_var)
    
def modify_global():
    global global_var
    global_var = 30
    print("함수 내에서 수정된 전역변수:", global_var)

매개변수(Parameter)와 인수(Argument)

매개변수: 함수를 정의할 때 함수가 받아들이는 값
인수: 함수를 사용할 때 함수에 전달되는 값

위치인수, 키워드 인수

위치에 맞춰 인수를 넣거나 키워드로 인수를 넣을 수 있다.
ex)
game('철수', 30) # 위치인수
game(name='철수', age=30) # 키워드 인수

기본값 설정

ex)
def game(name='철수', age='30):
	print(name)
    
game()

가변인수

args: 매개변수에 여러개의 값을 넣어 함수를 돌리고 싶을때

def sum_values(*args):
    total = 0
    for num in args:
        total += num
    return total

result = sum_values(1, 2, 3, 4, 5)
print("합계:", result)  # 출력: 합계: 15

*kwargs: 키워드와 값을 짝지어 넣어줄때 여러개의 키워드, 값을 넣어줄때 사용함.

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, country="USA")

3. 배운점

  1. MySQL에서 cast 사용법에 대해서 알 수 있었고 주로 int와 char을 사용한다.
  2. pass와 continue에 대해서 예전에 학습을 했다가 continue는 거의 사용을 안해서 잊어버리고 있었는데 다시 한번 상기시킬 수 있었다. continue는 밑에 실행할 것이 있더라도 바로 최상위 반복문으로 올라간다.
  3. 함수 사용시 args와 *kwargs를 잘 사용하지 않아서 뭔가 볼때마다 새롭긴 하다. 최대한 기억할 수 있도록 노력해보자.

0개의 댓글