[패스트캠퍼스] 데이터 분석 부트캠프 16기 3주차 - Python 제어문/예외처리/함수/변수/클래스

2024. 9. 5. 14:58·데이터 분석 부트캠프/주간학습일지

if : 조건문 (conditional statements)

  • if : 제시한 조건이 True 일 때 실행할 코드 [조건문 첫번째 줄]
  • elif : 제시한 조건이 True 일 때 실행할 코드 [조건문 두번째 줄 이후]
  • else : if, elif 가 모두 False 일 때 실행할 코드 [조건문 마지막 줄]

불린 입력값 사용한 조건문 예시

isTrue = False

if isTrue:
    print("isTrue 는 True입니다.")
else:
    print("isTrue 는 False입니다.")
# isTrue 는 False입니다.

 

비교 연산자 & 논리 연산자 사용한 조건문 예시

if (10 > 1) and (11 == 12):
    print(True)
else:
    print(False)
# False

if + elif + else 예시

import random

blackPink = ["Jennie", "Jisu", "Rosé", "Lisa"]
country = ["New Zealand", "South Korea", "Australia", "Thailand"]
randomInt = random.randint(0, 10)

def trivia(bP, c):
    print(f'{bP} is raised in {c}.')

if randomInt > 5 :
    trivia(blackPink[0],country[0])
    trivia(blackPink[1],country[1])
elif randomInt >= 1 :
    trivia(blackPink[2],country[2])
    trivia(blackPink[3],country[3])
else:
    print(f'{blackPink} are the team.')

# for 45.45%
# Jennie is raised in New Zealand.
# Jisu is raised in South Korea.

# for another 45.45%
# Rosé is raised in Australia.
# Lisa is raised in Thailand.

# for 9.1%
# ['Jennie', 'Jisu', 'Rosé', 'Lisa'] are the team.

조건문에서 False로 간주되는 값

  1. None
  1. 0
  1. '' (빈 문자열)
  1. [] (빈 리스트)
  1. {} (빈 딕셔너리)

 

# example
if  "":
    print("can't be executed")
else:
    print("executed")
# executed

 

while, for : 반복문 (loops)

while loop

# syntax
값 = 1 # 초기값

while 값 <= 10 : # 반복 조건
    print(값) # 반복할 코드
    num += 1 #증감식

# example
num = 1

while은 변수를 제어해야 하기 때문에 for에 비해 덜 자주 사용함

while num <= 10:
    print(num)
    num += 1

# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10

 

infinite while loop

증감조건이 없기 때문에 break가 없음

# infinite loop example
while True:
    print("하", end = '')

for loop

# syntax
for 반복변수 in 반복대상:
    반복할 코드

for y in range(시작,끝):
    print()


for i in range(1, 11):
    print(i)

# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10

# example using strings from Inflearn
for char in "hello":
    print(char)

# h
# e
# l
# l
# o

for loop + var

# syntax
var = [반복변수 for 반복변수 in range(시작, 끝)]

for i in var:
    print(i)


# example with variables from Inflearn
a = [i for i in range(1, 11)]
a

for item in a:
    print(item)

# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10

break

# stop after printing 5

for i in range(1,11):
    if i > 5:
        break
    print(i)

# 1
# 2
# 3
# 4
# 5

continue

# skip 5

for i in range(1,11):
    if i == 5:
        continue
    print(i)

# 1
# 2
# 3
# 4
# 6
# 7
# 8
# 9
# 10
# 1부터 5까지 더하는 프로그램을 만들어 보시오. (1)for, (2) while
# 단, 결과값은 sum 변수에 담으시오.

# (1)
sum = 0
for i in range(6):
    sum += i
    print(sum)

# (2)
sum = 0
i = 0
while i < 5:
    i += 1
    sum += i
    print(sum)
# Q.구구단 전체를 표현하시오. (1단부터 9단까지)

num = 1
ii = 1
for i in range(1,10):
    print(f'''
{i}단:''')
    while ii < 10:
        num = ii * i
        print(num)
        ii += 1
    ii = 1
    num = 1

# 정답
for x in range(1, 10):
    print(f"***{x}단 입니다***")
    for y in range(1, 10):
        print(f"{x} * {y} = {x*y}")
# Q2.유저가 입력한 특정 구구단만 표현하시오. (1단이면 1단, 9단이면 9단)
num = 1
ii = int(input('원하는 구구단, 숫자만'))
print(f'{ii}단:')
for i in range(1,10):
    num = ii * i
    print(num)


# 정답
num = input('숫자룰 입력하세요')
real_num=int(num)

