개발자로 가는길 :: '나도코딩' 태그의 글 목록
728x90
반응형

나도코딩에 해당하는 글
728x90
반응형
12

나도코딩 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 자율학습단2기 2주차 -4

728x90
반응형

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

 

 

9.4 pass부터 학습

 

pass - 아무것도 하지않고 일단 그냥 넘어감

 

당장 함수를 완성하지 않아도 pass로 동작이 진행될수 있게 사용할 수 있다.

if while 문 등에도 사용가능

def game_start():
    print("[알림] 새로운 게임을 시작합니다.")

def game_over():
    pass #아무런 동작을 하지 않지만 코드는 정상적으로 실행이 됨
 

부모 클래스 호출 super()

다중상속 클래스를 super(). 로 호출시 가장 먼저 상속받은 클래스에 접근하게됨

다중상속 클래스는 각 부모 클래스의 이름을 명시해서 접근

class BuildingUnit(Unit):
    def __init__(self, name, hp, location):
        Unit.__init__(self, name, hp, 0) #이부분을 super().__init__(name,hp,0) 으로 변경 가능 / self 없이 사용
        self.location = location
   
 

게임완성

 

from random import randint
class Unit: #일반유닛
    def __init__(self, name, hp, speed):
        self.name = name #인스턴수 변수 name
        self.hp = hp    #인스턴수 변수 hp
        self.speed = speed #지상 이동속도
        print("{0} 유닛을 생성했습니다.".format(name))

    def move(self, location):
        # print("[지상 유닛 이동]")
        print("{0} : {1} 방향으로 이동합니다. 속도[{2}]".format(self.name, location, self.speed))
    
    def damaged  (self,damaged): #damage 만큼 유닛 피해
        print("{0} : {1} 만큼 피해를 입었습니다.".format(self.name,damaged))
        self.hp = self.hp - damaged #유닛 체력에서 전달받은 damage만큼 감소
        print("{0} : 현재 체력은 {1} 입니다.".format(self.name,self.hp))
        if self.hp <= 0:
            print("{0} :파괴되었습니다.".format(self.name))
                    

class AttackUnit(Unit) : #공격유닛
    def __init__(self, name,hp, damage, speed):
        Unit.__init__(self,name,hp, speed) #공통적인 부분 -> 부모클래스의 생성자 호출 (상속)
        self.damage = damage
    def attack (self, location):
        print("{0} : {1} 방향 적군을 공격합니다 . [공격력{2}]".format(self.name,location,self.damage))
    
        
#보병 유닛
class Soldier(AttackUnit):
    def __init__(self):
        AttackUnit.__init__(self, "보병", 40, 5, 1)
        
    #강화제 (일정시간 동안 이동,공격 속도 증가 , 체력1 감소)
    def booster(self):
        if self.hp > 10:
            self.hp -= 10
            print("{0} : 강화제를 사용합니다 (HP 10감소)".format(self.name))

        else:
            print("{0} : 체력이 부족해 기술을 사용할 수 없습니다.".format(self.name))
            
#탱크 유닛
class Tank(AttackUnit):
    siege_developed = False

    def __init__(self):
        AttackUnit.__init__(self, "탱크", 150, 35, 1)
        self.set_siege_mode = False
        
    def set_sige_mode(self):
        
        if Tank.siege_developed == False:
            return
        
        if self.set_siege_mode == False:
            print("{0} : 시지 모드로 전환합니다.".format(self.name))
            self.damage*=2
            self.set_siege_mode = True
            
        else:
            print("{0} : 시지 모드를 해제합니다.".format(self.name))
            self.damage //=2
            self.siege_mode = False
            
        
#비행 속도
class Flyable : 
    def __init__(self, flying_speed):
        self.flying_speed = flying_speed
    def fly(self,name , location):
        print("{0} : {1}방향으로 날아갑니다 . [속도{2}]".format(name,location,self.flying_speed))


#공중 공격유닛
class FlyableAttackUnit(AttackUnit,Flyable): #다중상속
    def __init__(self,name,hp,damage,flying_speed):
        AttackUnit.__init__(self,name,hp,damage,0)
        Flyable.__init__(self,flying_speed)
    def move(self, location):
        self.fly(self.name, location)

        
#전투기 유닛
class Stealth(FlyableAttackUnit):
    def __init__(self):
        FlyableAttackUnit.__init__(self, "전투기", 180,20,5)
        self.cloaked = False
    def cloaking(self):
        if self.cloaked == True:
            print("{0} : 은폐모드를 해제합니다.".format(self.name))
            self.cloaked = False
        else:
            print("{0} : 은폐모드를 설정합니다.".format(self.name))
            self.cloaked = True
        
class BuildingUnit(Unit):
    def __init__(self, name, hp, location):
        Unit.__init__(self, name, hp, 0)
        self.location = location
    
