관리 메뉴

Jerry

python #3 본문

etc/python

python #3

juicyjerry 2021. 12. 23. 23:37
반응형
# 표준 입출력
print("Python", "Java", "Javascript", sep=" vs ")
print("Python", "Java", "Javascript", end="?") # 한 줄에 나오게 한다
print("무엇이 더 재밌을까요?")



import sys
print("Python", "Java", file=sys.stdout) # 표준 출력
print("Python", "Java", file=sys.stderr) # 표준 에러

scores = {"수학":0, "영어": 50, "코딩": 60}
for subject, score in scores.items():
    # print(subject, score)
    print(subject.ljust(8), str(score).rjust(4), sep=":") # 왼쪽 정렬, 오른쪽 정렬



# 은행 대기 순번표
for num in range(1, 21):
    print("대기번호 : " + str(num).zfill(3))

# answer = input("아무 값이나 입력하세요 : ")
# print("입력하신 값은 " + answer + "입니다.")
# print(type(answer)) # 사용자 입력을 통해 받은 값은 str로 값을 받는다



# 다양한 출력 포맷
# 빈 자리는 빈공간으로 두고, 오른쪽 정렬을 하되, 총 10자리 공간을 확보
print("{0: >10}".format(500))
print("{0: <+5}".format(500))
print("{0: >+5}".format(-500))
print("{0: <10}".format(500))

print("------------------------")

print("{0: >10}".format(-500))
print("{0: <5}".format(-500))
print("{0: >5}".format(-500))
print("{0: <10}".format(-500))

# 왼쪽 정렬하고, 빈칸으로 _로 채움
print("{0:_<+10}".format(500))

# 3자리 마다 콤마를 찍어주기
print("{0:,}".format(1000000000))

# 3자리 마다 콤마를 찍어주기 + 부호
print("{0:+,}".format(-1000000000))

print("{0:^<+30,}".format(1000000000))

print("{0:f}".format(5/3))
print("{0:.2f}".format(5/3))


# 파일 입출력
# score_file = open("score.txt", "w", encoding="utf8") # w: write
# print("수학 : 0", file=score_file)
# print("영어 : 50", file=score_file)
# score_file.close()

# score_file = open("score.txt", "a", encoding="utf8") # a: append
# score_file.write("과학 : 80")
# score_file.write("\n코딩 : 100")
# score_file.close()

# score_file = open("score.txt", "r", encoding="utf8")
# print(score_file.read())
# score_file.close()

# score_file = open("score.txt", "r", encoding="utf8")
# print(score_file.readline()) # 한 줄만 읽고 커서는 다음 줄로
# print(score_file.readline(), end="") # 한 줄만 읽고 커서는 다음 줄로
# print(score_file.readline()) # 한 줄만 읽고 커서는 다음 줄로
# print(score_file.readline()) # 한 줄만 읽고 커서는 다음 줄로
# score_file.close()

score_file = open("score.txt", "r", encoding="utf8")
# while True:
#     line = score_file.readline()
#     if not line:
#         break
#     # print(line)
#     print(line, end="")
# score_file.close()

# lines = score_file.readlines() # list 형태로 저장
# for line in lines:
#     print(line, end="")
# score_file.close()




# pickle : 프로그램 상의 데이터를 파일형식으로 저장하여 데이터 활용 가능한다
# import pickle
# profile_file = open("profile.pickle", "wb") # write: 쓰기 binary: pickle 쓰기위해 바이너리 사용
# profile = {"이름":"박명수", "나이":30, "취미":["축구", "골프", "코딩"]}
# print(profile)
# pickle.dump(profile, profile_file) # profile에 있는 정보를 file에 저장
# profile_file.close()

# profile_file = open("profile.pickle", "rb")
# profile = pickle.load(profile_file) # file에 있는 정보를 profile에 불러오기
# print(profile)
# profile_file.close()


# with
# import pickle
# with open("profile.pickle", "rb") as profile_file: #profile_file 변수에 저장
#     print(pickle.load(profile_file)) # load로 불러와서 출력을 해준것

