[ ๋น๋น๋น ] Python Study #4
๐ํ์: ๊น๋ฏผ์, ๋์์ฐ, ๋ฐฐ๋์ค, ์ ์์, ์ํจ์
๐๊ธฐ๊ฐ: 3/26(ํ) ~ 4/1(์) # 4์ฃผ์ฐจ
๐ํ์ต ๋ฒ์: 05-1 ํด๋์ค 05-2 ๋ชจ๋ 05-3 ํจํค์ง 05-4 ์์ธ ์ฒ๋ฆฌ 05-5 ๋ด์ฅ ํจ์ 05-6 ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ 05-7 ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๐๋ชฉ์ฐจ
05-1. ํด๋์ค
05-2. ๋ชจ๋
05-3. ํจํค์ง
05-4. ์์ธ ์ฒ๋ฆฌ
05-5. ๋ด์ฅ ํจ์
05-6. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
05-7. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1. ํด๋์ค(์์ฑ์: ๋ฐฐ๋์ค)
1-1. ๊ฐ์ฒด์ ์ธ์คํฐ์ค
1-2. ํด๋์ค์ ์์ฑ์
ํด๋์ค์ ์ธ์คํด์ค์ setdata ๋ฉ์๋๋ฅผ ์ํํ์ง ์๊ณ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๋จผ์ ์ํํ๋ฉด
'AttributeError: '[์ฃผ์ด์งํด๋์ค]' object has no attribute '[๋งค๊ฐ๋ณ์]'' ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ์ ์ค์ ํด์ผ ํ ํ์๊ฐ ์์ ๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๊น๊ฐ์ ์ค์ ํ๋ ๊ฒ๋ณด๋ค ์์ฑ์๋ฅผ
๊ตฌํํ๋ ๊ฒ์ด ์์ ํ๋ค. ์์ฑ์(constructor)๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
ํ์ด์ฌ ๋ฉ์๋ ๋ช ์ __init__๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ฉ์๋๋ ์์ฑ์๊ฐ ๋๋ค.
1-3. ํด๋์ค์ ์์
ํด๋์ค์ ์์(inheritance)์ ์ด๋ค ํด๋์ค๋ฅผ ๋ง๋ค ๋ ๋ค๋ฅธ ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ์ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ ๋งํ๋ค.
class ํด๋์ค_์ด๋ฆ(์์ํ _ํด๋์ค_์ด๋ฆ) ์ผ๋ก ์์ฑํ์ฌ ์ฌ์ฉํ๋ค.
1-4. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
๋ถ๋ชจ ํด๋์ค(์์ํ ํด๋์ค)์ ์๋ ๋ฉ์๋๋ฅผ ๋์ผํ ์ด๋ฆ์ผ๋ก ๋ค์ ๋ง๋๋ ๊ฒ์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(method overriding)์ด๋ผ๊ณ ํ๋ค. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๋ฉด ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋ ๋์ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
1-5. ํด๋์ค๋ณ์
ํด๋์ค์์ ์ ์ธํ ๋ณ์๊ฐ ํด๋์ค๋ณ์์ด๋ค. ํด๋์ค๋ณ์๋ ๊ฐ์ฒด๋ณ์์ ๋ฌ๋ฆฌ ํด๋์ค๋ก ๋ง๋ ๋ชจ๋ ๊ฐ์ฒด์ ๊ณต์ ๋๋ค๋ ํน์ง์ด ์๋ค. ํด๋์ค_์ด๋ฆ.ํด๋์ค๋ณ์ ๋ก ์์ฑํ์ฌ ์ฌ์ฉํ๋ค.
if) ํด๋์ค๋ณ์์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ฒด๋ณ์๋ฅผ ์์ฑํ๋ฉด?
๊ฐ์ฒด๋ณ์๋ ํด๋์ค๋ณ์์ ๋์ผํ ์ด๋ฆ์ผ๋ก ์์ฑํ ์ ์์ผ๋ฉฐ, ๋์ผํ ์ด๋ฆ์ ๊ฐ์ฒด๋ณ์๋ฅผ ์์ฑํ๋๋ผ๋ ํด๋์ค๋ณ์์ ๊ฐ์ ๋ณํ์ง ์๋๋ค.
์์ฑ์ : ๋์์ฐ
05-2 ๋ชจ๋
๋ชจ๋ : ํจ์๋ ๋ณ์ ๋๋ ํด๋์ค๋ฅผ ๋ชจ์๋์ ํ์ด์ฌ ํ์ผ
๋ชจ๋ ๋ง๋ค๊ธฐ
#mod1.py
def add(a,b):
return a+b
def sub(a,b):
return a-b
์์ ๊ฐ์ด ํ์ผ์ ๋ง๋ค๊ณ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ๋ค.(์ฌ๊ธฐ์ C:\doit ๋๋ ํฐ๋ฆฌ)
๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
๋ฐ๋์ mod1.py๋ฅผ ์ ์ฅํ C:\doit ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ ํ ์์ ๋ฅผ ์งํํด์ผํ๋ค. ๊ทธ๋์ผ ๋ํํ ์ธํฐํ๋ฆฌํฐ์์ mod1.py ๋ชจ๋์ ์ฝ์ ์ ์๋ค.
>>> import mod1
>>> print(mod1.add(3,4))
7
>>> print(mod1.sub(4,2))
2
*import๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ์ด๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ฅ๋ ๋๋ ํฐ๋ฆฌ์ ์๋ ๋ชจ๋๋ง ๋ถ๋ฌ์ฌ ์ ์๋ค.
import์ ์ฌ์ฉ ๋ฐฉ๋ฒ
import ๋ชจ๋_์ด๋ฆ
from ๋ชจ๋_์ด๋ฆ import ๋ชจ๋_ํจ์
→ ๋ชจ๋ ์ด๋ฆ ์์ด ํจ์ ์ด๋ฆ๋ง ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ
๋ชจ๋ ์ด๋ฆ์ ๋ถ์ด์ง ์๊ณ ํจ์๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด?
1๋ฒ์งธ ๋ฐฉ๋ฒ
from ๋ชจ๋_์ด๋ฆ import ๋ชจ๋_ํจ์1, ๋ชจ๋_ํจ์2
2๋ฒ์งธ ๋ฐฉ๋ฒ
from ๋ชจ๋_์ด๋ฆ import *
*๋ฌธ์๋ '๋ชจ๋ ๊ฒ'์ด๋ผ๋ ๋ป์ผ๋ก, ๋ชจ๋์ ๋ชจ๋ ํจ์๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
if __name__=="__main__":
ํด๋น ๊ตฌ๋ฌธ์ด ์ฌ์ฉ๋ ํ์ด์ฌ ํ์ผ์ ์ง์ ์คํํ์ ๋๋ง ์๋ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋ค ๋ผ๋ ์๋ฏธ
ํด๋์ค๋ ๋ณ์ ๋ฑ์ ํฌํจํ ๋ชจ๋
#mod2.py
PI = 3.141592
class Math:
def solv(self,r):
return PI*(r**2)
def add(a,b):
return a+b
>>> a = mod2.Math()
>>> print(a.solv(2))
12.566368
>>> print(mod2.add(mod2.PI,4.4))
7.541592
๋ค๋ฅธ ํ์ผ์์ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
๋ค๋ฅธ ํ์ด์ฌ ํ์ผ์์๋ import ๋ชจ๋_์ด๋ฆ ์ผ๋ก ๋ชจ๋์ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ธฐ ์ํด์๋ ์๋ก๋ง๋ ํ์ผ์ ๋ถ๋ฌ์ค๋ ค๋ ํ์ผ์ด ๋์ผํ ๋๋ ํฐ๋ฆฌ์ ์์ด์ผํ๋ค.
๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์ ์๋ ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ
sys ๋ชจ๋ : ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์๋ ๋๋ ํฐ๋ฆฌ ํ์ธ
sys.path : ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์๋ ๋๋ ํฐ๋ฆฌ ๋ชฉ๋ก ํ์ธ
PYTHONPATH : ๋๋ ํฐ๋ฆฌ ์ด๋์ด๋ ๋ณ๋์ ๋ชจ๋ ์ถ๊ฐ ์์ ์์ด ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋ ๋ชจ๋์ ๋ถ๋ฌ์ ์ฌ์ฉ ๊ฐ๋ฅ
05-3 ํจํค์ง
ํจํค์ง : ๊ด๋ จ์๋ ๋ชจ๋์ ์งํฉ
์ฅ์
1. ๊ณต๋ ์์ ์ด๋ ์ ์ง ๋ณด์ ๋ฑ ์ฌ๋ฌ ๋ฉด์์ ์ ๋ฆฌํ๋ค.
2. ๋ค๋ฅธ ๋ชจ๋๊ณผ ์ด๋ฆ์ด ๊ฒน์น๋๋ผ๋ ๋ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
ํจํค์ง ๋ง๋ค๊ธฐ
1. ๋๋ ํฐ๋ฆฌ ๋ฐ์ ์๋ธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๊ณ .py ํ์ผ๋ค์ ๋ง๋ ๋ค.
2. ๊ฐ ๋๋ ํฐ๋ฆฌ์ __init__.py ํ์ผ์ ๋ง๋ค์ด ๋๊ธฐ๋ง ํ๊ณ ๋ด์ฉ์ ์ผ๋จ ๋น์ ๋๋ค.
3. echo.py ํ์ผ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
def echo_test():
print("echo")
4. render.py ํ์ผ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
def render_test():
print("render")
5. ๊ธฐ์กด์ ๋ง๋ ํจํค์ง๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ๋ช ๋ น ํ๋กฌํํธ ์ฐฝ์์ set ๋ช ๋ น์ด์ PYTHONPATH ํ๊ฒฝ ๋ณ์์ ์ ์ฅํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์คํํ๋ค.
C:\ set PYTHONPATH=C:/doit #C:/doit์ ์ ์ฅํ ๋๋ ํฐ๋ฆฌ
C:\ python
>>>
ํจํค์ง ์์ ํจ์ ์คํํ๊ธฐ
1๋ฒ์งธ ๋ฐฉ๋ฒ : echo ๋ชจ๋์ import ํ์ฌ ์คํํ๋ ๋ฐฉ๋ฒ
2๋ฒ์งธ ๋ฐฉ๋ฒ : echo ๋ชจ๋์ด ์๋ ๋๋ ํฐ๋ฆฌ๊น์ง๋ฅผ from...importํ์ฌ ์คํํ๋ ๋ฐฉ๋ฒ
(์์์ importํ ๋ชจ๋ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ธํฐํ๋ฆฌํฐ๋ฅผ ๋ค์ ์์ํ ํ ์์ค๋ฅผ ์ ๋ ฅํ๋ ๊ฒ์ด ์ข๋ค.)
3๋ฒ์งธ ๋ฐฉ๋ฒ : echo ๋ชจ๋์ echo_test ํจ์๋ฅผ ์ง์ importํ์ฌ ์คํํ๋ ๋ฐฉ๋ฒ
__init__.py ์ ์ฉ๋
__init__.py ํ์ผ์ ํด๋น ๋๋ ํฐ๋ฆฌ๊ฐ ํจํค์ง์ ์ผ๋ถ์์ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
โ ํจํค์ง ๋ณ์ ๋ฐ ํจ์ ์ ์
VERSION = 3.5
def print_version_info():
print(f"The version of this game is {VERSION}."
>>> import game
>>> print(game.VERSION)
3.5
>>> game.print_version_info()
The version of this game is 3.5
โ ํจํค์ง ๋ด ๋ชจ๋์ ๋ฏธ๋ฆฌ import
__init__.py ํ์ผ์ ํจํค์ง ๋ด์ ๋ค๋ฅธ ๋ชจ๋์ ๋ฏธ๋ฆฌ importํ์ฌ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์์ ๊ฐํธํ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํ๋ค.
from.graphic.render import render_test
VERSION = 3.5
def print_version_info():
print(f"The version of this game is {VERSION}."
>>> import game
>>> game.render_test()
render
โ ํจํค์ง ์ด๊ธฐํ
__init__.py ํ์ผ์ ํจํค์ง๋ฅผ ์ฒ์ ๋ถ๋ฌ์ฌ ๋ ์คํ๋์ด์ผ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
๋จ, ์ด๊ธฐํ ์ฝ๋๋ ํ ๋ฒ ์คํ๋ ํ์๋ ๋ค์ import๋ฅผ ์ํํ๋๋ผ๋ ์คํ๋์ง ์๋๋ค.
from.graphic.render import render_test
VERSION = 3.5
def print_version_info():
print(f"The version of this game is {VERSION}."
print("Initializing game...")
>>> import game
Initializing game...
>>>
__all__
์๋ธ ๋๋ ํฐ๋ฆฌ์์ *์ ์ฌ์ฉํ์ฌ import ํ ๊ฒฝ์ฐ, ์ด๊ณณ์ ์ ์๋ ํน์ ๋ชจ๋๋ง importํ๋ค.
__all__ = ['echo']
>>> form game.sound import *
Initializing game...
>>> echo.echo_test()
echo
relative ํจํค์ง
๋๋ ํฐ๋ฆฌ์ ๋ชจ๋์์ ํน์ ๋๋ ํฐ๋ฆฌ์ ํน์ ๋ชจ๋์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
from game.sound.echo import echo_test
def render_test():
print("render")
echo_test()
์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ import ํ ์๋ ์์ง๋ง ๋ค์๊ณผ ๊ฐ์ด relativeํ๊ฒ importํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
from ..sound.echo import echo_test
def render_test():
print("render")
echo_test()
์ ๊ทผ์ | ์ค๋ช |
.. | ๋ถ๋ชจ ๋๋ ํฐ๋ฆฌ |
. | ํ์ฌ ๋๋ ํฐ๋ฆฌ |
05-4 ์์ธ ์ฒ๋ฆฌ
์ค๋ฅ๋ ์ธ์ ๋ฐ์ํ๋๊ฐ?
1. ์กด์ฌํ์ง ์๋ ํ์ผ์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ ๋
2. 0์ผ๋ก ๋ค๋ฅธ ์ซ์๋ฅผ ๋๋๋ ๊ฒฝ์ฐ
3. ์กด์ฌํ์ง ์๋ ์ธ๋ฑ์ค ๊ฐ์ ์ง์ ํ๋ ๊ฒฝ์ฐ
4. ๊ธฐํ ๋ฑ๋ฑ
์ค๋ฅ ์์ธ ์ฒ๋ฆฌ ๊ธฐ๋ฒ
โ try-except ๋ฌธ
try:
...
except [๋ฐ์์ค๋ฅ [as ์ค๋ฅ๋ณ์]]:
...
try ๋ธ๋ก ์ํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด except ๋ธ๋ก์ด ์ํ๋๋ค. ํ์ง๋ง try ๋ธ๋ก์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด except ๋ธ๋ก์ ์ํ๋์ง ์๋๋ค.
1. try-except ๋ง ์ฐ๋ ๋ฐฉ๋ฒ
try:
...
except:
...
*์ด ๊ฒฝ์ฐ์๋ ์ค๋ฅ์ ์ข ๋ฅ์ ์๊ด์์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด except ๋ธ๋ก์ ์ํํ๋ค.
2. ๋ฐ์ ์ค๋ฅ๋ง ํฌํจํ except ๋ฌธ
try:
...
except ๋ฐ์์ค๋ฅ:
...
*์ด ๊ฒฝ์ฐ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ except๋ฌธ์ ๋ฏธ๋ฆฌ ์ ํด ๋์ ์ค๋ฅ์ ๋์ผํ ์ค๋ฅ์ผ ๊ฒฝ์ฐ์๋ง except ๋ธ๋ก์ ์ํํ๋ค๋ ๋ป์ด๋ค.
3. ๋ฐ์ ์ค๋ฅ์ ์ค๋ฅ ๋ณ์ ๊น์ง ํฌํจํ except๋ฌธ\
try:
...
except ๋ฐ์์ค๋ฅ as ์ค๋ฅ๋ณ์:
...
โ try-finally ๋ฌธ
try ๋ฌธ ์ํ ๋์ค ์์ธ ๋ฐ์ ์ฌ๋ถ์ ์๊ด์์ด ํญ์ ์ํ๋๋ค. ๋ณดํต finally ์ ์ ์ฌ์ฉํ ๋ฆฌ์์ค๋ฅผ close ํด์ผ ํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
try:
f = open('foo.txt', 'w')
(...์๋ต...)
finally:
f.close()
์ฌ๋ฌ ๊ฐ์ ์ค๋ฅ ์ฒ๋ฆฌํ๊ธฐ
try:
...
except ๋ฐ์์ค๋ฅ1:
...
except ๋ฐ์์ค๋ฅ2:
...
2๊ฐ ์ด์์ ์ค๋ฅ๋ฅผ ๋์ผํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ํจ๊ป ๋ฌถ์ด ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
โ try-else ๋ฌธ
try:
...
except [๋ฐ์์ค๋ฅ [as ์ค๋ฅ๋ณ์]]:
...
else:
...
try๋ฌธ ์ํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด except์ , ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด else์ ์ด ์ํ๋๋ค.
์ค๋ฅ ํํผํ๊ธฐ
try๋ฌธ ์์์ FileNotFoundError๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, pass๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๊ทธ๋ฅ ํํผํ๋๋ก ํ๋ค.
์ค๋ฅ ์ผ๋ถ๋ฌ ๋ฐ์์ํค๊ธฐ
raise ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ์ค๋ฅ๋ฅผ ๊ฐ์ ๋ก ๋ฐ์์ํจ๋ค.
class Bird:
def fly(self):
raise NotImplementedError
์์ธ ๋ง๋ค๊ธฐ
1๋ฒ์งธ ๋ฐฉ๋ฒ : ํ์ด์ฌ ๋ด์ฅ ํด๋์ค์ธ Exception ํด๋์ค๋ฅผ ์์ํ์ฌ ๋ง๋ ๋ค.
class MyError(Exception):
pass
2๋ฒ์งธ ๋ฐฉ๋ฒ : ์์ธ ์ฒ๋ฆฌ ๊ธฐ๋ฒ ์ฌ์ฉ
์์ฑ์: ๊น๋ฏผ์
05-5 ๋ด์ฅ ํจ์
-์์ฃผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ฃผ๋ก.
1.abs
abs(x)๋ ์ด๋ค ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ๋ ๊ทธ ์ซ์์ ์ ๋๊ฐ์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
2.all
all(x)๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ x๋ฅผ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฐ์ผ๋ฉฐ ์ด x์ ์์๊ฐ ๋ชจ๋ ์ฐธ์ด๋ฉด True, ๊ฑฐ์ง์ด ํ๋๋ผ๋ ์์ผ๋ฉด False๋ฅผ ๋ฆฌํดํ๋ค.
3.any
any(x)๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ x๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ x์ ์์ ์ค ํ๋๋ผ๋ ์ฐธ์ด ์์ผ๋ฉด True๋ฅผ ๋ฆฌํดํ๊ณ x๊ฐ ๋ชจ๋ ๊ฑฐ์ง์ผ ๋๋ง False๋ฅผ ๋ฆฌํดํ๋ค. ์ฆ, all(x)์ ๋ฐ๋๋ก ์๋ํ๋ค.
4.divmod
divmod(a, b)๋ 2๊ฐ์ ์ซ์ a, b๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ a๋ฅผ b๋ก ๋๋ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ํํ๋ก ๋ฆฌํดํ๋ค.
5.enumerate
enumerate๋ ‘์ด๊ฑฐํ๋ค’๋ผ๋ ๋ป์ด๋ค. ์ด ํจ์๋ ์์๊ฐ ์๋ ๋ฐ์ดํฐ(๋ฆฌ์คํธ, ํํ, ๋ฌธ์์ด)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ธ๋ฑ์ค ๊ฐ์ ํฌํจํ๋ enumerate ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค.
6.filter
filter๋ ‘๋ฌด์์ธ๊ฐ๋ฅผ ๊ฑธ๋ฌ ๋ธ๋ค’๋ผ๋ ๋ป์ผ๋ก, filter ํจ์๋ ์ด์ ๋น์ทํ ๊ธฐ๋ฅ์ ํ๋ค.
7.id
id(object)๋ ๊ฐ์ฒด๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ฐ์ฒด์ ๊ณ ์ ์ฃผ์๊ฐ(๋ ํผ๋ฐ์ค)์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
8.input
input([prompt])๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ ํจ์์ด๋ค. ์ ๋ ฅ ์ธ์๋ก ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด ๊ทธ ๋ฌธ์์ด์ ํ๋กฌํํธ๊ฐ ๋๋ค.
9.isinstance
isinstance(object, class) ํจ์๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๊ฐ์ฒด, ๋ ๋ฒ์งธ ์ธ์๋ก ํด๋์ค๋ฅผ ๋ฐ๋๋ค. ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ฐ์ฒด๊ฐ ๊ทธ ํด๋์ค์ ์ธ์คํด์ค์ธ์ง๋ฅผ ํ๋จํ์ฌ ์ฐธ์ด๋ฉด True, ๊ฑฐ์ง์ด๋ฉด False๋ฅผ ๋ฆฌํดํ๋ค.
>>> class Person: pass
...
>>> a = Person()
>>> isinstance(a, Person)
True
์ ์๋ a ๊ฐ์ฒด๊ฐ Person ํด๋์ค์ ์ํด ์์ฑ๋ ์ธ์คํด์ค๋ผ๋ ๊ฒ์ ํ์ธ์์ผ ์ค๋ค.
>>> b = 3
>>> isinstance(b, Person)
False
b๋ Person ํด๋์ค๋ก ๋ง๋ ์ธ์คํด์ค๊ฐ ์๋๋ฏ๋ก False๋ฅผ ๋ฆฌํดํ๋ค.
10.list
list(iterable)์ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ๋ฆฌํดํ๋ ํจ์์ด๋ค.
>>> list("python")
['p', 'y', 't', 'h', 'o', 'n']
>>> list((1,2,3))
[1, 2, 3]
11.max
max(iterable)์ ์ธ์๋ก ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ทธ ์ต๋๊ฐ์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
>>> max([1, 2, 3])
3
>>> max("python")
'y'
12.min
min(iterable)์ max ํจ์์ ๋ฐ๋๋ก, ์ธ์๋ก ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ทธ ์ต์๊ฐ์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
>>> min([1, 2, 3])
1
>>> min("python")
'h'
13.str
str(object)๋ ๋ฌธ์์ด ํํ๋ก ๊ฐ์ฒด๋ฅผ ๋ณํํ์ฌ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
>>> str(3)
'3'
>>> str('hi')
'hi'
14.sum
sum(iterable)์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฉ์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
>>> sum([1,2,3])
6
>>> sum((4,5,6))
15
15.tuple
tuple(iterable)์ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ํํ๋ก ๋ฐ๊พธ์ด ๋ฆฌํดํ๋ ํจ์์ด๋ค. ๋ง์ฝ ์ ๋ ฅ์ด ํํ์ธ ๊ฒฝ์ฐ์๋ ๊ทธ๋๋ก ๋ฆฌํดํ๋ค.
>>> tuple("abc")
('a', 'b', 'c')
>>> tuple([1, 2, 3])
(1, 2, 3)
>>> tuple((1, 2, 3))
(1, 2, 3)
16.type
type(object)๋ ์ ๋ ฅ๊ฐ์ ์๋ฃํ์ด ๋ฌด์์ธ์ง ์๋ ค ์ฃผ๋ ํจ์์ด๋ค.
>>> type("abc")
<class 'str'>
>>> type([ ])
<class 'list'>
>>> type(open("test", 'w'))
<class '_io.TextIOWrapper'>
์์ฑ์ : ์ ์์
05-6 ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โถ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋?
ํ์ค๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฉํ ํ๋ก๊ทธ๋จ์ ๋ชจ์๋์ ๊ฒ์ผ๋ก, ๋์๊ด์ฒ๋ผ ์ํ๋ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์๋ค.
โ datetime.date
- ์ฐ, ์, ์ผ๋ก ๋ ์ง๋ฅผ ํํํ ๋ ์ฌ์ฉํ๋ ํจ์
์ด ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋ ์ง์ ์ฐจ์ด๋ฅผ ์ฝ๊ฒ ํ์ธํ ์ ์๋ค.
โ time
1) time.time
: ํ์ฌ ์๊ฐ์ ์ค์ ํํ๋ก ๋ฆฌํดํ๋ ํจ์
2) time.localtime
: time.time()์ด ๋ฆฌํดํ ์ค์ซ๊ฐ์ ์ฌ์ฉํด์ ์ฐ, ์, ์ผ, ์ ๋ถ, ์ด, ... ์ ํํ๋ก ๋ฐ๊พธ์ด ์ฃผ๋ ํจ์
3) time.asctime
: time.localtime ๊ฐ ๋ฆฌํด๋ ํํ ํํ์ ๊ฐ์ ์ธ์๋ก ๋ฐ์์ ๋ ์ง์ ์๊ฐ์ ์์๋ณด๊ธฐ ์ฌ์ด ํํ๋ก ๋ฆฌํดํ๋ ํจ์
4) time.ctime
: time.asctime(time.localtime(time.time()))์ ๊ฐ๋จํ๊ฒ ๋ํ๋ธ ๊ฒ
5) time.strftime
: ์๊ฐ์ ๊ด๊ณ๋ ๊ฒ์ ์ธ๋ฐํ๊ฒ ํํํ๋ ํฌ๋งท ์ฝ๋ ์ ๊ณต
ํฌ๋งท์ฝ๋์ค๋ช ์
%a | ์์ผ์ ์ค์๋ง | Mon |
%A | ์์ผ | Monday |
%b | ๋ฌ์ ์ค์๋ง | Jan |
%B | ๋ฌ | January |
%c | ๋ ์ง์ ์๊ฐ์ ์ถ๋ ฅํจ. | Thu May 25 10:13:52 2023 |
%d | ์ผ(day) | [01,31] |
%H | ์๊ฐ(hour): 24์๊ฐ ์ถ๋ ฅ ํํ | [00,23] |
%I | ์๊ฐ(hour): 12์๊ฐ ์ถ๋ ฅ ํํ | [01,12] |
%j | 1๋ ์ค ๋์ ๋ ์ง | [001,366] |
%m | ๋ฌ | [01,12] |
%M | ๋ถ | [01,59] |
%p | AM or PM | AM |
%S | ์ด | [00,59] |
%U | 1๋ ์ค ๋์ ์ฃผ(์ผ์์ผ ์์) | [00,53] |
%w | ์ซ์๋ก ๋ ์์ผ | [0(์ผ), 6(ํ )] |
%W | 1๋ ์ค ๋์ ์ฃผ(์์์ผ ์์) | [00,53] |
%x | ํ์ฌ ์ค์ ๋ ์ง์ญ์ ๊ธฐ๋ฐํ ๋ ์ง ์ถ๋ ฅ | 05/25/23 |
%X | ํ์ฌ ์ค์ ๋ ์ง์ญ์ ๊ธฐ๋ฐํ ์๊ฐ ์ถ๋ ฅ | 17:22:21 |
%Y | ์ฐ๋ ์ถ๋ ฅ | 2023 |
%Z | ์๊ฐ๋ ์ถ๋ ฅ | ๋ํ๋ฏผ๊ตญ ํ์ค์ |
%% | ๋ฌธ์ % | % |
%y | ์ธ๊ธฐ ๋ถ๋ถ์ ์ ์ธํ ์ฐ๋ ์ถ๋ ฅ | 01 |
6) time.sleep
: ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๊ณ ๋ฃจํ๋ฅผ ์คํ
โ math.gcd
์ต๋ ๊ณต์ฝ์(greatest common divisor)
โ math.lcm
์ต์ ๊ณต๋ฐฐ์(least common multiple)
โ random
: ๋์๋ฅผ ๋ฐ์์ํค๋ ๋ชจ๋
# random_popํจ์ : ๋ฆฌ์คํธ ์์ ์ค์์ ๋ฌด์์๋ก ํ๋๋ฅผ ์ ํํ์ฌ ๊บผ๋ธ ๋ค์ ๊ทธ ๊ฐ์ ๋ฆฌํด
# random.choiceํจ์ : ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ฆฌ์คํธ์์ ๋ฌด์์๋ก ํ๋๋ฅผ ์ ํํ์ฌ ๋ฆฌํด
# random.sampleํจ์ : ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ๋ฌด์์๋ก ์์
โ itertools.zip_longest
: ๊ฐ์ ๊ฐ์์ ์๋ฃํ์ ๋ฌถ๋ ํ์ด์ฌ ๋ด์ฅ ํจ์์ธ zip ํจ์์ ๋๊ฐ์ด ๋์
์ด ๊ฒฝ์ฐ ํ์ ์๊ฐ ๊ณผ์ ์๋ณด๋ค ๋ง์ผ๋ฏ๋ก, ๊ณผ์ ๊ฐ์๋งํผ๋ง zip์ผ๋ก ๋ฌถ๊ฒ ๋๋ค.
โ itertools.permutation
# itertools.permutation(iterable, r) : ๋ฐ๋ณต ๊ฐ๋ฅ ๊ฐ์ฒด ์ค์์ r๊ฐ๋ฅผ ์ ํํ ์์ด์ ์ดํฐ๋ ์ดํฐ๋ก ๋ฆฌํดํ๋ ํจ์
โ itertools.combination
# itertools.combination(iterable, r) : ๋ฐ๋ณต ๊ฐ๋ฅ ๊ฐ์ฒด ์ค์์ r๊ฐ๋ฅผ ์ ํํ ์กฐํฉ์ ์ดํฐ๋ ์ดํฐ๋ก ๋ฆฌํดํ๋ ํจ์
โ funtools.reduce
# itertools.reduce(function, iterable) : ํจ์๋ฅผ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์์์ ์ฐจ๋ก๋๋ก ๋์ ์ ์ฉํ์ฌ ์ด ๊ฐ์ฒด๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ์ค์ด๋ ํจ์
โ operator.itemgetter
: ์ฃผ๋ก sorted์ ๊ฐ์ ํจ์์ key ๋งค๊ฐ๋ณ์์ ์ ์ฉํ์ฌ ๋ค์ํ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ชจ๋
# sorted ํจ์์ key ๋งค๊ฐ๋ณ์์ itemgetter() ์ ์ฉ : ๋ฆฌ์คํธ๋ฅผ ์ํ๋ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ ๊ฐ๋ฅ
โ shutil
: ํ์ผ์ ๋ณต์ฌํ๊ฑฐ๋ ์ด๋ํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋
โ glob
: ํน์ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ ์ด๋ฆ ๋ชจ๋๋ฅผ ์์์ผ ํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋
#glob(pathname) : ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ๋ค์ ๋ฆฌ์คํธ๋ก ๋ง๋ค๊ธฐ
โ pickle
: ๊ฐ์ฒด์ ํํ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ํ์ผ์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ํ๋ ๋ชจ๋
โ os
: ํ๊ฒฝ ๋ณ์๋ ๋๋ ํฐ๋ฆฌ, ํ์ผ ๋ฑ์ OS ์์์ ์ ์ดํ ์ ์๊ฒ ํด ์ฃผ๋ ๋ชจ๋
# ๋ด ์์คํ ์ ํ๊ฒฝ ๋ณ์ซ๊ฐ์ ์๊ณ ์ถ์ ๋ - os.environ
: ํ์ฌ ์์คํ ์ ํ๊ฒฝ ๋ณ์ซ๊ฐ์ ๋ฆฌํด
# ๋๋ ํฐ๋ฆฌ ์์น ๋ณ๊ฒฝํ๊ธฐ - os.chdir
: ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์์น ๋ณ๊ฒฝ
# ๋๋ ํฐ๋ฆฌ ์์น ๋๋ ค๋ฐ๊ธฐ - os.getcwd
: ํ์ฌ ์์ ์ ๋๋ ํฐ๋ฆฌ ์์น ๋ฆฌํด
# ์์คํ ๋ช ๋ น์ด ํธ์ถํ๊ธฐ - os.system
: os.system("๋ช ๋ น์ด") : ์์คํ ์์ฒด์ ํ๋ก๊ทธ๋จ์ด๋ ๊ธฐํ ๋ช ๋ น์ด๋ฅผ ํ์ด์ฌ์์ ํธ์ถ ๊ฐ๋ฅ
# ์คํํ ์์คํ ๋ช ๋ น์ด์ ๊ฒฐ๊ด๊ฐ ๋๋ ค๋ฐ๊ธฐ - os.popen
: ์์คํ ๋ช ๋ น์ด๋ฅผ ์คํํ ๊ฒฐ๊ด๊ฐ์ ์ฝ๊ธฐ ๋ชจ๋ ํํ์ ํ์ผ ๊ฐ์ฒด๋ก ๋ฆฌํด
โ zipfile
: ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ zip ํ์์ผ๋ก ํฉ์น๊ฑฐ๋ ์ด๋ฅผ ํด์ ํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋
# ํ์ผ ํฉ์น๊ธฐ : write() ํจ์
# ํ์ผ ํด์ ํ๊ธฐ : extreactall() ํจ์
# ํน์ ํ์ผ๋ง ํด์ ํ๊ธฐ : extract() ํจ์
# ํ์ผ ์์ถํ์ฌ ๋ฌถ๊ธฐ : compression, compresslevel
compression | ์์ถ ๋ฐฉ๋ฒ | ์์ถ๋ฅ | ์๋ |
1. ZIP_STORED | ์์ถํ์ง ์์ | - | ๋น ๋ฆ |
2. ZIP_DEFLATED | ์ผ๋ฐ์ ์ธ zip ์์ถ | ๋ฎ์ | ๋น ๋ฆ |
3. ZIP_BZIP2 | bzip2 ์์ถ | ๋์ | ๋๋ฆผ |
4. ZIP_LZMA | lzma ์์ถ | ๋์ | ๋๋ฆผ |
โ threading
: ํ ํ๋ก์ธ์ค ์์์ 2 ๊ฐ์ง ๋๋ ๊ทธ ์ด์์ ์ผ์ ๋์์ ์ํํ ์ ์๊ฒ ํจ
โ tempfile
: ํ์ผ์ ์์๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ ๋ ์ ์ฉํ ๋ชจ๋
# ์ค๋ณต๋์ง ์๋ ์์ ํ์ผ์ ์ด๋ฆ์ ๋ฌด์์๋ก ๋ง๋ค์ด์ ๋ฆฌํด : tempfile.mkstemp()
# ์์ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก ์ฌ์ฉํ ํ์ผ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด : tempfile.TemporaryFile()
โ traceback
: ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ์ํ ์ค๋ฅ๋ฅผ ์ถ์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋
(โผ ์์ฑ์: ์ํจ์ )
json: JSON ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ ์ฌ์ฉํ๋ ๋ชจ๋
* JSON ๋ฐ์ดํฐ: ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ถํฐ ํ์๋ ๋ฌธ์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํฌ๋งท. ์๋ฐ ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ํ๊ธฐ๋ฒ
(1) JSON ํ์ผ ์ฝ์ด์ ๋์ ๋๋ฆฌ ์๋ฃํ์ผ๋ก ๋ฆฌํดํด์ค๊ธฐ: load()
(2) ๋์ ๋๋ฆฌ๋ฅผ JSON ํ์ผ๋ก ์์ฑํ๊ธฐ: json.dump
(3) ๋์ ๋๋ฆฌ๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ง๋ค๊ธฐ: json.dumps()
์ด๋ ํ๊ธ ๋ฌธ์์ด์ด ์ฝ๋ ํํ๋ก ํ์๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์์ผ๊น?
dump(), dumps() ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์คํค ํํ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
(4) ์ถ๋ ฅ๋ JSON ๋ฌธ์์ด ๋ณด๊ธฐ ์ข๊ฒ ์ ๋ ฌ: indent ์ต์ ์ถ๊ฐ
(5) ๋์ ๋๋ฆฌ ์ธ์ ๋ฆฌ์คํธ๋ ํํ๋ JSON ๋ฌธ์์ด๋ก ๋ฐ๊ฟ ์ ์๋ค.
urllib: URL์ ์ฝ๊ณ ๋ถ์ํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋
(1) ํ์ด์ง ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ํค๋ ์ค์ ํน์ ํ์ด์ง๋ฅผ wikidocs_ํ์ด์ง_๋ฒํธ.htmlํ์ผ๋ก ์ ์ฅํ๋ ํจ์
์ด๋ ๊ฒ ํธ์ถํด๋ณด์!
ํ์ฌ ๋๋ ํ ๋ฆฌ์ https://wikidocs.net/12 ์นํ์ด์ง๊ฐ wikidocs_12.html์ด๋ผ๋ ํ์ผ๋ก ์ ์ฅ๋์๋ค.
webbrowser: ํ์ด์ฌ ํ๋ก๊ทธ๋จ์์ ์์คํ ๋ธ๋ผ์ฐ์ ๋ฅผ ํธ์ธจํ ๋ ์ฌ์ฉํ๋ ๋ชจ๋(๋ฏธํด๊ฒฐ!!!)
05-7 ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pip: ํ์ด์ฌ ๋ชจ๋์ด๋ ํจํค์ง๋ฅผ ์ฝ๊ฒ ์ค์นํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ
Faker: ํ ์คํธ์ฉ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
sympy: ๋ฐฉ์ ์์ ํ ์ ์๋ ๋ชจ๋
(1) A๊ฐ ๊ฐ์ง ๋์ x๋ผ๊ณ ํ๊ณ , ํ์ฉํ์ ์ฌ๊ณ ๋จ์ ๋์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์!
1) A๋ ๊ฐ์ง ๋์ 2/5๋ก ํ์ฉํ์ ์๋ค.
2) ํ์ฉํ์ ์ฌ๋ ๋ฐ ์ด ๋์ 1,760์์ด๋ค.
(2) ์ด์ฐจ๋ฐฉ์ ์์ ํ์ด
(3) ์ฐ๋ฆฝ๋ฐฉ์ ์์ ํ์ด
* fractions.Fraction์ผ๋ก ์ ๋ฆฌ์ ์ฐ์ฐํ๊ธฐ: ํ์ด์ฌ์์ ์ ๋ฆฌ์ ์ฐ์ฐ์ ์ ํํ๊ฒ ํ๋ ค๋ฉด fractions.Fraction์ ์ฌ์ฉํด์ผ ํจ!
๋์ค์ ํ๊ตฌํด๋ด์ผ ํ ๊ฒ
1. webbrowser ์ฝ๋ ๋ ธ์ ํ์ด์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ฐฝ์ผ๋ก ์ด๋ฌ ์๊ธธ๋, open์ ์ฌ์ฉํด์ ํด๋น ์ฌ์ดํธ๋ฅผ ์ด๊ณ ์ถ์๋๋ฐ False๊ฐ ๊ฒฐ๊ด๊ฐ์ผ๋ก ๋ด๋ค. ์์ง...
2. sympy ์ฐธ๊ณ ๋ก Fraction๋ง๊ณ float๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฌ๋ค. ์์ธ์ง?