๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/Python

ํŒŒ์ด์ฌ ๊ธฐ๋ณธํŽธ(2/2)

by - ์˜คํŠธ - 2020. 8. 27.

www.youtube.com/watch?v=kWiCuklohdY 

* ์œ„ ๋งํฌ์— ์žˆ๋Š” ์˜์ƒ์„ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•˜๋ฉฐ ๊ธ€์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค

 

ํ‘œ์ค€ ์ž…๋ ฅ

answer = input("์•„๋ฌด ๊ฐ’์ด๋‚˜ ์ž…๋ ฅํ•˜์„ธ์š” : ") # ์ˆซ์ž(str(answer)๋กœ ํ•˜๋Š”๊ฒŒ ์ข‹๊ธด ํ•จ), ๋ฌธ์ž์—ด ์ž…๋ ฅ ํ•  ๋•Œ ์ž˜ ์ถœ๋ ฅ๋จ

print("์ž…๋ ฅํ•˜์‹  ๊ฐ’์€ " + answer + "์ž…๋‹ˆ๋‹ค.")

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด ํ•ญ์ƒ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ €์žฅ(?) - ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด์ง€

 

 

๋‹ค์–‘ํ•œ ์ถœ๋ ฅ format

# ๋นˆ ์ž๋ฆฌ๋Š” ๋นˆ๊ณต๊ฐ„(ใ…‡)์œผ๋กœ ๋‘๊ณ , ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ์„ ํ•˜๋˜, ์ด 10์ž๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณด

print("{0:ใ…‡>10}".format(500)) --> 500

 

# ์–‘์ˆ˜์ผ ๋• +๋กœ ํ‘œ์‹œ, ์Œ์ˆ˜์ผ ๋• -๋กœ ํ‘œ์‹œ

print("{0:ใ…‡>+10}".format(500)) --> +500

print("{0:ใ…‡>+10}".format(-500)) --> -500

 

# ์™ผ์ชฝ ์ •๋ ฌํ•˜๊ณ , ๋นˆ์นธ์œผ๋กœ _๋กœ ์ฑ„์›€

print("{0:_>10}".format(500)) --> +500______

 

# 3์ž๋ฆฌ ๋งˆ๋‹ค ์ฝค๋งˆ๋ฅผ ์ฐ์–ด์ฃผ๊ธฐ

print("{0:,}".format(100000000000)) --> 100,000,000,000

 

# 3์ž๋ฆฌ ๋งˆ๋‹ค ์ฝค๋งˆ๋ฅผ ์ฐ์–ด์ฃผ๊ธฐ, +- ๋ถ€ํ˜ธ๋„ ๋ถ™์ด๊ธฐ

print("{0:+,}".format(100000000000)) --> +100,000,000,000

print("{0:+,}".format(-100000000000)) --> -100,000,000,000

 

# 3์ž๋ฆฌ ๋งˆ๋‹ค ์ฝค๋งˆ๋ฅผ ์ฐ์–ด์ฃผ๊ธฐ, ๋ถ€ํ˜ธ๋„ ๋ถ™์ด๊ณ , ์ž๋ฆฟ์ˆ˜๋„ ํ™•๋ณดํ•˜๊ธฐ 

# ๋ˆ์ด ๋งŽ์œผ๋ฉด ํ–‰๋ณตํ•˜๋‹ˆ๊นŒ ๋นˆ ์ž๋ฆฌ๋Š” ^ ๋กœ ์ฑ„์›Œ์ฃผ๊ธฐ

