random 모듈은 랜덤한 로직이 필요할 때 사용된다.
# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용된다.
import random
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]
random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4
여기서 random.shuffle()은 return이 없어서 None을 반환한다. 나는 변수를 재선언하려 했는데, None이 찍혀서 당황했다.
def shuffle(self, x, random=None):
"""Shuffle list x in place, and return None.
Optional argument random is a 0-argument function returning a
random float in [0.0, 1.0); if it is the default None, the
standard random.random will be used.
"""
if random is None:
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i + 1)
x[i], x[j] = x[j], x[i]
else:
_warn('The *random* parameter to shuffle() has been deprecated\n'
'since Python 3.9 and will be removed in a subsequent '
'version.',
DeprecationWarning, 2)
floor = _floor
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = floor(random() * (i + 1))
x[i], x[j] = x[j], x[i]
내가 원했던 것을 구현하려면 random.sample(x,k=len(x))를 사용했어야 한다.
To shuffle an immutable sequence and return a new shuffled list, use sample(x, k=len(x)) instead.
--> 변경할 수 없는 시퀀스를 섞고 새 섞은 목록을 반환하려면 대신 sample(x, k=len(x))를 사용하십시오.
random.shuffle()이 이미 있는 반복가능한 자료형을 섞어주므로 변수를 재선언할 필요가 없다.
주의하자.
randrange()는 range()의 패턴과 동일하다.
randrange(10)은 0~9까지의 숫자중 하나를 무작위로 반환해준다.
randint()와 차이점은 인수에 들어가는 숫자를 포함하지 않는다는 것이다.
randint()는 0부터 인수의 숫자의 범위중 하나를 무작위로 반환해준다.
randrange()와 차이점은 인수에 들어가는 숫자를 포함 한다는 것이다.
datetime 모듈은 날짜를 다룰때 사용하는 모듈이다.
from datetime import datetime, timedelta
# 현재 날짜 및 시간 출력
print(datetime.now()) # 2022-09-04 03:55:32.277095
# datetime의 format code
'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ... 30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''
# string을 datetime 날짜로 변경하기
string_datetime = "22/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2022-12-25 13:20:00
# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04
# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2022-09-01 04:07:48.526502