def game_start():
    print("[알림] 새로운 게임을 시작합니다.")
def game_over():
    print("Player : G.G")
    print("[Player] 님이 게임에서 퇴장했습니다 .")


#게임 실행하기
#1.게임시작
game_start()
#2.유닛 생성(보병3기,탱크 2기, 전투기 1기)
so1 = Soldier()
so2 = Soldier()
so3 = Soldier()
ta1 = Tank()
ta2 = Tank()
st1 = Stealth()
#전군 1시방향으로 이동
#유닛 일괄관리(생성된 모든 유닛 추가)
attack_unit = []
attack_unit.append(so1)
attack_unit.append(so2)
attack_unit.append(so3)
attack_unit.append(ta1)
attack_unit.append(ta2)
attack_unit.append(st1)
#탱크 시지모드 개발
Tank.siege_developed=True

#공격준비
for unit in attack_unit:
    if isinstance(unit, Soldier):
        unit.booster()
    elif isinstance(unit, Tank):
        unit.set_sige_mode()
    elif isinstance(unit, Stealth):
        unit.cloaking()
        
#전군 1시방향 공격 
for unit in attack_unit:
    unit.move("1시")
    
#전군 피해
for unit in attack_unit:
    unit.damaged(randint(5,20))

#게임종료
game_over()
    
 

실행해보며 약간 멘붕이 왔습니다 ㅋ

자꾸 여기저기서 오류가... 오탈자 , 빼먹은코드 등등 이게 은근히 찾기도 쉽지 않네요.

코드가 길어지니 클래스를 분리해서 관리하는게 좋겠다고 느꼈습니다.

실습문제까지 가려했지만 시간이 너무 길어져서 실습문제는 다음에!

모두 고생하셨습니다.

 

728x90
반응형

댓글()

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

728x90
반응형

 

요새 일교차가 심해서 그런지 몸살이 와서 나도코딩 교재는 며칠 쉬었습니다.

해당 학습내용은 네이버카페 코딩학습단에 동일 내용 업로드됨을 알려드립니다.

9장 클래스부터..

자바 공부할때도 클래스 , 객체 부터 많이 어려워했었는데.. 파이썬이 그나마 자바 사용 언어보다 쉬워서

파이썬을 이용해 더 개념을 탄탄히 공부하려 합니다.

클래스.클래스명:
    def 메서드명 (self , 전달값1 , 전달값2, ....)
    실행할명령1
    실행할명령2
    ...
 

- 메서드의 첫번째 전달값은 self 가 들어와줘야함

- 메서드 안에서 정의한 변수를 인스턴스 변수라고 함

 

class unit:
    def __init__(self, name, hp, damage): #self , 전달값1 , 전달값2 , 전달값3
        self.name = name
        self.hp = hp
        self.damage = damage
        print("{}유닛을 생성했습니다".format(self.name))
        print("체력 : {0}, 공격력 : {1} \n".format(self.hp,self.damage))
 

교재 유닛 클래스 생성

클래스 사용법 (위 유닛 클래스 사용)

soldier1 = Unit("보병" , 40 , 5)
soldier2 = Unit("보병" , 40 , 5)
soldier3=Unit("탱크",150,35 )
 

실행 결과

- 이렇게 클래스를 이용해 만들어진 유닛들을 객체라고 한다. (클래스의 인스턴스)

- 클래스안에 정의된 __init__ 은 생성자 라고 한다.

클래스를 만들때 __init__ 이라는 이름으로 메서드를 정의하면 자동으로 생성자가 됨

객체를 생성할때 생성자가 자동으로 호출되므로 생성자의 전달값 개수만큼 값을 전달해야함 ( 전달값 개수가 맞지않으면 error)

- 메서드에서 정의한 변수를 인스턴스 변수라고 함

- 인스턴수변수는 객체를 통해 직접 정의할수있다 (객체명.변수명)

 

메서드

- 메서드는 클래스 내보에 정의 한 함수

- 클래스 내부에서 전달값에 접근할땐 self. 으로 접근

 

276p 1분퀴즈 1번문제 보기 1,2 번 같음 오류있습니다

 

클래스 상속

상속 : 하위클래스가 상위클래스를 물려받음

다중 상속도 가능하다.

 

메서드 오버라이딩

부모 클래스의 함수를 자식클래스에서 재정의 하여 사용할수 있음.

class Unit: #일반유닛
    def __init__(self, name, hp, speed):
        self.name = name #인스턴수 변수 name
        self.hp = hp    #인스턴수 변수 hp
        self.speed = speed #지상 이동속도
        
    def move(self, location):
        print("[지상 유닛 이동]")
        print("{0} : {1} 방향으로 이동합니다. 속도[{2}]".format(self.name, location, self.speed))
                    
