개발자로 가는길 :: 'PYTHON' 태그의 글 목록
반응형

PYTHON에 해당하는 글
반응형
9

나도코딩 Python 자율학습단 2기 3주차

728x90
반응형

 

다른 공부하고있는 언어가 어려워서 부족한거 매꾸느라 파이썬 들여다볼 겨를이 없었습니다.ㅠ

 

10장 예외처리

연습문제

 

#실습문제 치킨주문하기
#1보다 작거나 숫자가 아닌 입력값이 들어올때는 ValueError로 처리한다
#대기 손님이 주문할 수 있는 최대 주문수량은 10마리로 제한한다
#치킨 소진시 오류(SoldoutError)를 발생시키고 프로그램을 종료한다.

class SoldoutError(Exception):
    pass

chicken = 10 #남은 치킨수
waiting = 1 #대기번호 1부터 시작.

while True:
    try:
        print('남은치킨 : {0}'.format(chicken))
    
        order = int(input('치킨을 몇마리 주문하시겠습니까? : '))
    
        if order > chicken :
            print('재료가 부족합니다.')
        elif order <= 0  :
            raise ValueError
        else : 
            print('대기번호 {0} : {1}마리 주문하셨습니다.'.format(waiting, order))
            waiting = waiting + 1
            chicken = chicken - order
        if chicken == 0 :
            raise SoldoutError
    except ValueError:
        print('잘못된 값을 입력하셨습니다.')
    except SoldoutError:
        print('재료가 소진되었습니다.')
        break
 

10장 셀프체크

def save_battery(level):
    try:
        print(f'베터리 잔량 : {level}%')
        if level > 30 :
            print('일반모드')
        elif level >5:
            print('절전모드')
        else:
            raise Exception('베터리부족 : 스마트폰 종료')
    except Exception as err:
        print(err)

save_battery(75)
save_battery(25)
save_battery(3)    
    

 

 

 

 

728x90
반응형

댓글()

Python 인강 / 객체지향 커피머신 만들기

개발/파이썬|2023. 3. 22. 20:24
728x90
반응형
#메인 코드
from menu import Menu
from coffee_maker import CoffeeMaker
from money_machine import MoneyMachine

money_machine = MoneyMachine()
coffee_maker = CoffeeMaker()
menu = Menu()

is_on = True

while is_on:
    options = menu.get_items()
    choice = input(f"What would you like? ({options}): ")
    if choice == "off":
        is_on = False
    elif choice == "report":
        coffee_maker.report()
        money_machine.report()
    else:
        drink = menu.find_drink(choice)
        
        if coffee_maker.is_resource_sufficient(drink) and money_machine.make_payment(drink.cost):
          coffee_maker.make_coffee(drink)
#커피 만들기 클래스
class CoffeeMaker:
    """Models the machine that makes the coffee"""
    def __init__(self):
        self.resources = {
            "water": 300,
            "milk": 200,
            "coffee": 100,
        }

    def report(self):
        """Prints a report of all resources."""
        print(f"Water: {self.resources['water']}ml")
        print(f"Milk: {self.resources['milk']}ml")
        print(f"Coffee: {self.resources['coffee']}g")

    def is_resource_sufficient(self, drink):
        """Returns True when order can be made, False if ingredients are insufficient."""
        can_make = True
        for item in drink.ingredients:
            if drink.ingredients[item] > self.resources[item]:
                print(f"Sorry there is not enough {item}.")
                can_make = False
        return can_make

    def make_coffee(self, order):
        """Deducts the required ingredients from the resources."""
        for item in order.ingredients:
            self.resources[item] -= order.ingredients[item]
        print(f"Here is your {order.name} ☕️. Enjoy!")
#메뉴 클래스
class MenuItem:
    """Models each Menu Item."""
    def __init__(self, name, water, milk, coffee, cost):
        self.name = name
        self.cost = cost
        self.ingredients = {
            "water": water,
            "milk": milk,
            "coffee": coffee
        }