print("{0:^(๋นˆ์ž๋ฆฌ์ฑ„์šฐ๊ธฐ)<(์™ผ์ชฝ์ •๋ ฌ)+(+-๋ถ™์—ฌ์ฃผ๊ธฐ)30(์ด30์ž๋ฆฌ),(3์ž๋ฆฌ๋งˆ๋‹ค ์ฝค๋งˆ)}".format(100000000000) --> +100,000,000,000^^^^^^^

 

# ์†Œ์ˆ˜์  ์ถœ๋ ฅ

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

 

# ์†Œ์ˆ˜์  ํŠน์ • ์ž๋ฆฌ์ˆ˜ ๊นŒ์ง€๋งŒ ํ‘œ์‹œ (์†Œ์ˆ˜์  3์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ)

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

 

 

ํŒŒ์ผ ์ž…์ถœ๋ ฅ

score_file = open("score.txt", "w", encoding="utf8") # ์‹คํ–‰ ์‹œ, score.txt ํŒŒ์ผ์ด ์ƒ๊น€, w : ์“ฐ๊ธฐ ์šฉ๋„

print("์ˆ˜ํ•™ : 0", file=score_file)

print("์˜์–ด : 50", file=score_file)

score_file.close() # ํŒŒ์ผ์€ ํ•ญ์ƒ ๋‹ซ์•„์ค˜์•ผ ํ•จ

 

score_file = open("score.txt", "a", encoding="utf8) # a : ๋ฎ์–ด ์“ฐ๊ธฐ

score_file.write("๊ณผํ•™ : 80")

score_file.write("\n์ฝ”๋”ฉ : 100")

score_file.close()

 

score_file = open("score.txt", "r", encoding="utf8") # r : ์ฝ์–ด์˜ค๊ธฐ

print(score_file.read()) # score.txt ๋ชจ๋“  ๋‚ด์šฉ ์ถœ๋ ฅํ•˜๊ธฐ

score_file.close()

 

score_file = open("score.txt", "r", encoding="utf8") 

print(score_file.readline()) # ์ค„๋ณ„๋กœ ์ฝ๊ธฐ, ํ•œ ์ค„ ์ฝ๊ณ  ์ปค์„œ๋Š” ๋‹ค์Œ ์ค„๋กœ ์ด๋™, ์ž๋™ ์ค„๋ฐ”๊ฟˆ

print(score_file.readline(), end="") # ์ค„๋ฐ”๊ฟˆ ์•ˆํ•˜๋Š” ์˜ต์…˜

print(score_file.readline(), end=""

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.pickle ํŒŒ์ผ์ด ์ƒ์„ฑ

profile_file = open("profile.pickle", "wb") # b : binary

profile = {"์ด๋ฆ„":"๋ฐ•๋ช…์ˆ˜", "๋‚˜์ด":30, "์ทจ๋ฏธ":["์ถ•๊ตฌ","๊ณจํ”„","์ฝ”๋”ฉ"]}

print(profile) ---> {'์ด๋ฆ„':'๋ฐ•๋ช…์ˆ˜', '๋‚˜์ด':30, '์ทจ๋ฏธ':['์ถ•๊ตฌ','๊ณจํ”„','์ฝ”๋”ฉ']}

pickle.dump() # profile์— ์žˆ๋Š” ์ •๋ณด๋ฅผ file์— ์ €์žฅ

profile_file.close()

 

profile_file = open("profile.pickle", "rb")

profile = pickle.load(profile_file) # file์— ์žˆ๋Š” ์ •๋ณด๋ฅผ profile์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

print(profile) ---> {'์ด๋ฆ„':'๋ฐ•๋ช…์ˆ˜', '๋‚˜์ด':30, '์ทจ๋ฏธ':['์ถ•๊ตฌ','๊ณจํ”„','์ฝ”๋”ฉ']}

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())

 

 

Quiz) ๋‹น์‹ ์˜ ํšŒ์‚ฌ์—์„œ๋Š” ๋งค์ฃผ 1ํšŒ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ณด๊ณ ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์‹คํ–‰ ์‹œ, 1์ฃผ์ฐจ.txt ๋ถ€ํ„ฐ 50์ฃผ์ฐจ.txt ๊นŒ์ง€ ์ƒ์„ฑ

for i in range(1, 51):   

with open(str(i) + "์ฃผ์ฐจ.txt", "w", encoding="utf8") as report_file:       

    report_file.write("- {0} ์ฃผ์ฐจ ์ฃผ๊ฐ„๋ณด๊ณ  -".format(i))       

    report_file.write("\n๋ถ€์„œ : ")       

    report_file.write("\n์ด๋ฆ„ : ")       

    report_file.write("\n์—…๋ฌด ์š”์•ฝ : ")

์ฐธ๊ณ ) ์ง€์šฐ๋ ค๋Š” ํŒŒ์ผ์„ ๋ˆ„๋ฅธํ›„ shift ๋ฅผ ๋ˆŒ๋Ÿฌ ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์„ ๋“œ๋ž˜๊ทธ ํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•œ๋ฒˆ์— ์‚ญ์ œ ๊ฐ€๋Šฅ

 

 

ํด๋ž˜์Šค & __init__(์ƒ์„ฑ์ž)

# ์ผ๋ฐ˜ ์œ ๋‹›

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}".format(self.hp, self.damage))

 

marine1 = Unit("๋งˆ๋ฆฐ", 40, 5) ---> ๋งˆ๋ฆฐ ์œ ๋‹›์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n์ฒด๋ ฅ 40, ๊ณต๊ฒฉ๋ ฅ 5

marine2 = Unit("๋งˆ๋ฆฐ", 40, 5) ---> ๋งˆ๋ฆฐ ์œ ๋‹›์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n์ฒด๋ ฅ 40, ๊ณต๊ฒฉ๋ ฅ 5

tank = Unit("ํƒฑํฌ", 150, 35) ---> ํƒฑํฌ ์œ ๋‹›์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n์ฒด๋ ฅ 150, ๊ณต๊ฒฉ๋ ฅ 35

marine3 = Unit("๋งˆ๋ฆฐ") # ์‚ฌ์šฉ ๋ถˆ๊ฐ€

marine3 = Unit("๋งˆ๋ฆฐ", 40) # ์‚ฌ์šฉ ๋ถˆ๊ฐ€

 

 

๋ฉค๋ฒ„ ๋ณ€์ˆ˜

# ๋ ˆ์ด์Šค : ๊ณต์ค‘ ์œ ๋‹›, ๋น„ํ–‰๊ธฐ. ํด๋กœํ‚น (์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์Œ)

wraith1 = Unit("๋ ˆ์ด์Šค", 80, 5)

print("์œ ๋‹› ์ด๋ฆ„ : {0}, ๊ณต๊ฒฉ๋ ฅ : {1}".format(wraith1.name, wraith1.damage))

 

# ๋งˆ์ธ๋“œ ์ปจํŠธ๋กค : ์ƒ๋Œ€๋ฐฉ ์œ ๋‹›์„ ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ (๋นผ์•—์Œ)

wraith2 = Unit("๋นผ์•—์€ ๋ ˆ์ด์Šค", 80, 5)wraith2.clocking = True # ์ถ”๊ฐ€๋กœ ์™ธ๋ถ€์—์„œ ๋งŒ๋“  ์ „์—ญ ๋ณ€์ˆ˜ / wraith1์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Œ

 