class AttackUnit : #공격유닛
    def __init__(self, name,hp, damage, speed):
        Unit.__init__(self,name,hp, speed) #공통적인 부분 -> 부모클래스의 생성자 호출 (상속)
        self.damage = damage
    def attack (self, location):
        print("{0} : {1} 방향 적군을 공격합니다 . [공격력{2}]".format(self.name,location,self.damage))
    def damaged  (self,damaged): #damage 만큼 유닛 피해
        print("{0} : {1} 만큼 피해를 입었습니다.".format(self.name,damaged))
        self.hp = self.hp - damaged #유닛 체력에서 전달받은 damage만큼 감소
        print("{0} : 현재 체력은 {1} 입니다.".format(self.name,self.hp))
        if self.hp <= 0:
            print("{0} :파괴되었습니다.".format(self.name))
#비행 속도
class Flyable : 
    def __init__(self, flying_speed):
        self.flying_speed = flying_speed
    def fly(self,name , location):
        print("{0} : {1}방향으로 날아갑니다 . [속도{2]".format(name,location,self.flying_speed))
#공중 공격유닛
class FlyableAttackUnit(AttackUnit,Flyable): #다중상속
    def __init__(self,name,hp,damage,flying_speed):
        AttackUnit.__init__(self,name,hp,damage,0)
        Flyable.__init__(self,flying_speed)
    def move(self,location):    
        print("[공중유닛 이동]")
        self.fly(self.name,location)
 
 

이번장은 공부해야 할 내용이 많네요 아직 몸이 좋지않아 쉬고 내일 다시 달려보겠습니다

 

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
반응형

댓글()

[나도코딩의 파이썬 입문] 도서 구매 후기

728x90
반응형

이책을 구매하기 전 부터 나도코딩 님의 유튜브 채널을 즐겨보고 있던 구독자이다.

https://www.youtube.com/@nadocoding / ' 나도코딩 ' 님의 유튜브 채널

 

개발자의 직무로 전환하겠다는 마음을 먹기 전 부터 코딩에 관심이 많았고 유튜브 채널들을 보며 크롤링등의 결과물을 만들어 보기도했다.

 

그렇지만 내가 뭔가를 처음부터 끝까지 해내서 만들어내기엔 '기본기'가 없어 생각한 것을 결과로 만들수 없다는 치명적인 단점이 있었는데.

유튜브 영상에 기본편등을 틀어놓다보면 지루하니 계속 딴짓을 하게되고 뭔가 생각할 시간 없이 휙휙 지나간다는 단점이 있어 깊게 공부하진 못했다.

 

어느날 나도코딩님 채널이 책 출시를 한다는 내용의 글이 올라왔고 팬심반 + 불타오르는 학구열 반으로 바로 구매했다.

길벗 출판사에 출시된 '나도코딩의 파이썬 입문' 이라는 책 이었다.

 

책 구매시 신청할 수 있는 [코딩 자율학습단] 이라는 컨텐츠도 마음에 들었다. (지금은 가입기간이 지났다 / 자율학습단 2기)

코딩자율학습단 카페에 해당 매니져님이 학습내용에 대한 컨텐츠들을 업로드 해주고 ,

매일 x일차 입니다 범위는 몇페이지 까지입니다라고 문자도 보내주신다.

질문게시판에 궁금한점이나 막히는 부분을 올리면 빠르게 피드백도 해주신다.. 짱짱맨..

예약구매자한테만 나오는건진 잘 모르겠지만 yes24에 있는 포인트를 조금 차감해서 저런 사은품들도 받았다.

정가 24,000원

 

난이도 / 입문으로 되어있다.

 

실제로 책 내용을 보면 마지막이 예외처리 정도인 것 같다.

파이썬을 본격적으로 활용하기 전 필요한 기본만 꽉꽉 눌러 담은 것 같다.

 

국비지원으로 6개월 과정의 자바,파이썬 SW 개발자양성 과정을 듣고있는데. 

그래도 기본은 하지 않을까 ? 하는 생각이 아주 기초적인 연산,문자열 등을 제외하곤 산산히 박살났다...ㅠㅠ

 

각장마다 개념 및 + 응용 연습문제 , 셀프체크등 구성으로 이뤄져있는데.

시간을 갖고 천천히 읽다보니 몰랐던 내용이 참으로 많다...ㅋ 열심히 해야겠다.

 

셀프체크 문제는 아직 막힌 부분이 없어 보진 않았는데  나도코딩님 채널이 문제풀이 영상도 업로드 되고있는걸 확인했다!

 

현재 절반정도 봤는데, 마무리 단원에 각 장마다의 총정리가 아주 깔끔하게 잘되어있어

1회독이 끝나면 각 장 마무리 부분만 따로 문서화 하여 계속 볼 예정이다.

 

이후 난이도에 대한 책도 발간이 되었으면 좋겠다

 

후기 끝!

728x90
반응형

댓글()