for i in range(1,10):
    print(f"{real_num} x {i} = {real_num*i}")

함수 (functions)

내장 함수 (built-in functions)

print() : 그대로 출력

print("Hello World!")
# Hello World!

Jupyter Notebook에서는 print 함수 없어도 출력됨

"Hello World!"
# 'Hello World!'

 

큰 따옴표 (double quotation), 작은 따옴표 (single quotation) 구분 없음

'Hello World!'
# 'Hello World!'

 

type() : 유형 출력

type("Hello World!")
# str

type(1)
# int

 

      • str(), int(), bool() 등 : 데이터형 변경 함수
      • len() : 데이터의 길이 출력

    외장 함수 (external functions)

    import random
    
    random.randint(1, 10) # 1~10사이의 정수 중 난수값 리턴
    import sys
    
    if sys.version <= 3.9:
        print("업데이트를 하세요.")
    import os
    
    os.getcwd() # 파이썬의 실행 경로 확인 (get current working directory)
    os.mkdir() # 폴더 생성 (make directory)
    import time
    
    time.time() # 시간을 실수 형태로 반환
    time.localtime(time.time()) # 시간을 UTC 기준으로 반환

    def : 정의 함수 (define functions)

    • 특정 기능을 하는 코드를 담는 공간
    • 주로 반복되고 자주 사용하는 기능의 코드를 함수로 사용
    • 예약어(if, for, def 등)는 함수명으로 사용 불가

    사칙연산자 사용 가능

    # syntax
    def 함수명(매개변수1, 매개변수2):
      코드
      return 반환 값
    
    def myAdd(x, y):
        answer = 10*x + y
        return answer
    
    a = myAdd(5, 3)
    a
    # 53

     

    str + str 연산 가능

    • string에는 합산(+ 연산자)만 사용 가능 ( -, * 등 사용 불가능)
    • 입력값이 다른 두 종류의 합산은 불가능 (str + int / str + float)
    def my_function(fname):
      print(fname + " Refsnes")
    
    my_function("Emil")
    my_function("Tobias")
    my_function("Linus")
    
    # Emil Refsnes
    # Tobias Refsnes
    # Linus Refsnes

     

    복수 값 반환 (multiple return)

    def addProd(x, y):
        add = x+y
        prod = x*y
        return add, prod
    
    d = addProd(3, 5)
    d
    # (8, 15)
    • tuple 반환을 하여 복수개의 값 return 가능

     

    def addProd(x, y):
        add = x+y
        prod = x*y
        return add, prod
    
    add, prod = addProd(5,6)
    print(add, prod)
    # 11 30

    변수

    • var : 변수 (variable)
      • 데이터를 담는 공간
      • int, float, str, bool 모두 정의 가능

    보통 코드 윗줄에 정의함

    # syntax
    변수명 = "데이터"
    
    나이 = 28
    직업 = "학생"
    isTrue = True

    매개 변수 (parameter)

    • 함수에 전달되는 값 (input / 함수의 재료)
    • 함수의 목적과 기능에 따라서 매개변수가 없을 수도 있고, n개일 수도 있음

    정의된 순서에 따라 값을 전달해야 함, 그게 아니라면 값을 명시하여 전달

    b = myAdd(y=5, x=2)
    b
    
    # 25

     

    매개변수 기본값 지정 가능

    • 전달되지 않으면 기본값으로 사용
    def myAdd(x, y=3):
        answer = 10*x + y
        return answer
    
    c = myAdd(1)
    c
    
    # 13

     

    # Q.성적과 이름을 입력하고(매개변수),
    # 성적에 따라서 이름과 등급을 알려주는 프로그램(함수)을 만드시오.
    #90점 이상 A등급
    #80점 이상 B등급
    #70점 이상 C등급
    #60점 이상 D등급
    #60점 미만 F등급
    
    def usrGrade(result, name):
        score = int(input('성적을 입력하세요 '))
        name = input('이름을 입력하세요 ')
        if score >= 90:
            grade = 'A'
        elif score >= 80:
            grade = 'B'
        elif score >= 70:
            grade = 'C'
        elif score >= 60:
            grade = 'D'
        else:
            grade = 'F'
        result = f'{name}님은 {grade}등급입니다.'
        return result
    
    usrGrade(result, name)
    
    # 성적을 입력하세요  99
    # 이름을 입력하세요  ys맥스
    # 'ys맥스님은 A등급입니다.'

    지역/전역 변수 (local/global variables)

    지역 변수 (local variable) : 함수 내에 선언한 변수

    함수내의 변수는 함수 내에서만 유효함

    전역 변수 (global variable) : 프로그램 전역에서 사용가능 한 변수 (상단에 정의됨)

    차이 : 변수가 참조 가능한 코드상의 범위

    k = "안녕"
    
    def dummy():
        # 지역, 전역 변수를 같은 이름으로 선언할 경우 지역변수의 우선순위가 더 높음
        k = "잘가" # 주석을 사용해서 테스트!
        print(k)
        return
    
    dummy() # 지역변수
    print(k) # 전역변수
    
    # 잘가
    # 안녕

     

    global : 함수 내의 변수를 전역변수로 선언

    k = "안녕"
    
    def dummy():
      global k
      k = "잘가"
      print(k)
      return
    
    dummy() # global 키워드로 지역변수 k를 전역변수로 선언
    print(k) # 기존 전역변수 k가 dummy함수에 의해 새로운 변수로 수정됨
    
    # 잘가
    # 잘가

    클래스 (class)

    여러 함수의 모임

    무언가를 만들어내는 틀

    class 안의 함수는 반드시 self 라는 매개 변수를 포함해야 함

    class FishBread():
        def redbean_bread(self):
            print("팥 붕어빵")
    
        def sucream_bread(self):
            print("슈크림 붕어빵")
    
    a = FishBread() # class
    a.redbean_bread() # def
    # 팥 붕어빵

    출처: https://www.geeksforgeeks.org/python-classes-and-objects/

     


    연습문제

    # 문제 1. 1부터 10까지의 정수 중에서 짝수만 출력하는 코드를 작성하세요.
    
    i = 1
    while i <= 10:
        if i % 2 == 0:
            print(i)
        i += 1
    
    for i in range(1,11):
        if i % 2 == 0:
            print(f'짝수 : {i}')
    # 문제 2. 사용자로부터 입력받은 숫자가 양수인지 음수인지 출력하는 코드를 작성하세요.
    
    try:
        a = int(input('숫자입력 '))
        if a > 0:
            print(str(a) + '는 양수')
        elif a < 0:
            print(str(a) + '는 음수')
        else:
            print('양수도 음수도 아님')
    except:
        print('정수만 입력하셈')
    # 문제 3. 1부터 100까지의 정수 중에서 3의 배수이면서 5의 배수인 정수의 합을 구하는 코드를 작성하세요.
    
    def multiples():
        a = 0
        for i in range(1,100):
            if (i % 3 == 0) and (i % 5 == 0):
                a += i
        return a
    
    multiples()
    # 문제 4. 사용자로부터 n개의 정수를 입력받아, 이 중에서 가장 큰 값과 가장 작은 값을 구하는 코드를 작성하세요.
    
    
    usrList = []
    maxInList = 0
    minInList = 0
    def maxAndMin():
        a = input('숫자를 입력하세요. 결과보기: r 입력  ')
        if a == 'r':
            maxInList = max(usrList)
            minInList = min(usrList)
            print(f'''최대값: {maxInList}
    최소값: {minInList}''')
            return None
        else:
            try:
                usrList.append(int(a))
            except ValueError:
                print('정수만 입력하세요.')
            print('현재 입력한 숫자: ' + str(usrList))
            maxAndMin()
    
    maxAndMin()
    usrList = []
    usrInputTimes = int(input("몇개의 숫자를 입력하시겠습니까?"))
    
    for i in range(usrInputTimes):
        usrInput = int(input(f'숫자를 입력하세요 ({i+1}번째)'))
        usrList.append(usrInput)
    
    min_val = usrList[0]
    max_val = usrList[0]
    
    for i in usrList:
        if i <= min_val:
            min_val = i
            print(f'최소값 : {i}')
        if i >= max_val:
            max_val = i
            print(f'최대값 : {i}')
    # 숫자 맞추기 게임을 함수로 만들어보세요.
    # 맞출 숫자는 아래 코드와 같이 1~100까지 자연수 중 랜덤으로 정합니다.
    # 숫자를 입력할 때마다 더 큰지 작은지 여부를 말해줍니다.
    # 1~100까지의 정수가 아닌 정수가 입력된다면 '1부터 100까지의 정수 중 하나를 입력하세요.'라고 출력하고 게임을 계속 이어갑니다.
    # 정수가 아닌 것이 입력된다면 '잘못된 값을 입력했습니다.'라고 출력하고 게임을 계속 이어나갑니다.
    
    import random
    
    number = random.randint(1, 100)
    
    def guess():
        try:
            a = int(input('1부터 100까지의 정수 중 하나를 입력하세요.'))
        except ValueError:
            print('잘못된 값을 입력했습니다. 정수를 입력하세요.')
            guess()
        else:
            if a > 100:
                print('입력값이 100을 초과했습니다.')
                guess()
            elif a < 1:
                print('입력값이 1 미만입니다.')
                guess()
            else:
                if number > a:
                    print('입력값이 난수보다 작습니다.')
                    guess()
                elif number < a:
                    print('입력값이 난수보다 큽니다.')
                    guess()
                else:
                    print('입력값이 난수와 같습니다. 게임을 종료합니다.')
                    return None
    
    guess()
    # 문제: 숫자 맞추기 게임을 파이썬으로 작성하세요. 이 게임은 다음과 같은 기능을 가져야 합니다:
    # 컴퓨터가 1부터 100 사이의 임의의 숫자를 선택합니다. 사용자가 숫자를 맞출 때까지 반복해서 숫자를 입력할 수 있도록 합니다. 사용자가 입력한 숫자가 컴퓨터가 선택한 숫자보다 작으면 "더 큰 숫자를 입력하세요." 라는 메시지를 출력합니다. 사용자가 입력한 숫자가 컴퓨터가 선택한 숫자보다 크면 "더 작은 숫자를 입력하세요." 라는 메시지를 출력합니다. 사용자가 숫자를 맞추면 시도한 횟수를 출력하고 게임을 종료합니다.
    # 힌트: random 모듈을 사용하여 컴퓨터가 선택한 숫자를 생성합니다. while 루프를 사용하여 사용자가 숫자를 맞출 때까지 반복합니다. 조건문을 사용하여 사용자의 입력에 따라 메시지를 출력합니다.
    
    import random
    
    def number_guessing_game():
        # 1부터 100 사이의 임의의 숫자를 선택합니다.
        target_number = random.randint(1, 100)
        attempts = 0
    
        print("컴퓨터가 1부터 100 사이의 숫자를 선택했습니다. 숫자를 맞춰보세요.")
    
        while True:
            guess = int(input("숫자를 입력하세요: "))
            attempts += 1
    
            if guess < target_number:
                print("더 큰 숫자를 입력하세요.")
            elif guess > target_number:
                print("더 작은 숫자를 입력하세요.")
            else:
                print(f"정답입니다! {attempts}번 시도했습니다.")
                break
    
    
    number_guessing_game()
    저작자표시 비영리 변경금지 (새창열림)

    '데이터 분석 부트캠프 > 주간학습일지' 카테고리의 다른 글

    [패스트캠퍼스] 데이터 분석 부트캠프 16기 5주차 - Python을 활용한 데이터 시각화 (NumPy / Pandas / MatPlotLib / Seaborn)  (3) 2024.09.20
    [패스트캠퍼스] 데이터 분석 부트캠프 16기 4주차 - Python의 Selenium을 활용한 데이터 크롤링  (6) 2024.09.13
    [패스트캠퍼스] 데이터 분석 부트캠프 16기 3주차 - Python 자료형  (1) 2024.09.03
    [패스트캠퍼스] 데이터 분석 부트캠프 16기 2주차 - 기초수학/통계  (3) 2024.08.30
    [패스트캠퍼스] 데이터 분석 부트캠프 16기 1주차 - EXCEL  (1) 2024.08.23
    '데이터 분석 부트캠프/주간학습일지' 카테고리의 다른 글
    • [패스트캠퍼스] 데이터 분석 부트캠프 16기 5주차 - Python을 활용한 데이터 시각화 (NumPy / Pandas / MatPlotLib / Seaborn)
    • [패스트캠퍼스] 데이터 분석 부트캠프 16기 4주차 - Python의 Selenium을 활용한 데이터 크롤링
    • [패스트캠퍼스] 데이터 분석 부트캠프 16기 3주차 - Python 자료형
    • [패스트캠퍼스] 데이터 분석 부트캠프 16기 2주차 - 기초수학/통계
    MaxH
    MaxH
    Development and Analysis log by Max H
    • MaxH
      Max’s analog
      MaxH
    • 전체
      오늘
      어제
      • 분류 전체보기 (24)
        • 데이터 분석 부트캠프 (19)
          • 주간학습일지 (11)
          • 회고록 (8)
        • Python (2)
        • SQL (2)
        • AWS (1)
        • Linux (0)
    • 링크

      • GitHub (@missiletoe)
      • LinkedIn (Yong Suk Heo)
    • 인기 글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.1
    MaxH
    [패스트캠퍼스] 데이터 분석 부트캠프 16기 3주차 - Python 제어문/예외처리/함수/변수/클래스
    상단으로

    티스토리툴바