if wraith2.clocking == True:    print("{0} ๋Š” ํ˜„์žฌ ํด๋กœํ‚น ์ƒํƒœ์ž…๋‹ˆ๋‹ค.".format(wraith2.name))

 

 

3:53:22"


๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์—๋Š” ๋ฌด์กฐ๊ฑด self ์‚ฌ์šฉ

 

# ๊ณต๊ฒฉ ์œ ๋‹›

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, 16)

firebat1.attack("5์‹œ")

 

# ๊ณต๊ฒฉ 2๋ฒˆ ๋ฐ›๋Š”๋‹ค๊ณ  ๊ฐ€์ •

firebat1.damaged(25)

firebat1.damaged(25)

---> ํŒŒ์ด์–ด๋ฑƒ : 5์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 16] # (attack ํ•จ์ˆ˜)

ํŒŒ์ด์–ด๋ฑƒ : 25 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์–ด๋ฑƒ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 25 ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ด์–ด๋ฑƒ : 25 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์–ด๋ฑƒ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 0 ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ด์–ด๋ฑƒ : ํŒŒ๊ดด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

------------------------

์ƒ์†

# ๋ฉ”๋”• : ์˜๋ฌด๋ณ‘

 

# ์ผ๋ฐ˜ ์œ ๋‹›(=๋ถ€๋ชจ)

class Unit: 

    def __init__(self, name, hp):

        self.name = name

        self.hp = hp

        # ๋ฉ”๋”•์€ damage๋ฅผ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œ

 

# ์ผ๋ฐ˜ ์œ ๋‹›๊ณผ ๊ณต๊ฒฉ ์œ ๋‹›์ด ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์ด ์žˆ์Œ

# ๊ณต๊ฒฉ ์œ ๋‹›์ด ์ผ๋ฐ˜ ์œ ๋‹›์„ ์ƒ์†๋ฐ›๋„๋ก ์žฌ์ž‘์„ฑ

           

# ๊ณต๊ฒฉ ์œ ๋‹›(=์ž์‹)

class AttackUnit(Unit):

  def __init__(self, namehpdamage):

        Unit.__init__(self, name, hp) # ์ƒ์„ฑ์ž ํ˜ธ์ถœ

        self.damage = damage

 # ๋ฐ‘์— ์žˆ๋Š” ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์‹คํ–‰

 

 

๋‹ค์ค‘ ์ƒ์†

= ๋ถ€๋ชจ๊ฐ€ ์—ฌ๋Ÿฟ(์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์ƒ์†)

# ๋“œ๋ž์‰ฝ : ๊ณต์ฆ ์œ ๋‹›, ์ˆ˜์†ก๊ธฐ, ๋งˆ๋ฆฐ / ํŒŒ์ด์–ด๋ฑƒ / ํƒฑํฌ ๋“ฑ์„ ์ˆ˜์†ก, ๊ณต๊ฒฉ x

 

# ๋‚  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํด๋ž˜์Šค

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 __int__(self, name, hp, damage, flying_speed):        AttackUnit.__init__(self, name, hp, damage)        Flyable.__init__(self, flying_speed)

 

# ๋ฐœํ‚ค๋ฆฌ : ๊ณต์ค‘ ๊ณต๊ฒฉ ์œ ๋‹›, ํ•œ๋ฒˆ์— 14๋ฐœ ๋ฏธ์‚ฌ์ผ ๋ฐœ์‚ฌvalkyrie = FlyableAttackUnit("๋ฐœํ‚ค๋ฆฌ", 2000, 6, 5)valkyrie.fly(valkyrie.name, "3์‹œ") ---> ๋ฐœํ‚ค๋ฆฌ : 3์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚ ์•„๊ฐ‘๋‹ˆ๋‹ค. [์†๋„ 5]

 

------------------------

๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

# ์ผ๋ฐ˜ ์œ ๋‹›(=๋ถ€๋ชจ)

class Unit: 

    def __init__(self, name, hp, speed):

        self.name = name

        self.hp = hp

        self.speed = speed

 

    def move(self, location):

         print("[์ง€์ƒ ์œ ๋‹› ์ด๋™]")

         print("{0} : {1} ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. [์†๋„ {2} ]"\

            .format(self.name, location, self.speed))

 

# ๊ณต๊ฒฉ ์œ ๋‹›(=์ž์‹)

class AttackUnit(Unit):

  def __init__(self, name, hp, speed, damage):

        Unit.__init__(self, name, hp, speed) # ์ƒ์„ฑ์ž ํ˜ธ์ถœ

        self.damage = damage

 

# ๊ณต์ค‘ ๊ณต๊ฒฉ ์œ ๋‹› ํด๋ž˜์Šค

class FlyableAttackUnit(AttackUnit, Flyable):

    def __int__(self, name, hp, damage, flying_speed):

        AttackUnit.__init__(self, name, hp, 0, damage) # ์ง€์ƒ speed 0

        Flyable.__init__(self, flying_speed)

 

    def move(self, location):

        print("[๊ณต์ค‘ ์œ ๋‹› ์ด๋™]")

        self.fly(self.name, location)

 

# ๋ฒŒ์ณ : ์ง€์ƒ ์œ ๋‹›, ๊ธฐ๋™์„ฑ์ด ์ข‹์Œ

vulture = AttackUnit("๋ฒŒ์ณ", 80, 10, 20)

 