# with open("study.txt", "w", encoding="utf8") as study_file:
#     study_file.write("파이썬을 열심히 공부하고 있어요")

# with open("study.txt", "r", encoding="utf8") as study_file:
#     print(study_file.read())


# quiz

# week = 0 # 불필요
for week in range(1, 51):
    report_file = open("{0} 주차 주간보고.txt".format(week), "w", encoding="utf8")
    report_file.write("- {0} 주차 주간보고-\n부서 : \n이름 : \n업무 요약 : ".format(week))
    week += 1
    report_file.close()


# 강사 코드
# for i in range(1, 51):
#     with open(str(i) + "주차.txt", "w", encoding="utf8") as report_file:
#         report_file.write("- {0} 주차 주간보고-\n부서 : \n이름 : \n업무 요약 : ")

 

# 클래스 : 붕어빵 틀에 비유

# 마린 : 공격 유닛, 군인. 총을 쓸 수 있음
# name = "마린"
# hp = 40
# damage = 5

# print("{} 유닛이 생성되었습니다.".format(name))
# print("체력 {0}, 공격력 {1}\n".format(hp, damage))

# # 탱크 : 공격 유닛, 군인. 포을 쓸 수 있음, 일반 모드 / 시즈 모드
# tank_name = "탱크"
# tank_hp = 150
# tank_damage = 35

# print("{} 유닛이 생성되었습니다.".format(tank_name))
# print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_damage))


# def attack(name, location, damage):
#     print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]".format(name, location, damage))
    

# attack(name, "1시", damage)
# attack(tank_name, "1시", tank_damage)


class Unit:
    def __init__(self, name, hp, speed): # __init__ 생성자; 마린, 탱크 같은 갹채 호출 될 때 자동으로 호출되는 부분
        self.name = name # 멤버 변수
        self.hp = hp # 멤버 변수
        self.speed = speed

    def move(self, location):
        print("[지상 유닛 이동]")
        print("{0} : {1} 방향으로 이동합니다. [속도 {2}]".format(self.name, location, self.speed))

        # self.damage = damage # 멤버 변수
#         print("{0} 유닛이 생성 되었습니다.".format(self.name))
#         print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))

# marine1 = Unit("마린", 40, 5) # 클래스로 부터 만들어지는 것을 객체라 부름
# marine2 = Unit("마린", 40, 5) # 유닛 클래스의 인스턴스라고 부름
# tank1 = Unit("탱그", 150, 35)

# # 레이스 : 공중 유닛, 비행기, 클로킹
# wraith1 = Unit("레이스", 80, 5)
# print("유닛 이름 : {0}, 공격력 : {1}".format(wraith1.name, wraith1.damage))


# # 마인드 컨트롤
# wraith2 = Unit("레이스", 80, 5)
# wraith2.clocking = True # 추가로 변수를 바깥에서 만들어서 넣을 수 있다 다만, 확장된 변수는 확장한 객체에만 적용이 된다

# if wraith2.clocking == True:
#     print("{0} 는 현재 클로킹 상태입니다.".format(wraith2.name))



class AttackUnit:
    def __init__(self, name, hp, damage, speed):
        Unit.__init__(self, name, hp) # 상속, 부모가 Unit + 다중 상속은 부모가 둘 이상
        self.damage = damage

    def attack(self, location):
        # 위 location 인자를 받아 쓰며 name과 damage는 위에 멤버 변수를 사용 
        print("{0} : {1} 방향으로 적군을 공격 합니다. [공격력 {2}]".format(self.name, location, self.damage)) 

    def damaged(self, damage):
        print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
        self.hp -= damage
        print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))

        if self.hp <= 0:
            print("{0} : 파괴되었습니다.".format(self.name))

# 파이어뱃 : 공격 유닛, 화염 방사기
# firebat1 = AttackUnit("파이어뱃", 50, 16)
# firebat1.attack("5시")


# 공격 2번 받는다고 가정
# firebat1.damaged(25)
# firebat1.damaged(25)

# 드랍쉽
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, 0, damage)
        Flyable.__init__(self, flying_speed)


