본문 바로가기
컴퓨터 프로그래밍/python

Python 표준 모듈

by JaeBaek 2020. 8. 13.

Standard modules(Pxhere)

 

■ 수학 (Mathematics)

★ 임포트 (Import)

 파이썬에서 모듈은 코드를 작성해 놓은 스크립트 파일로서 이 안에 함수, 변수, 클래스 등이 정의 되어있습니다. 자주 사횽하는 기능을 표준 모듈로 미리 작성을 하여 설치해 두기 때문에 필요시 불러와서 사용을 하면 됩니다. 각 모듈들에 해당하는 함수의 종류도 다양하게 있으니 잘 알아 두어야합니다. 각 모듈을 불러오기 위해서는 Import 명령을 사용하면 됩니다. 너무나도 많은 모듈들이 있기 때문에 가장 많이 쓰이는 모듈들만 설명을 드리도록 하겠습니다. 

 

 만약 수학문제를 계산하는 코드를 작성하고 싶다고 한다면 제곱근이나 사인, 코사인, 로그 등 다양한 기능을 사용해야 합니다. 이러한 경우에 math 모듈을 사용하면 됩니다.

Import - 2제곱근 구하기

import math

print(math.sqrt(2))

result 1.4142135623730951

 

 

import math의 선언은 math 모듈에 작성된 모든 상수와 함수를 다 가져오는 것을 의미합니다. 이렇게 하는 것은 항상 sqrt를 사용할 때 항상 math.sqrt()를 적어줘야 하는 것을 의미합니다. 만약 특정함수만을 계속해서 사용한다면 다음 문법을 사용하시면 됩니다.

from 모듈 import 함수명

 이런식으로 from을 사용해서 import 했다면 sqrt(2)로 사용을 할 수 있습니다. 그리고 math와 같이 비교적 짧은 모듈도 있지만 긴 모듈들은 적는거 자체가 시간이 오래 걸릴 수 있습니다. 따라서 as를 사용하여 짧은 이름으로 바꿔줄 수 있습니다.

import - as
import math as m
print(m.sqrt(2))

 

★ 수학 모듈 (math modules)

더 많은 수학 계산을 위해서 간단히 math 모듈의 함수들을 설명드리도록 하겠습니다.

 

※ 수학 모듈에 정의된 상수

상수 설명
pi 원주율 상수
tau 원주율의 두배
e 자연 대수 상수
inf 무한대 값
nan 숫자가 아닌 값

 

※ 수학 모듈에 정의된 함수

함수 설명
sqrt(x) x의 제곱근
pow(x,y) x의 y승을 계산
hypot(x,y) 피타고라스의 정리에 의거해 x 제곱 + y 제곱근을 구한다.
factorial(x) x의 계승 (x는 양의 정수)
six(x) , cos(x) , tan(x) 삼각함수 (x는 라디안)
asin(x) , acos(x) , atan(x) , atan2(x) 역삼각함수 (x는 라디안)
sinh(s) , cosh(x) , tanh(x) 쌍곡선 삼각함수 (x는 라디안)
asinh(x) , acosh(x) , atanh(x) 쌍곡선 역삼각함수 (x는 라디안)
degrees(x) 라디안 값을 각도로 변환
radians(x) 각도를 라디안 값으로 변환
ceil(x) 수직선 오른쪽의 올림 값 계산
floor(x) 수직선 왼쪽의 내림 값 계산
fabs(x) x의 절대값을 구한다.
trunc(x) x의 소수점 이하를 버린다.
log(x,base) base에 대한 x의 로그 구하기. (base 생략시 자연로그)
gcd(a,b) a,b의 최대공약수를 구한다.

 

★ 모듈 통계 (Module statistics)

함수 설명
mean 평균을 취한다.
harmonic_mean 조화평균을 취한다.
median 중앙값을 구한다. 짝수인 경우 보간 값을 계산한다.
median_low 중앙값을 구한다. 집합 내의 낮은 값을 선택한다.
median_high 중앙값을 궇나다. 집합 내의 높은 값을 선택한다.
median_grouped 그룹 연속 중앙값을 구한다.
mode 최반값을 구한다.
pstdev 모표준편차를 구한다.
stdev 표준편차를 구한다.
variance 분산을 구한다.

 

■ 시간 (Time)

★ Time

time 모듈은 날짜와 시간 관련 기능을 제공합니다. 대표적인 함수는 현재 시간을 조사하는 time인데 유닉스는 1970년 1월 1일 자정을 기준으로 경과한 시간을 초 단위로 표현하는데 이를 에폭(Epoch) 시간 or 유닉스 시간이라고 합니다.

time
import time
print(time.time())
result 1597303512.7394595

이 값은 지금까지 경과한 시간을 초로 나타낸 값입니다. 이 값을 ctime 함수로 넘겨주면 에폭 시간을 문자열로 바꿔 줍니다.

ctime

import time

t=time.time()

print(time.ctime())

result Thu Aug 13 16:27:06 2020

결과를 보면 시간이  저희가 보통 읽는 시간의 순서랑 다릅니다. 따라서 요소들을 분리하여 나타내기 쉽도록 만들어 보겠습니다. 먼저 시간 요소를 분리하는 방법은 localtime 함수를 이용해 현지 시간을 구하는 방법과 gmtime을 이용해 세계 표준 시간을 구하는 방법이 있습니다.

time-structure

import time

t=time.time()

print(time.localtime(t))