# ๋ฐฐํ‹€ํฌ๋ฃจ์ € : ๊ณต์ค‘ ์œ ๋‹›, ์ฒด๋ ฅ๋„ ๊ต‰์žฅํžˆ ์ข‹์Œ, ๊ณต๊ฒฉ๋ ฅ๋„ ์ข‹์Œ.

battlecruiser = FlyableAttackUnit("๋ฐฐํ‹€ํฌ๋ฃจ์ €", 500, 25, 3)

 

vulture.move("11์‹œ") ---> [์ง€์ƒ ์œ ๋‹› ์ด๋™]

#battlecruiser.fly(battlecruiser.name, "9์‹œ")

battlecruiser.move("9์‹œ") ---> [๊ณต์ค‘ ์œ ๋‹› ์ด๋™]

 

์‚ฌ์ง„์ด ์ž˜๋ฆฐ ๋ถ€๋ถ„์€ AttackUnit ์ž…๋‹ˆ๋‹ค

pass

# ๊ฑด๋ฌผ

class BuildingUnit(Unit):

    def __init__(self, name, hp, location):

        pass

 

# ์„œํ”Œ๋ผ์ด ๋””ํฟ : ๊ฑด๋ฌผ, 1๊ฐœ ๊ฑด๋ฌผ = 8 ์œ ๋‹›.

supply_depot = BuildingUnit("์„œํ”Œ๋ผ์ด ๋””ํฟ", 500, "7์‹œ")

 

def game_start():

    print("[์•Œ๋ฆผ] ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.")

 

def game_over():

    pass

 

game_start()

game_over()

 

 

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

 

practice_class.py

class Unit:

     def __init__(self):

        print("Unit ์ƒ์„ฑ์ž")

 

class Flyable:    def __init__(self):        print("Flyable ์ƒ์„ฑ์ž")

 

class FlyableUnit(Unit, Flyable):

    def __init__(self):

         #super().__init__()

        Unit.__init__(self) ---> Unit ์ƒ์„ฑ์ž ํ˜ธ์ถœ

        Flyable.__init__(self) ---> Flyable ์ƒ์„ฑ์ž ํ˜ธ์ถœ

 

# ๋“œ๋ž์‰ฝ

dropship = FlyableUnit()

 

4:23:20"


์Šคํƒ€ํฌ๋ž˜ํ”„ํŠธ ์ „๋ฐ˜์ „

from random import *

 

# ์ผ๋ฐ˜ ์œ ๋‹›(=๋ถ€๋ชจ)

class Unit: 

    def __init__(self, name, hp, speed):

        self.name = name

        self.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, 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))

 

# ๊ณต๊ฒฉ ์œ ๋‹›(=์ž์‹)

class AttackUnit(Unit):

  def __init__(self, name, hp, speed, damage):

        Unit.__init__(self, name, hp, speed) # ์ƒ์„ฑ์ž ํ˜ธ์ถœ

        self.damage = damage

 

  def attack(self, location):

        print("{0} : {1} ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉ ํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ {2}]"\

              .format(self.name, location, self.damage))

 

# ๋งˆ๋ฆฐ

class Marine(AttackUnit):

    def __init__(self):

        AttackUnit.__init__(self, "๋งˆ๋ฆฐ", 40, 1,5)

 

    # ์ŠคํŒ€ํŒฉ : ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ด๋™ ๋ฐ ๊ณต๊ฒฉ ์†๋„๋ฅผ ์ฆ๊ฐ€, ์ฒด๋ ฅ 10 ๊ฐ์†Œ

   def stimpack(self):

         if self.hp > 10:

            self.hp -= 10

            print("{0} : ์ŠคํŒ€ํŒฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (HP 10 ๊ฐ์†Œ)".format(self.name))

        else:

            print("{0} : ์ฒด๋ ฅ์ด ๋ถ€์กฑํ•˜์—ฌ ์ŠคํŒ€ํŒฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.".format(self.name))

 

# ํƒฑํฌ

class Tank(AttackUnit):

        # ์‹œ์ฆˆ๋ชจ๋“œ : ํƒฑํฌ๋ฅผ ์ง€์ƒ์—์„œ ๊ณ ์ •์‹œ์ผœ, ๋” ๋†’์€ ํŒŒ์›Œ๋กœ ๊ณต๊ฒฉ ๊ฐ€๋Šฅ. ์ด๋™ ๋ถˆ๊ฐ€.

        seize_developed = False # ์‹œ์ฆˆ๋ชจ๋“œ ๊ฐœ๋ฐœ ์—ฌ๋ถ€

 

        def __init__(self):

            AttackUnit.__init__(self, "ํƒฑํฌ", 150, 1, 35)

            self.seize_mode = False

 

        def set_sieze_mode(self):

           if Tank.seize_developed == False:

            return # ๊ฐœ๋ฐœ ์•ˆ๋˜์–ด์žˆ์œผ๋ฉด ๊ทธ๋ƒฅ ๋‚˜๊ฐ

 

           # ํ˜„์žฌ ์‹œ์ฆˆ๋ชจ๋“œ๊ฐ€ ์•„๋‹ ๋•Œ(๊ฐœ๋ฐœ ๋˜์–ด์žˆ๋Š” ์ƒํƒœ)

           if self.seize_mode == False:

                print("{0} : ์‹œ์ฆˆ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.".format(self.name))

                self.damage *= 2

                self.seize_mode = True

           # ํ˜„์žฌ ์‹œ์ฆˆ๋ชจ๋“œ์ผ ๋•Œ -> ์‹œ์ฆˆ๋ชจ๋“œ ํ•ด์ œ

           else:

                print("{0} : ์‹œ์ฆˆ๋ชจ๋“œ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.".format(self.name))

                self.damage /= 2

                self.seize_mode = False

 