# 발키리
valkyrie = FlyableAttackUnit("발키리", 200, 6, 5)
valkyrie.fly(valkyrie.name, "3시")

# 건물
class BuildingUnit(Unit):
    def __init__(self, name, hp, location):
        # pass
        Unit.__init__(self, name, hp, 0)
        super().__init__(name, hp, 0) 
        self.location = location
supply_depot = BuildingUnit("서플라이 디폿", 500, "7시")


#quiz

class House:
    # 매물 초기화
    def __init__(self, location, house_type, deal_type, price, completion_year):
        self.location = location
        self.house_type = house_type
        self.deal_type = deal_type
        self.price = price
        self.completion_year = completion_year
        print("매물 생성자")

    # 매물 정보 표시
    def show_detail(self):
        # print("세부 내용", end=" ")
        print("{0} {1} {2} {3} {4}".format(self.location, self.house_type, self.deal_type, self.price, self.completion_year)) # format메서드 안 써도 됨

houses = []
house1 = House("강남", "아파트", "매매", "10억", "2010년")
house2 = House("마포", "오피스텔", "전세", "5억", "2007년")
house3 = House("송파", "빌라", "월세", "500/50", "2000년")

houses.append(house1)
houses.append(house2)
houses.append(house3)

print("총 {0}대의 매물이 있습니다.".format(len(houses)))
for house in houses:
    house.show_detail()

 

 

 

# # 예외처리
# try :
#    print("나누기 전용 계산기입니다.")
#    num1 = int(input("첫 번째 숫자 입력"))
#    num2 = int(input("두 번째 숫자 입력"))
#    print("{0} / {1} = {2}".format(num1, num2, int(num3)))

# except ValueError:
#     print("에러! 잘못된 값을 입력하였습니다.")
# except ZeroDivisionError as err:
#     print(err)
# except Exception as err:
#     print("알 수 없는 에러가 발생하였습니다")
#     print(err)

# 에러 발생시키기
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise ValueError
    print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
except ValueError:
    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
finally:
    print("fuckyp!!")
    
    
    
 
# quiz
chicken = 10
waiting = 1

class SoldOutError(Exception):
    pass

while(True):
    try: 
        print("[남은 치킨 : {0}]".format(chicken))
        order = int(input("치킨 몇 마리 주문하시겠습니까? "))
        if order <= 0:
            raise ValueError
        elif order > chicken:
            print("재료가 부족합니다.")
        else: 
            print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다.".format(waiting, order))
            waiting +=1
            chicken -= order

        if chicken == 0:
            raise SoldOutError
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    except SoldOutError:
        print("재료가 소진되어 더 이상 주문을 받지 않습니다.")
        break

 

 

 

 

 

 

# 모듈 : 필요한 것들끼리 부품처럼 만드는 것, 함수 정의, 클래스 등의 파이썬 문장을 담고 있는 파일

# import theater_module
# theater_module.price(3) 
# theater_module.price_morning(4)
# theater_module.price_soldier(5)

# import theater_module as mv
# mv.price(30)
# mv.price_morning(5000)
# mv.price_soldier(6)

# from theater_module import *
# price(3)
# price_soldier(4)
# price_morning(2)

# from theater_module import price_morning, price
# price(5)
# price_morning(3)
# price_soldier(11)



# 패키지: 여러 모듈들을 모아놓은 것
# 패키지 생성 및 사용
from travel import *
# trip_to = thailand.ThailandPackage()
# trip_to.detail()

# import inspect
# import random
# print(inspect.getfile(random))
# print(inspect.getfile(thailand))


#pip로 패키지 설치하기
# from bs4 import BeautifulSoup
# soup = BeautifulSoup("<p>Some<b>bad<i>HTML")
# print(soup.prettify())


# glob: 경로 내 폴더 / 파일 목록 조회
import glob
print(glob.glob("*.py"))

 

반응형

'etc > python' 카테고리의 다른 글

python #2  (0) 2021.12.23
[python] 기본 다지기 #1  (0) 2021.12.22