result time.struct_time(tm_year=2020, tm_mon=8, tm_mday=13, tm_hour=16, tm_min=31, tm_sec=53, tm_wday=3, tm_yday=226, tm_isdst=0)

이 값을 유추해서 우리가 읽기 쉽도록 만들어 출력을 하면 다음과 같습니다.

time-localtime

import time

now=time.localtime()

print("%d년 %d월 %d일" %(now.tm_year,now.tm_mon,now.tm_mday))

print("%d:%d:%d"%(now.tm_hour,now.tm_min,now.tm_sec))

result 2020년 8월 13일
16:37:8

 

★ 실행 시간 측정 (Runnung time measurement)

 만약 A라는 코드와 B라는 코드가 있는데 어떤 것이 성능이 더 좋은 것인지 알고 싶다면 실행 시간을 측정하면 됩니다. 측정을 하는 방법으로는 코드의 첫줄에 현재시각을 지정하고, 실행이 끝난후 현재시각을 측정한다음 두 시간을 빼면 코드를 실행하는데 걸린 시간을 측정할 수 있습니다.

elapsed time

import time

start=time.time()

for a in range(1000):

    print(a)

end=time.time()

print(end-start)

result 0.24531197547912598 # 경과 시간

 

 

 sleep 함수 : CPU를 지정한 시간만큼 잠재워 아무것도 하지 않고 시간을 끄는 것을 의미합니다. 예를들어서 저번에 작성했던 구구단을 작성하는 프로그램같은 경우에 한꺼번에 바로 계산을 해버리면 잘 볼 수 없기 때문에 각 계산마다 조금의 시간을 주어 확인을 하면서 계산을 할 수 있도록 합니다.

sleep

import time

for i in range(2,10):

    for j in range(2,10):

        print("%d * %d = %d"%(i,j,i*j))

        time.sleep(1)

    print(" ")

 

 

★ 달력 (calendar)

 달력을 출력하고 싶다면 혹은 활용하고 싶다면 calendar 모듈을 이용하면 됩니다. 예시와 함께 각각의 기능을 보여드리겠습니다.

calendar

import calendar

print(calendar.calendar(2020)) # 2020년 달력 전체

print(calendar.month(2020,8)) # month(년,월)

print(calendar.weekday(2020,8,15)) # weekday(년,월,일) -> 요일 출력

 

 

■ 난수 (random)

★ 난수 함수 (Random function)

무작위의 수를 생성하는 기능으로 random 함수는 0에서 1미만의 실수 하나를 생성합니다.

 

ramdom

import random

for i in range(5):

    print(random.random())

result 0.9046111108660525
0.007947562857682167
0.09557542336628022
0.24521803971998268
0.06853300375573212

 

위와 같이 0과 1미만의 수를 무작위로 나열되는 것을 확인 할 수 있습니다. 추가적으로 일정 범위의 정수 난수를 불러오고 싶다면 다음과 같은 함수를 사용하시면 됩니다.

randint(begin, end)

randint

import random

for i in range(5):

    print(random.randint(1,10),end=' ')

result

1 9 2 9 3

 

특정범위의 실수 난수를 생성을 할 때에는 uniform 함수를 사용합니다.

uniform(begin,end)

uniform

import random

for i in range(5):

    print(random.uniform(1,10))

result

8.433389463473315
7.281565681822941
7.251262582547056
3.350781467248593
1.804596041176738

 

선택의 기능을 하는 함수로는 choice 함수가 있습니다. choice함수는 리스트에서 임의의 요소 하나를 골라 리턴합니다. 

choice
import random
match=["가위","바위","보"]
print(random.choice(food))

 

shuffle함수는 리스트의 요소를 무작위로 바꿔줍니다. 

shuffle

import random

match=["가위","바위","보"]

random.shuffle(match)

print(match)

random.shuffle(match)

print(match)

result

['보', '바위', '가위']
['가위', '바위', '보']

 

sample 함수는 리스트의 항목 중 n개를 무작위로 뽑아 새로운 리스트를 만듭니다. 

sample(변수명, 뽑을 개수)

sample

import random

match=["가위","바위","보"]

print(random.sample(match,2))

result

['바위', '가위']

 

★ 산수 문제 내기 (Arithmetic problem)

난수로 무작위 숫자 두 개를 고른 후 산수 문제를 출제하는 프로그램을 작성해보겠습니다.

random modules

import random

n1=random.randint(1,100)

n2=random.randint(1,100)

que="%d + %d =  " %(n1,n2)

c=int(input(que))

if c==n1+n2:

    print("정답 !")

else:

    print("틀렸습니다.")

result

61 + 46 =  107
정답 !

 

★ 숫자 맞추기 게임 (Number matching game)

컴퓨터의 정수 난수를 맞추는 게임을 코딩해보도록 하겠습니다.

random, infinite while

import random

sec=random.randint(1,100)

while True:

    n=int(input("숫자 입력 : "))

    if n>sec:

        print("%d 보다 작습니다."%n)

    elif n<sec:

        print("%d 보다 큽니다."%n)

    else:

        print("정답!")

        break

result
숫자 입력 : 50
50 보다 큽니다.
숫자 입력 : 75
75 보다 큽니다.
숫자 입력 : 87
87 보다 큽니다.
숫자 입력 : 93
93 보다 큽니다.
숫자 입력 : 96
96 보다 작습니다.
숫자 입력 : 95
정답!

 

댓글