# ๊ณต์ค‘ ๊ณต๊ฒฉ ์œ ๋‹› ํด๋ž˜์Šค

class FlyableAttackUnit(AttackUnit, Flyable):

    def __int__(self, name, hp, damage, flying_speed):

        AttackUnit.__init__(self, name, hp, 0, damage) # ์ง€์ƒ speed 0

        Flyable.__init__(self, flying_speed)

 

    def move(self, location):

        print("[๊ณต์ค‘ ์œ ๋‹› ์ด๋™]")

        self.fly(self.name, location)

 

# ๋ ˆ์ด์Šค

class Wraith(FlyableAttackUnit):

    def __init__(self):

            FlyableAttackUnit.__init__(self, "๋ ˆ์ด์Šค", 80, 20,5)

            self.clocked = False # ํด๋กœํ‚น ๋ชจ๋“œ(ํ•ด์ œ ์ƒํƒœ)

 

    def clocking(self):

            if self.clocked == True: # ํด๋กœํ‚น ๋ชจ๋“œ -> ๋ชจ๋“œ ํ•ด์ œ

                print("{0} : ํด๋กœํ‚น ๋ชจ๋“œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.".format(self.name))

                self.clocked = False

            else: # ํด๋กœํ‚น ๋ชจ๋“œ ํ•ด์ œ -> ๋ชจ๋“œ ์„ค์ •

                print("{0} : ํด๋กœํ‚น ๋ชจ๋“œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.".format(self.name))

                self.clocked = True

 

def game_start():

print("[์•Œ๋ฆผ] ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.")

 

def game_over():

print("Player : gg") # good game

print("[Player] ๋‹˜์ด ๊ฒŒ์ž„์—์„œ ํ‡ด์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.")

 

# ์‹ค์ œ ๊ฒŒ์ž„ ์‹œ์ž‘

game_start()

 

# ๋งˆ๋ฆฐ 3๊ธฐ ์ƒ์„ฑ

m1 = Marine()

m2 = Marine()

m3 = Marine()

 

# ํƒฑํฌ 2๊ธฐ ์ƒ์„ฑ

t1 = Tank()

t2 = Tank()

 

# ๋ ˆ์ด์Šค 1๊ธฐ ์ƒ์„ฑ

w1 = Wraith()

 

# ์œ ๋‹› ์ผ๊ด„ ๊ด€๋ฆฌ (์ƒ์„ฑ๋œ ๋ชจ๋“  ์œ ๋‹› append)

# ๋ชจ๋“  ์œ ๋‹› ๋ฆฌ์ŠคํŠธ์— ์ง‘์–ด ๋„ฃ๋Š”๋‹ค

attack_units = []

attack_units.append(m1)

attack_units.append(m2)

attack_units.append(m3)

attack_units.append(t1)

attack_units.append(t2)

attack_units.append(w1)

 

# ์ „๊ตฐ ์ด๋™(์ผ๊ด„์ ์œผ๋กœ 1์‹œ๋กœ ์ด๋™)

for unit in attack_units:

    unit.move("1์‹œ")

 

# ํƒฑํฌ ์‹œ์ฆˆ๋ชจ๋“œ ๊ฐœ๋ฐœ

Tank.seize_developed = True

print("[์•Œ๋ฆผ] ํƒฑํฌ ์‹œ์ฆˆ ๋ชจ๋“œ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")

 

# ๊ณต๊ฒฉ ๋ชจ๋“œ ์ค€๋น„ (๋งˆ๋ฆฐ : ์ŠคํŒ€ํŒฉ, ํƒฑํฌ : ์‹œ์ฆˆ๋ชจ๋“œ, ๋ ˆ์ด์Šค : ํด๋กœํ‚น)

for unit in attack_units:

    if isinstance(unit, Marine):

        unit.stimpack()

    elif ininstance(unit, Tank):

        unit.set_seize_mode()

    elif ininstance(unit, Wraith):

        unit.clocking() 

 

# ์ „๊ตฐ ๊ณต๊ฒฉ

for unit in attack_units:

    unit.attack("1์‹œ")

 

# ์ „๊ตฐ ํ”ผํ•ด

for unit in attack_units:

    unit.damaged(randint(5, 21)) # ๊ณต๊ฒฉ์€ ๋žœ๋ค์œผ๋กœ ๋ฐ›์Œ (5~20)

 

# ๊ฒŒ์ž„ ์ข…๋ฃŒ

game_over()

 

---> ์‹คํ–‰

[์•Œ๋ฆผ] ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ ์œ ๋‹›์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. x3

ํƒฑํฌ ์œ ๋‹›์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. x2

๋ ˆ์ด์Šค ์œ ๋‹›์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. [์†๋„ 1]

๋งˆ๋ฆฐ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. [์†๋„ 1]

๋งˆ๋ฆฐ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. [์†๋„ 1]

ํƒฑํฌ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. [์†๋„ 1]

ํƒฑํฌ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. [์†๋„ 1]

๋ ˆ์ด์Šค : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚ ์•„๊ฐ‘๋‹ˆ๋‹ค. [์†๋„ 5]

[์•Œ๋ฆผ] ํƒฑํฌ ์‹œ์ฆˆ ๋ชจ๋“œ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : ์ŠคํŒ€ํŒฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (HP 10 ๊ฐ์†Œ)