class Menu:
    """Models the Menu with drinks."""
    def __init__(self):
        self.menu = [
            MenuItem(name="latte", water=200, milk=150, coffee=24, cost=2.5),
            MenuItem(name="espresso", water=50, milk=0, coffee=18, cost=1.5),
            MenuItem(name="cappuccino", water=250, milk=50, coffee=24, cost=3),
        ]

    def get_items(self):
        """Returns all the names of the available menu items"""
        options = ""
        for item in self.menu:
            options += f"{item.name}/"
        return options

    def find_drink(self, order_name):
        """Searches the menu for a particular drink by name. Returns that item if it exists, otherwise returns None"""
        for item in self.menu:
            if item.name == order_name:
                return item
        print("Sorry that item is not available.")
#돈관리 클래스
class MoneyMachine:

    CURRENCY = "$"

    COIN_VALUES = {
        "quarters": 0.25,
        "dimes": 0.10,
        "nickles": 0.05,
        "pennies": 0.01
    }

    def __init__(self):
        self.profit = 0
        self.money_received = 0

    def report(self):
        """Prints the current profit"""
        print(f"Money: {self.CURRENCY}{self.profit}")

    def process_coins(self):
        """Returns the total calculated from coins inserted."""
        print("Please insert coins.")
        for coin in self.COIN_VALUES:
            self.money_received += int(input(f"How many {coin}?: ")) * self.COIN_VALUES[coin]
        return self.money_received

    def make_payment(self, cost):
        """Returns True when payment is accepted, or False if insufficient."""
        self.process_coins()
        if self.money_received >= cost:
            change = round(self.money_received - cost, 2)
            print(f"Here is {self.CURRENCY}{change} in change.")
            self.profit += cost
            self.money_received = 0
            return True
        else:
            print("Sorry that's not enough money. Money refunded.")
            self.money_received = 0
            return False
728x90
반응형

댓글()

나도코딩 Python 자율학습단2기 2주차 -2

728x90
반응형

 

8장부터 시작

 

표준 입력받기 input()

 

abc  = input("입력해주세요") 
#입력값 abc 변수로 이동
#기본적으로 string 으로 저장
#형 변환시 
#예시)
abc = int(input("입력해주세요"))
#int 형태로 변수에 저장
 

 

표준 출력시 유용한 기능

print("파이썬","자바") #파이썬 자바
print("파이썬"+"자바") #파이썬자바
print("파이썬","자바",sep=" , ") #파이썬, 자바
print("파이썬","자바",sep=" , " , end=" ? ") #파이썬, 자바 ? / end 따로 지정하지 않으면 기본적으로 줄바꿈

import sys
print("파이썬","자바",file=sys.stdout) #표준출력 ( 로그남김 )
print("파이썬","자바",file=sys.stderr) #오류발생시 관련 내용 출력

#좌우 정렬
.ljust()  #좌정렬.   .rjust() #우정렬
ljust(8)  #8칸 확보 좌정렬
just(3)   #3칸 확보 우정렬

#빈칸 0으로 채우기 .zfill( )
zfill(3) #3자리수중 빈칸은 0으로 채움 
 

 

format()함수

#.format()함수
print("{0}".format(500)) #{0}위치에 500출력
print("{0: >10}".format(500)) #빈칸으로두기 , 오른쪽정렬 , 10칸확보
print("{0: >+10}".format(500)) #빈칸으로두기,오른쪽정렬,+기호붙이기,10칸확보 / 음수도 적용가능
print("{0:_<10}".format(500)) #빈칸을 _ 로 채우기 , 왼쪽정렬 , 공간 10칸 확보
print("{0:,}".format(5000)) #3자리마다 쉼표찍기
print("{0:,+}".format(500)) #+기호 붙이고 3자리마다 쉼표찍기 / 음수도 적용가능
print("{0: < +20,}".format(5000)) #좌로정렬 , 20칸확보 , + 기호 붙이기 , 3자리마다 쉼표찍기
print("{0.f}".format(5/3)) # 5/3 float형으로 표시
print("{0.f2}".format(5/3)) # 5/3 을 소수 2자리까지 표시
 

파일 입출력

#파일 열기
open("파일명" , "모드" , encoding="인코딩 형식")
#모드
r -> 읽기 / 파일내용 읽기
w ->쓰기 / 파일내용쓰기 / 같은이름의 파일이 있으면 해당 파일을 덮어써서 기존내용삭제
a ->이어쓰기 / 파일내용쓰기 / 같은이름의 파일이 있으면 기존 내용 끝에 이어씀

