[파이썬] 기초

2023. 9. 2. 10:32기타(이론)/컴퓨터학과 이론

스스로 얻은 내용

# 아래의 리스트처럼 숫자가 들어있는 문자열 형태로 되어있는 배열을 sort()를 사용해 숫자기준 오름차순으로 정렬하는 방법

original_list = ['5', '2', '9', '1', '-5', '10']

# 숫자 기준으로 오름차순으로 정렬
original_list.sort(key=int)

# 결과 출력
print(original_list)

# 소문자로 변환
my_string=my_string.lower()
# 문자열을 리스트로 자료형 변환
my_string=list(my_string)
# sort()를 활용해 정렬
my_string.sort()
# 리스트를 문자열로 자료형 변환, 앞의 ' '에는 사이에 들어갈 문자를 넣기
answer = ''.join(s for s in my_string)

숫자 자료형

print(5)
print(-10)
print(3.14)
print(1000)
print(5+3)
print(2*8)
print(3*(3+1))
결과 
5 -10 3.14 1000 8 16 12

문자열 자료형

print('풍선')
print("나비")
print("ㅋㅋㅋㅋㅋㅋㅋㅋㅋ")
print("ㅋ"*9)
결과
풍선 나비 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

boolean 자료형

# 참 / 거짓
print(5 > 10)
print(5 < 10)
print(True)
print(False)
print(not True)
print(not False)
print(not (5 > 10))
결과
False True True False False True True

변수

# 반려동물을 소개해 주세요~
animal = "판다"
name = "푸바오"
age = 3
hobby = "죽순"
is_adult = age >= 3

print("우리집 "+ animal + "의 이름은 " + name + "예요")
print(name + "는 "+ str(age) + "살이며, " + hobby + "을 아주 좋아해요") #str(age) 정수형을 문자형으로 바꿔줌
print(name + "는 어른일까요? "+ str(is_adult))
결과
우리집 판다의 이름은 푸바오예요 푸바오는 3살이며, 죽순을 아주 좋아해요 푸바오는 어른일까요? True
# 반려동물을 소개해 주세요~
animal = "비둘기"
name = "둘기"
age = 1
hobby = "간식"
is_adult = age >= 3

print("우리집 "+ animal + "의 이름은 " + name + "예요")
print(name, "는 ", age , "살이며, " , hobby , "을 아주 좋아해요") #콤마가 들어가면 띄어쓰기 포함
print(name + "는 어른일까요? "+ str(is_adult))
결과
우리집 비둘기의 이름은 둘기예요 둘기 는 1 살이며, 간식 을 아주 좋 아해요 둘기는 어른일까요? False

연산자

print(1+1) #2
print(3-2) #1
print(5*2) #10
print(6/3) #2.0