๋งˆ๋ฆฐ : ์ŠคํŒ€ํŒฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (HP 10 ๊ฐ์†Œ)

๋งˆ๋ฆฐ : ์ŠคํŒ€ํŒฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (HP 10 ๊ฐ์†Œ)

ํƒฑํฌ : ์‹œ์ฆˆ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํƒฑํฌ : ์‹œ์ฆˆ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์Šค : ํด๋กœํ‚น ๋ชจ๋“œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 5]

๋งˆ๋ฆฐ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 5]

๋งˆ๋ฆฐ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 5]

ํƒฑํฌ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 70]

ํƒฑํฌ : 1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 70]

๋ ˆ์ด์Šค  1์‹œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ตฐ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. [๊ณต๊ฒฉ๋ ฅ 20]

๋งˆ๋ฆฐ : 13 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 17 ์ž…๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : 13 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 17 ์ž…๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : 13 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฆฐ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 20 ์ž…๋‹ˆ๋‹ค.

ํƒฑํฌ : 17 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

ํƒฑํฌ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 133 ์ž…๋‹ˆ๋‹ค.

ํƒฑํฌ : 21 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

ํƒฑํฌ : ํ˜„์žฌ ์ฒด๋ ฅ์€ 129 ์ž…๋‹ˆ๋‹ค.

๋ ˆ์ด์Šค : 18 ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์Šค : ํ˜„์žฌ ์ฒด๋ ฅ์€ 62 ์ž…๋‹ˆ๋‹ค.

Player : gg

[Player] ๋‹˜์ด ๊ฒŒ์ž„์—์„œ ํ‡ด์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.

 

 

์‚ฌ์ง„์ด ์ž˜๋ฆฐ ๋ถ€๋ถ„์€ Marine ์ž…๋‹ˆ๋‹ค

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

 

    # ๋งค๋ฌผ ์ •๋ณด ํ‘œ์‹œ

    def show_detail(self):

        print(self.location, self.house_type, self.deal_type\

              , self.price, self.completion_year) 

 

house = []

house1 = House("๊ฐ•๋‚จ", "์•„ํŒŒํŠธ", "๋งค๋งค", "10์–ต", "2010๋…„")

house2 = House("๋งˆํฌ", "์˜คํ”ผ์Šคํ…”", "์ „์„ธ", "5์–ต", "2007๋…„")house3 = House("์†กํŒŒ", "๋นŒ๋ผ", "์›”์„ธ", "500/50", "2000๋…„")

 

house.append(house1)

house.append(house2)

house.append(house3)

 

print("์ด {0}๋Œ€์˜ ๋งค๋ฌผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.".format(len(houses)))

for house in houses:

    house.show_detail()

 

 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ

# ์ฒซ๋ฒˆ์งธ ์ˆซ์ž 6, ๋‘๋ฒˆ์งธ ์ˆซ์ž ์‚ผ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ -> ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

try:

    print("๋‚˜๋ˆ„๊ธฐ ์ „์šฉ ๊ณ„์‚ฐ๊ธฐ์ž…๋‹ˆ๋‹ค.")

    num = []

    nums.append(int(input("์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ")))

    nums.append(int(input("๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ")))

    print("{0} / {1} = {2}".format(num[0], num[1], num[2]))

    num1 = int(input("์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : "))

    num2 = int(input("๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : "))

    print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))

except ValueError:

    print("์—๋Ÿฌ! : ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.")

except ZeroDivisionError a err:

    print(err) # ์ •ํ™•ํ•œ ์—๋Ÿฌ ๋‚ด์šฉ ์ถœ๋ ฅ

except Exception as err:

    print("์•Œ ์ˆ˜ ์—…์Šจ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.")

    print(err) # ์ •ํ™•ํ•œ ์—๋Ÿฌ ๋‚ด์šฉ ์ถœ๋ ฅ

 

 

์—๋Ÿฌ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

try : 

    print("ํ•œ ์ž๋ฆฌ ์ˆซ์ž ๋‚˜๋ˆ„๊ธฐ ์ „์šฉ ๊ณ„์‚ฐ๊ธฐ์ž…๋‹ˆ๋‹ค.")

    num1 = int(input("์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : "))

    num2 = int(input("๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : "))

    if num1 >= 10 or num >= 10:

        raise ValueError # ํŠน์ • ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๋ฉด 

    print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)) # ํ•ด๋‹น ๋ฌธ์žฅ ์‹คํ–‰ x

except ValueError:

    print("์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•œ ์ž๋ฆฌ ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”.")

 

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

class BigNumberError(Exception):

    def __init__(self, msg):

        self.msg = msg

 

    def __str__(self):

        return self.msg

 

try 

    print("ํ•œ ์ž๋ฆฌ ์ˆซ์ž ๋‚˜๋ˆ„๊ธฐ ์ „์šฉ ๊ณ„์‚ฐ๊ธฐ์ž…๋‹ˆ๋‹ค.")

    num1 = int(input("์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : "))

    num2 = int(input("๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : "))

    if num1 >= 10 or num >= 10:

        raise BigNumberError("์ž…๋ ฅ๊ฐ’ : {0}, {1}".format(num1, num2))

    print("{0} / {1} = {2}".format(num1, num2, int(num1/num2))

except ValueError:

    print("์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•œ ์ž๋ฆฌ ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”.")

except BigNumberError as err:

    print("์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•œ ์ž๋ฆฌ ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”.")

    print(err)

finally:

    print("๊ณ„์‚ฐ๊ธฐ๋ฅผ ์ด์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.")

 

finally

finally:

    print("๊ณ„์‚ฐ๊ธฐ๋ฅผ ์ด์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.")

# ์‹คํ–‰์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋“  ์—†๋“  finally ์•ˆ์— ์žˆ๋Š” ๋ฌธ์žฅ์€ ์ถœ๋ ฅ๋จ

 

 

Quiz) ๋™๋„ค์— ํ•ญ์ƒ ๋Œ€๊ธฐ ์†๋‹˜์ด ์žˆ๋Š” ๋ง›์žˆ๋Š” ์น˜ํ‚จ์ง‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