#예제
score_file = open("score.txt" , "w" , encoding="utf8" )
print('수학 : 0 ' , file=score_file) #score.txt 파일에 내용 쓰기
print('영어 : 50 ', file=score_file)  
score_file.close() #score.txt 파일 닫기

# write 모드는 자동줄바꿈이 없음 \n 추가
# read()  #파일 통째로 불러와 읽음
# readline() #한줄씩 읽어옴
#readlines() #줄단위로 나뉜 리스트 형태로 한꺼번에 읽어오기
 

 

8.7 실습문제 : 보고서 파일만들기

 

 

728x90
반응형

댓글()

나도코딩 Python 자율학습단 2기 2주차-1

728x90
반응형

 

본 내용은 네이버카페 코딩자율학습단 에도 동일한 내용이 업로드 됨을 알려드립니다.

 

7장 함수

 

-사용자 정의 함수

def 함수명():
    실행한 문장1
    실행할 문장2
    실행할 문장3
    . . . 
 

직접 함수를 정의하여 호출 할 수 있다.

 

함수명을 지을때는 이름을 보고 어떤 동작을 하는지 유추할 수 있게 해야 한다.

 

 

-전달값과 반환값

def 함수명(전달값1,전달값2....)
    실행할 문장1
    실행할 문장2
    . . .
    return 반환값1
 

7.5 실습문제 : 표준체중 구하기

 

#7.5 표준 체중 구하기

#표준 체중 구하는 프로그램 작성
#남자 : 키(m) x 키(m) x 22  , 여자 : 키(m) x 키(m) x 21
#1. 함수명 std_weight / 전달값 키(height) 성별(gender)
#2. 실행결과 소수점 이하 둘째 자리까지

def std_weight(height,gender):
    if gender == "남자" :
        result_man = height*height*22
        print(f"키 {height*100}cm {gender}의 표준 체중은{round(result_man,2)}kg 입니다.")
    else:
        result_female = height*height*21
        print(f"키 {height*100}cm {gender}의 표준 체중은{round(result_female,2)}kg 입니다.")
        

std_weight(1.72,"여자")
 

 

.

 

7장 셀프체크

#7장 셀프체크
#미세먼지 수치를 입력받아 대기질 상태를 출력
#1. get_air_quality 라는 이름의 함수
#2. 이 함수는 전달값으로 미세먼지 수치를 입력받는다.
#4. 0~30 좋음 , 31~80 보통 , 81~150 나쁨 , 151이상 매우나쁨

def get_air_quality(figure):
    if figure<=30 :
        return "좋음"
    elif figure <= 80:
        return "보통"
    elif figure <=150:
        return "나쁨"
    else:
        return "매우나쁨"
    

print(get_air_quality(15))
print(get_air_quality(85))

 
 

오히려 앞에 장들보다 이해하기 쉽고 재밌는 단원이었습니다.

 

728x90
반응형

댓글()

나도코딩 자율학습단2기 1주차 -3

728x90
반응형

 

,제주에서 지낸지 몇년 되다보니 친구들이 내려와 호출하는 경우가 많습니다.

소주를 조금 먹었는데 오늘 공부를 덜 했다는 죄책감에 술기운이 있어도 한번이라도 더 책을 보는게

개발자 전향을 희망하는 저에겐 조금더 나을것 같다는 생각이 들었습니다.

 

본 학습 내용은 네이버카페 코딩 자율학습단에도 같이 올라감을 알려드려요

 

4장 문자열 부터 시작합니다.

 

앞선 학습내용에서도 밝혔지만. 자바공부 , 이전에 파이썬 공부 초반을 좀 했던 경험이 있어.

아는 부분은 빠르게 훑고 지나가는 방식으로 공부 합니다.

 

- 문자열 출력도 동일하게 print ( " 문자열 " ) / 파이썬의 출력문은 다른언어에 비해 압도적으로 편한것 같습니다

 