print(2**3) #2^3 = 8
print(5%3) # 나머지 구하기 2
print(10%3) # 1
print(5//3) # 5를 3으로 나눴을 때의 몫 = 1
print(10//3) # 3

print(10 > 3) # True
print(4 >= 7) # False
print(10 < 3) # False
print(5 <= 5) # True

print(3 == 3) # True
print(4 == 2) # False
print(3 + 4 == 7) # True
print(1 != 3) # True
print(not(1 != 3)) #False

print((3 > 0) and (3 < 5)) # True
print((3 > 0) & (3 < 5)) # True

print((3 > 0) or (3 < 5)) # True
print((3 > 0) | (3 < 5)) # True

print(5 > 4 > 3) # True
print(5 > 4 > 7) # False

간단한 수식

print(2 + 3 * 4) # 14
print((2 + 3) * 4) # 20
number = 2 + 3 * 4
number = number + 2
number *= 2
number /= 2
number %= 5
print(number) // 1.0

숫자처리함수

print(abs(-5)) # 절댓값 = 5
print(pow(4, 2)) # 4^2 = 16
print(max(5, 12)) # 12
print(min(5, 12)) # 5
print(round(3.14)) # 반올림 = 3
print(round(4.99)) # 5

from math import *
print(floor(4.99)) # 내림 = 4
print(ceil(3.14)) # 올림 = 4
print(sqrt(16)) # 제곱근 = 4

랜덤함수

from random import *

print(random()) # 0.0 ~ 1.0 미만의 임의의 값 생성
print(random() * 10) # 0.0 ~ 10.0 미만의 임의의 값 생성
print(int(random() * 10)) # 0 ~ 10 미만의 임의의 값 생성
print(int(random() * 10) + 1) # 0 ~ 10 이하의 임의의 값 생성

print(randrange(1, 46)) # 1 ~ 46 미만의 임의의 값 생성

print(randint(1, 45)) # 1 ~ 45 이하의 임의의 값 생성

문자열

sentence = '나는 사람입니다'
print(sentence)
sentence2 = "파이썬은 쉬워요"
print(sentence2)
sentence3 = """
나는 사람이고,
파이썬은 쉬워요
"""
print(sentence3)
결과
나는 사람입니다
파이썬은 쉬워요

나는 사람이고,
파이썬은 쉬워요

슬라이싱

jumin = "990120-1234567"

print("성별 : " + jumin[7])
print("연 : " + jumin[0:2]) # 0 부터 2 직전까지 (0, 1)
print("생년월일 : " + jumin[:6]) # 처음부터 6 직전까지
print("뒤 7자리 : " + jumin[7:]) # 7 부터 끝까지
print("뒤 7자리 (뒤에부터): " + jumin[-7:]) # 맨 뒤에서 7번째부터 끝까지
결과
성별 : 1 연 : 99 생년월일 : 990120 뒤 7자리 : 1234567 뒤 7자리 (뒤에부터): 1234567

문자열처리함수

python = "Python is Amazing"
print(python.lower()) # python is amazing 소문자로
print(python.upper()) # PYTHON IS AMAZING 대문자로
print(python[0].isupper()) # True
print(len(python)) # 17
print(python.replace("Python", "Java")) # Java is Amazing

index = python.index("n")
print(index) # 5
index = python.index("n", index + 1) # 두번째 n을 찾아라
print(index) # 15

print(python.find("Java")) # 원하는 값이 없을 때에는 -1 반환
#print(python.index("Java")) # 원하는 값이 없을 때에는 오류를 내며 종료
print("hi")

print(python.count("n")) # 2

문자열포멧

print("a" + "b")
print("a", "b")

# 방법 1
print("나는 %d살입니다." % 20)
print("나는 %s을 좋아해요." % "파이썬")
print("Apple 은 %c로 시작해요." % "A")
# %s
print("나는 %s살입니다." % 20)
print("나는 %s색과 %s색을 좋아해요." % ("파란", "빨간"))

# 방법 2
print("나는 {}살 입니다.".format(20))
print("나는 {}색과 {}색을 좋아해요".format("파란", "빨간"))
print("나는 {0}색과 {1}색을 좋아해요.".format("파란", "빨간"))
print("나는 {1}색과 {0}색을 좋아해요.".format("파란", "빨간"))

# 방법 3
print("나는 {age}살이며, {color}색을 좋아해요.".format(age = 20, color = "빨간"))
print("나는 {age}살이며, {color}색을 좋아해요.".format(color = "빨간", age = 20))

# 방법 4
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")

탈출문자

# print("백문이 불여일견\n백견이 불여일타")

# # \' \" : 문장 내에서 따옴표
# # 저는 "kyungeune"입니다.
# print("저는 \"kyungeune\"입니다.")
# print('저는 "kyungeune"입니다.')
# print("저는 'kyungeune'입니다.")

# # \\ : 문장 내에서 \
# print("C:\\kyungeune\\PythonWorkspace")

# \r : 커서를 맨 앞으로 이동
print("Red Apple\rPine") # PineApple

# \b : 백스페이스 (한 글자 삭제)
print("Redd\bApple") # RedApple

# \t : 탭
print("Red\tApple") # Red   Apple
더보기
QUIZ
url = "http://naver.com" # 원하는 값 : naver의 처음 세 자리 + 글자 내 'e' 개수 + "!" 로 구성

 

# 내 풀이
site = url[7:len(url)-4]
print(site[0:3] + str(len(site)) + str(site.count("e")) +"!")

 

# 유튜브 풀이
my_str = url.replace("http://", "")
my_str = my_str[:my_str.index(".")] # 처음부터 . 직전까지
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!"
print("{1}의 비밀번호는 {0} 입니다.".format(password, url))

리스트

# 리스트 []

subway = ["유재석", "조세호", "박명수"]
print(subway)

# 조세호씨가 몇 번째 칸에 타고 있는가
print(subway.index("조세호"))

# 하하씨가 다음 정류장에서 다음 칸에 탐
subway.append("하하")
print(subway)

# 정형돈씨를 유재석 / 조세호 사이에 태워봄
subway.insert(1, "정형돈")
print(subway)

# 지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
print(subway.pop())
print(subway)

print(subway.pop())
print(subway)

print(subway.pop())
print(subway)

# 같은 이름의 사람이 몇 명 있는지 확인
subway.append("유재석")
print(subway)
print(subway.count("유재석"))

# 정렬도 가능
num_list = [5,2,4,3,1]
num_list.sort() # 오름차순 정렬
print(num_list)

# 순서 뒤집기 가능
num_list.reverse()
print(num_list)

# 모두 지우기
num_list.clear()
print(num_list)

# 다양한 자료형 함께 사용
mix_list = ["조세호", 20, True]
print(mix_list)

# 리스트 확장
num_list.extend(mix_list)
print(num_list)

사전

cabinet = {3:"유재석", 100:"김태호"}  # 열쇠(key)가 3이고 유재석이 사용중
print(cabinet[3])
print(cabinet[100])

print(cabinet.get(3))
print(cabinet[5]) # 오류내면서 종료
print(cabinet.get(5)) # None 출력
print(cabinet.get(5, "사용 가능")) # None 대신 출력할 것 작성
print("hi")

print(3 in cabinet) # True
print(5 in cabinet) # False

cabinet = {"A-3":"유재석", "B-100":"김태호"}
print(cabinet["A-3"])
print(cabinet["B-100"])

# 새 손님
print(cabinet)
cabinet["A-3"] = "김종국"
cabinet["C-20"] = "조세호" # key를 만들고 값을 넣겠다
print(cabinet)

# 간 손님
del cabinet["A-3"]
print(cabinet)

# key 들만 출력
print(cabinet.keys()) # dict_keys(['A-3', 'B-100'])

# value 들만 출력
print(cabinet.values()) # dict_values(['유재석', '김태호'])

# key, value 쌍으로 출력
print(cabinet.items()) # dict_items([('A-3', '유재석'), ('B-100', '김태호')])

# 목욕탕 폐점
cabinet.clear()
print(cabinet) # {}

튜플

# 튜플 : list와 다르게 변경, 추가 불가능
menu = ("돈까스", "치즈까스")
print(menu[0])
print(menu[1])

# name = "김종국"
# age = 20
# hobby = "코딩"
# print(name, age, hobby)

(name, age, hobby) = ("김종국", 20, "코딩")
print(name, age, hobby)

집합(set)

# 집합 (set)
# 중복 안 됨, 순서 없음
my_set = {1,2,3,3,3}
print(my_set)

java = {"유재석", "김태호", "양세형"}
python = set(["유재석", "박명수"])

# 교집합 (java 와 python 을 모두 할 수 있는 개발자)
print(java & python) # {'유재석'}
print(java.intersection(python))

# 합집합 (java 할 수 있거나 python 할 수 있는 개발자)
print(java | python)
print(java.union(python))

# 차집합 (java 할 수 있지만 python 은 할 줄 모르는 개발자)
print(java - python)
print(java.difference(python))

# python 할 줄 아는 사람이 늘어남
python.add("정준하")
print(python)

java.remove("김태호")
print(java)

자료구조의 변경

menu = {"커피", "우유", "주스"}
print(menu, type(menu))

menu = list(menu)
print(menu, type(menu)) # ['우유', '커피', '주스'] <class 'list'>

menu = tuple(menu)
print(menu, type(menu)) # ('커피', '우유', '주스') <class 'tuple'>

menu = set(menu)
print(menu, type(menu)) # {'주스', '우유', '커피'} <class 'set'>

if문

weather = input("오늘 날씨는 어때요?")
if weather == "비" or weather == "눈":
    print("우산을 챙기세요")
elif weather == "미세먼지":
    print("마스크를 챙기세요")
else:
    print("준비물 필요 없어요.")


temp = int(input("기온은 어때요?"))
if 30 <= temp:
    print("너무 더워요. 나가지 마세요.")
elif 10 <= temp and temp < 30:
    print("괜찮은 날씨예요")
elif 0 <=  temp < 10:
    print("외투를 챙기세요")
else:
    print("너무 추워요. 나가지 마세요.")

for문

# randrange()
for waiting_no in range(1, 6): # 1, 2, 3, 4, 5
    print("대기번호 : {0}".format(waiting_no))

starbucks = ["아이언맨", "토르", "그루트"]
for customer in starbucks:
    print("{0}, 커피가 준비되었습니다.".format(customer))

while문

customer = "토르"
index = 5
while index >= 1:
    print("{0}, 커피가 준비되었습니다. {1} 번 남았어요.".format(customer, index))
    index -= 1;
    if(index == 0):
        print("커피는 폐기처분 되었습니다.")

customer = "아이언맨"
while True:
    print("{0}, 커피가 준비되었습니다.".format(customer))

# ctrl + c : 강제종료

customer = "토르"
person = "Unknown"

while person != customer:
    print("{0}, 커피가 준비 되었습니다.".format(customer))
    person = input("이름이 어떻게 되세요?")

continue와 break

absent = [2, 5] 
no_book = [7]
for student in range(1, 11): # 1 ~ 10
    if student in absent:
        continue
    elif student in no_book:
        print("오늘 수업 여기까지. {0}는 교무실로 따라와".format(no_book))
        break
    print("{0}, 책을 읽어봐".format(student))

한 줄 for문

students = [1,2,3,4,5]
print(students)
students = [i+100 for i in students]
print(students)

students = ["Iron man", "Thor", "I am groot"]
students = [len(i) for i in students]
print(students)

students = ["Iron man", "Thor", "I am groot"]
students = [i.upper() for i in students]
print(students)
더보기
from random import *

 

cnt = 0 # 총 탑승 승객 수
for i in range(1, 51):
    time = randrange(5, 51) # 5~50분 소요시간
    if 5 <= time <= 15:
        print("[O] {0}번째 손님 (소요시간 : {1}분)".format(i, time))
        cnt+=1
    else:
        print("[ ] {0}번째 손님 (소요시간 : {1}분)".format(i, time))
   
print("총 탑승 승객 : {0} 분".format(cnt))

for문 추가

for j in range(14, i, -1):
# i 값부터 14까지 거꾸로 반복하라

함수

def open_account():
    print("새로운 계좌가 생성되었습니다.")

def deposit(balance, money): # 입금
    print("입금이 완료되었습니다. 잔액은 {0}원입니다.".format(balance+money))
    return balance + money

def withdraw(balance, money): # 출금
    if balance >= money:
        print("출금이 완료되었습니다. 잔액은 {0} 원 입니다.".format(balance - money))
        return balance - money
    else:
        print("출금이 완료되지 않았습니다. 잔액은 {0} 원 입니다.".format(balance))
        return balance
    
def withdraw_night(balance, money): # 저녁에 출금
    commission = 100 # 수수료 100원
    return commission, balance - money - commission


balance = 0
balance = deposit(balance, 1000)
# balance = withdraw(balance, 500)
commission, balance = withdraw_night(balance, 500)
print("수수료 {0} 원이며, 잔액은 {1} 원 입니다.".format(commission, balance))

기본값

# def profile(name, age, main_lang):
#     print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}"\
#           .format(name,age,main_lang))

# profile("유재석",20,"파이썬")
# profile("조세호",25,"자바")

# 같은 학교, 학년, 반, 수업

def profile(name, age=17, main_lang="파이썬"):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}" \
          .format(name,age,main_lang))
    

profile("유재석")
profile("김태호")

키워드값

def profile(name, age, main_lang):
    print(name,age,main_lang)

profile(name="유재석",main_lang="파이썬",age=20)
profile(main_lang="자바",name="김태호",age=25)

가변인자

 

# def profile(name,age,lang1,lang2,lang3,lang4,lang5):
#     print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ") # 문장을 출력하고 이어서 계속 다음 문장 출력
#     print(lang1,lang2,lang3,lang4,lang5)

def profile(name,age,*language): # 가변 인자 *
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ") # 문장을 출력하고 이어서 계속 다음 문장 출력
    for lang in language:
        print(lang, end=" ")
    print()

profile("유재석",20,"Python","Java","C","C++","C#","JavaScript")
profile("김태호",25,"Kotlin","Swift")

지역변수와 전역변수

gun = 10

def checkpoint(soldiers):
    global gun
    gun=gun-soldiers
    print("[함수 내] 남은 총: {0}".format(gun))

print("전체총 : {0}".format(gun))
checkpoint(2) # 두 명이 경계근무를 나감
print("남은 총 : {0}".format(gun))
gun = 10

def checkpoint_ret(gun, soldiers):
    gun=gun-soldiers
    print("[함수 내] 남은 총: {0}".format(gun))
    return gun

print("전체총 : {0}".format(gun))
gun = checkpoint_ret(gun,2) # 두 명이 경계근무를 나감
print("남은 총 : {0}".format(gun))
더보기

 

def std_weight(height, gender):
    if gender == "여자":
        return height * height * 21
    else:
        return height * height * 22

 

height = 175
gender = "남자"
weight = round(std_weight(height / 100, gender), 2)
print("키 {0}cm {1}의 표준체중은 {2}kg 입니다".format(height,gender,weight))

표준입출력

import sys
print("Python", "Java") # Python Java
print("Python", "Java", sep="") # PythonJava
print("Python", "Java", sep=" ") # Python Java
print("Python", "Java", "JavaScript", sep=" vs ") # Python vs Java vs JavaScript
print("Python", "Java", sep=",", end="?") # Python,Java?

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

scores = {"수학":0, "영어":50, "코딩":100}
for subject, score in scores.items():
    # print(subject, score)
    print(subject.ljust(8), str(score).rjust(4), sep=":") # ljust(8) 8개의 공간을 확보하고 왼쪽으로 정렬을 해라

# 은행 대기순번표
# 001, 002, 003, 004, 005, ...
for num in range(1,21):
    print("대기번호 : "+str(num).zfill(3)) # zfill(3) 3개의 공간을 확보하고 값이 없으면 0으로 채워달라

answer = input("아무 값이나 입력하세요")
print(type(answer))
print("입력하신 값은 "+answer+"입니다.")

다양한 출력포멧

# 빈 자리는 빈 공간으로 두고, 오른쪽 정렬을 하되, 총 10자리 공간을 확보
print("{0: >10}".format(500)) # {0: (빈 공간은 스페이스로 놓고)>(오른쪽 정렬을 하되)10(10자리 공간을 확보하면서)} 500을 출력해달라

# 양수일 땐 +로 표시, 음수일 땐 -로 표시
print("{0: >+10}".format(500))
print("{0: >+10}".format(-500))

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

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

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

# 3자리마다 콤마를 찍어주기, +-부호도 붙이고, 자릿수 확보하기
# 돈이 많으면 행복하니까 빈 자리는 ^로 채워주기
print("{0:^<+30,}".format(100000000))

# 소수점 출력
print("{0:f}".format(5/3))

# 소수점 특정 자리수까지만 표시
print("{0:.2f}".format(5/3))

파일입출력

score_file = open("score.txt", "w", encoding="utf8")
print("코딩 : 1000", file=score_file)
print("토익 : 950", file=score_file)
score_file.close()

score_file = open("score.txt", "a", encoding="utf8") # 내용이 존재하는 파일에 이어쓰기
score_file.write("과학 : 800")
score_file.write("\n토플 : 110")
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(), end="") # 줄별로 읽기, 한 줄 읽고 커서는 다음 줄로 이동
print(score_file.readline(), end="")
score_file.close()

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