class SoldOutError(Exception):

    pass

 

chicken = 10

waiting = 1

 

while(True): # ํ™€ ์•ˆ์—๋Š” ํ˜„์žฌ ๋งŒ์„, ๋Œ€๊ธฐ๋ฒˆํ˜ธ 1๋ถ€ํ„ฐ ์‹œ์ž‘

    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 += 1

            chicken -= order

 

            if chicken == 0:

                raise SoldOutError

 

    except ValueError:

        print("์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.")

    except SoldOutError:

        print("์žฌ๊ณ ๊ฐ€ ์†Œ์ง„๋˜์–ด ๋” ์ด์ƒ ์ฃผ๋ฌธ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")

        break # while๋ฌธ ํƒˆ์ถœ

 

 

๋ชจ๋“ˆ

theater_module.py

# ์ผ๋ฐ˜ ๊ฐ€๊ฒฉ

def price(people):

    print("{0}๋ช… ๊ฐ€๊ฒฉ์€ {1}์› ์ž…๋‹ˆ๋‹ค.".format(people, people*10000))

 

# ์กฐ์กฐ ํ• ์ธ ๊ฐ€๊ฒฉ

def price_morning(people):

    print("{0}๋ช… ์กฐ์กฐ ํ• ์ธ ๊ฐ€๊ฒฉ์€ {1}์› ์ž…๋‹ˆ๋‹ค.".format(people, people*6000))

 

# ๊ตฐ์ธ ํ• ์ธ ๊ฐ€๊ฒฉ

def price_soldier(people):

    print("{0}๋ช… ๊ตฐ์ธ ํ• ์ธ ๊ฐ€๊ฒฉ์€ {1}์› ์ž…๋‹ˆ๋‹ค.".format(people, people*4000))

 

practice.py

1)

# import theater_module

# theater_module.price(3) # 3๋ช…์ด์„œ ์˜ํ™” ๋ณด๋Ÿฌ ๊ฐ”์„ ๋•Œ ๊ฐ€๊ฒฉ

# theater_module.price_morning(4) # 4๋ช…์ด์„œ ์กฐ์กฐ ํ• ์ธ ์˜ํ™” ๋ณด๋Ÿฌ ๊ฐ”์„ ๋•Œ ๊ฐ€๊ฒฉ

# theater_module.price_soldier(5) # 5๋ช…์ด์„œ ๊ตฐ์ธ ํ• ์ธ ์˜ํ™” ๋ณด๋Ÿฌ ๊ฐ”์„ ๋•Œ ๊ฐ€๊ฒฉ

2)

# import theater_module as mv

# mv.price(3)

# mv.price_morning(4)

# mv.price_soldier(5)

3)

# from theater_module import *

# # from random import *

# price_soldier(3)

# price_morning(4)

# price_soldier(5)

4)

# from theater_module import price, price_morning

# # ์–ด๋–ค ํ•จ์ˆ˜๋งŒ ๊ฐ€์ ธ๋‹ค ์“ธ์ง€ ์„ ํƒ ๊ฐ€๋Šฅ

# price(5)

# price_morning(6)

# price_soldier(7) -> ์˜ค๋ฅ˜ ๋ฐœ์ƒ

5)

from theater_module import price_soldier as price # ๋ณ„๋ช… price๋กœ ์„ค์ •

# price(5)

 

 

ํŒจํ‚ค์ง€

: ๋ชจ๋“ˆ ๋ชจ์•„๋†“์€ ์ง‘ํ•ฉ

thailand.py

class ThailandPackage:

    def detail(self):

        print("[ํƒœ๊ตญ ํŒจํ‚ค์ง€ 3๋ฐ• 5์ผ] ๋ฐฉ์ฝ•, ํŒŒํƒ€์•ผ ์—ฌํ–‰ (์•ผ์‹œ์žฅ ํˆฌ์–ด) 50๋งŒ์›")

        

vietnam.py

class VietnamPackage:

    def detail(self):

        print("[๋ฒ ํŠธ๋‚จ ํŒจํ‚ค์ง€ 3๋ฐ• 5์ผ] ๋‹ค๋‚ญ ํšจ๋„ ์—ฌํ–‰ 60๋งŒ์›")

        

practice.py

# import travel.thailand

# #import travel.thailand.ThailandPackage

# trip_to = travel.thailand.ThailandPackage()

# trip_to.detail()

 

# from travel.thailand import ThailandPackage

# trip_to = ThailandPackage()

# trip_to.detail()

 

from travel import vietnam

trip_to = vietnam.VietnamPackage()

trip_to.detail()

 

 

__all__

#from random import *

from travel import *

#trip_to = vietnam.VietnamPackage() # ์˜ค๋ฅ˜ ๋ฐœ์ƒ

trip_to = thailand.ThailandPackage()

trip_to.detail()

 

# ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

__init__.py

__all__ = ["vietnam", "thailand"]

 

preferences -> settings -> linting -> Pyrhon Linting Enabled ์ฒดํฌ ํ•ด์ œํ•˜๋ฉด ํŒŒ์ผ Int ์˜ค๋ฅ˜ ์ œ๊ฑฐ(?)

 

 

๋ชจ๋“ˆ ์ง์ ‘ ์‹คํ–‰

thailand.py

class ThailandPackage:

    def detail(self):

        print("[ํƒœ๊ตญ ํŒจํ‚ค์ง€ 3๋ฐ• 5์ผ] ๋ฐฉ์ฝ•, ํŒŒํƒ€์•ผ ์—ฌํ–‰ (์•ผ์‹œ์žฅ ํˆฌ์–ด) 50๋งŒ์›")

 

if __name__ == "__main__":

       print("Thailand ๋ชจ๋“ˆ์„ ์ง์ ‘ ์‹คํ–‰")

       print("์ด ๋ฌธ์žฅ์€ ๋ชจ๋“ˆ์„ ์ง์ ‘ ์‹คํ–‰ํ•  ๋•Œ๋งŒ ์‹คํ–‰๋ผ์š”")

       trip_to = ThailandPackage()

       trip_to.detail()

else:

       print("Thailand ์™ธ๋ถ€์—์„œ ๋ชจ๋“ˆ ํ˜ธ์ถœ")

 

practice.py

 

 

ํŒจํ‚ค์ง€, ๋ชจ๋“ˆ ์œ„์น˜

practice.py

from travel import *

trip_to = thailand.ThailandPackage()

trip_to.detail()

 

import inspect

import random

print(inspect.getfile(random))

print(inspect.getfile(thailand))

 

 

pip install

pypi ๊ฒ€์ƒ‰ -> beautifulsoup4 ๊ฒ€์ƒ‰ -> ํŒจํ‚ค์ง€ ์„ค์น˜

https://pypi.org/project/beautifulsoup4/

 

beautifulsoup4

Screen-scraping library

pypi.org

5:46:02"


๋‚ด์žฅ ํ•จ์ˆ˜

# input : ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๋Š” ํ•จ์ˆ˜

language = input("๋ฌด์Šจ ์–ธ์–ด๋ฅผ ์ข‹์•„ํ•˜์„ธ์š”?")

print("{0}์€ ์•„์ฃผ ์ข‹์€ ์–ธ์–ด์ž…๋‹ˆ๋‹ค!".format(language))

 

# dir : ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์คฌ์„ ๋•Œ ๊ทธ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ‘œ์‹œ

print(dir())

import random # ์™ธ์žฅ ํ•จ์ˆ˜ - random์ด ์ถ”๊ฐ€

print(dir()) 

import pickle

print(dir())

 

print(dir(random)) # ๋žœ๋ค ๋ชจ๋“ˆ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค ์ถœ๋ ฅ

lst = [1, 2, 3]

print(dir(lst))

 

name = "Jim"

print(dir(name))

 

https://docs.python.org/3/library/functions.html

 

Built-in Functions — Python 3.8.5 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer or a floating po

docs.python.org

 

์™ธ์žฅ ํ•จ์ˆ˜

import ํ•ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

#glob : ๊ฒฝ๋กœ ๋‚ด์˜ ํด๋” / ํŒŒ์ผ ๋ชฉ๋ก ์กฐํšŒ (์œˆ๋„์šฐ dir)

import glob

print(glob.glob("*.py")) # ํ™•์žฅ์ž๊ฐ€ py ์ธ ๋ชจ๋“  ํŒŒ์ผ

 

# os : ์šด์˜์ฒด์ œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ

import os

print(os.getcwd()) # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ

 

folder = "sample_dir"

 

if os.path.exists(folder):

    print("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํด๋”์ž…๋‹ˆ๋‹ค.")

    os.rmdir(folder)    print(folder, "ํด๋”๋ฅผ ์‚ญ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค.")

else:

    os.makedirs(folder) # ํด๋” ์ƒ์„ฑ

    print(folder, "ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.")

print(os.listdir())

 

# time : ์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜

import timeprint(time.localtime())

print(time.strftime("%Y-%m-%d %H:%M:%S"))

 

import datetime

print("์˜ค๋Š˜ ๋‚ ์งœ๋Š” ", datetime.date.today())

 

# timedelta : ๋‘ ๋‚ ์งœ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ

today = datetime.date.today() # ์˜ค๋Š˜ ๋‚ ์งœ ์ €์žฅ

td = datetime.timedelta(days=100) # 100์ผ ์ €์žฅ

print("์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋‚œ์ง€ 100์ผ์€", today + td) # ์˜ค๋Š˜๋ถ€ํ„ฐ 100์ผ ํ›„

 

https://docs.python.org/3/library/functions.html

 

Built-in Functions — Python 3.8.5 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer or a floating po

docs.python.org

 

Quiz) ํ”„๋กœ์ ํŠธ ๋‚ด์— ๋‚˜๋งŒ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋‚จ๊ธฐ๋Š” ๋ชจ๋“ˆ์„ ๋งŒ๋“œ์‹œ์˜ค

byme.py

def sign():

    print("์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋‚˜๋„์ฝ”๋”ฉ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.")

    print("์œ ํŠœ๋ธŒ : http://youtube.com")

    print("์ด๋ฉ”์ผ : nadocoding@gmail.com")

 

practice.py

import byme

byme.sign()