- 슬라이싱 / 따로 함수를 사용할 필요없이 문자열이 들어있는 / 변수명[시작인덱스 : 종료인덱스] 시작인덱스 이상 종료인덱스 미만

 

-변수명[:종료인덱스] 처음부터 종료인덱스 미만 / 변수명[시작인덱스:] 시작인덱스부터 끝까지 / 변수명[:] 처음부터 끝까지 슬라이싱

 

- 함수로 문자열 처리 

lower() 문자열 소문자로 변환 / upper() 문자열 대문자로 변환 / 

isLower() 문자열이 소문자인지 확인 / isUpper 문자열이 대문자인지 확인

replace() 문자열 바꾸기 / index() 찾는 문자열의 인덱스 ( 없으면 err 발생)

find() 찾는 문자열의 인덱스(없으면 -1 return) / count() 문자열이 나온 횟수

- 문자열 포멧팅

서로 다른 타입을 함께 출력하려면 형변환을 거쳐 "문자열" + 변수명 + "문자열" 식으로 출력을 해야하는데

포멧팅으로 출력하게 되면 

age = 37

print("나는 %d 살 입니다" %age) 

이런식으로 표시할 수 있다 (변수명 대신 %입력값 가능)

%d 정수 / %f 실수 / %c 문자 / %s 문자열

 

- format() 함수 사용하기

print("나는{}입니다}.format("이름"') // 나는이름입니다

print("나는{0}이고 너는{1}입니다").format("이름" , "성함") // 나는 이름이고 너는 성함입니다.

// 인덱스는 0부터 첫번째!

 

- 앗 드디어 내가 좋아하는 f-string 이 나왔다.

printt(f"내나이는{변수명}입니다") 

 

f-string 은 만능인데 다른 print문을 사용하는 이유가 뭘까..? 궁금함 질문게시판에 올려봐야겠다.

 

오늘은 너무 피곤해서 여기까지 하겠습니다

익일 4.6실습문제부터 시작.

 

 

728x90
반응형

댓글()

나도코딩 Python 자율학습단2기 1주차 - 2

728x90
반응형

 

오늘은 하루 루틴이 조금 빨리 끝나서 여유있게 나도코딩 책을 펼쳤습니다.

 

3장 연산자 부터

 

연산자도 자바 공부하며 봤던부분이랑 거의 같아서 다른부분이있다면 짚고 넘어가는 형식으로 학습을 하겠습니다.

 

- 기본 산술연산 + - * / (더하기,빼기,곱하기,나누기)

 

-** 거듭제곱 , %나눈 나머지 , // 나눈 몫

 

- 비교연산 . 출력시 true or false 로 출력

 

- 논리연산 and (왼오 참일때 참) , or (왼오 둘중 하나라도 참일때 참) , not (값이 참이면 거짓,거짓이면 참)

출력시 true , false 로 표시

 

- 사칙연산시 우선순위 따라감 , 괄호로 우선순위 변경 가능

 

-함수연산 abs(x) x의 절대값 , pow(x,y) x를y만큼 거듭제곱한 값 , max()가장 큰값 , min() 가장 작은 값 ,

round(x,d) x를 반올림한 값 ,d는 표시할 소수점 이하 자릿수 , d가 없으면 소수점 이하 첫째 자리에서 반올림한 정수

 

- math 모듈

모듈 사용은 / from 모듈명 import 기능

모든 기능을 사용하려면 from 모듈명 import *

모듈 사용방법은 모듈명.기능 (ex. math.floor() )

 

모듈의 숫자처리 함수 

floor() 내림 , ceil() 올림 , sqrt() 제곱근

 

-random 모듈

random() 0.0~1.0 사이의 난수

random()*10 0.0~10.0사이의 난수

int로 감싸면 정수형으로 변환가능

 

randrange(시작숫자 , 끝숫자) 끝숫자 미포함

randint(시작숫자 , 끝숫자) 끝 숫자 포함

 

3.5실습문제

-마무리에 내용 전부 정리가 잘 되어있네요!

3장 셀프체크

오늘 학습은 여기까지

 

본 내용은 네이버카페 코딩 자율학습단 에도 업로드 됨을 알려드립니다.

 

728x90
반응형

댓글()