score_file = open("score.txt", "r", encoding = "utf8")
lines = score_file.readlines() # list 형태로 저장
for line in lines:
    print(line, end="")
score_file.close()

pickle (피클)

import pickle

profile_file = open("profile.pickle", "wb")
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:
    print(pickle.load(profile_file))
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())

클래스 & __init__ 

# name = "마린"
# hp = 40
# damage = 5

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

# tank_name = "탱크"
# tank_hp = 150
# tank_damage = 35

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

# tank2_name = "탱크"
# tank2_hp = 150
# tank2_damage = 35

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




# ==> 클래스(붕어빵 기계틀)를 사용해서 구현




class Unit:
    def __init__(self, name, hp, damage):
        self.name = name
        self.hp = hp
        self.damage = damage
        print("{0} 유닛이 생성되었습니다.".format(self.name))
        print("체력 {0}, 공격력 {1}\n".format(self.hp,self.damage))

# marine1 = Unit("마린", 40, 5)
# marine2 = Unit("마린", 40, 5)
# tank = Unit("탱크", 150, 35)

wraith1 = Unit("빼앗은 레이스", 80 , 5)
print("유닛이름 : {0}, 공격력 : {1}".format(wraith1.name, wraith1.damage))

wraith2 = Unit("빼앗은 레이스", 80 , 5)
wraith2.clocking = True

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

메소드

class Unit:
    def __init__(self, name, hp, damage):
        self.name = name
        self.hp = hp
        self.damage = damage
        print("{0} 유닛이 생성되었습니다.".format(self.name))
        print("체력 {0}, 공격력 {1}\n".format(self.hp,self.damage))

class AttackUnit:
    def __init__(self, name, hp, damage):
        self.name = name
        self.hp = hp
        self.damage = damage
    
    def attack(self, location):
        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, 50)
firebat1.attack("5시")

firebat1.damaged(25)
firebat1.damaged(25)

# 결과
# 파이어뱃 : 5시 방향으로 적군을 공격 합니다. [공격력 50]
# 파이어뱃 : 25 데미지를 입었습니다.
# 파이어뱃 : 현재 체력은 25 입니다.
# 파이어뱃 : 25 데미지를 입었습니다.
# 파이어뱃 : 현재 체력은 0 입니다.
# 파이어뱃 : 파괴되었습니다.

상속

# 일반 유닛
class Unit:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

# 공격 유닛
class AttackUnit(Unit): # 상속
    def __init__(self, name, hp, damage):
        Unit.__init__(self, name, hp)
        self.damage = damage

다중상속