오늘은 치킨이 너무 먹고싶었습니다.
요즘 너무 치킨이 먹고싶었습니다....
그래서 파이썬에게 먹어도 되냐고 물어봤습니다...
컴퓨터는 0과 1바께 모르는 멍청이이기때문에 대답하는데 조금 도움을 주었습니다.
랜덤의 랜덤의 랜덤의 랜덤함수 작성하기
boolean타입으로 한번 ox하기에는 뭔가 저의 마음을 몰라주는것 같아 랜덤의 랜덤의 랜덤함수로 만들어봤습니다.
(성능이 굉장히 안좋습니다...)
단계는 아래와 같습니다.
- ['먹는다', '안먹는다']리스트를 준비해줍니다.
- 빈 리스트도 하나 준비해줍니다.
- random한 정수를 하나 준비해줍니다
- 랜덤함 정수만큼 반복문을 돌려 빈 리스트에 '먹는다','안먹는다'를 랜덤으로 추가해줍니다.
- 무작위로 '먹는다', '안먹는다' 가 들어가 있는 리스트의 순서를 한번 섞어 줍니다.
- 이제 엄청나게 많은 '먹는다', '안먹는다' 중에 하나를 무작위로 뽑기위해 랜덤한 정수를 하나 더 뽑습니다.
(대신 최대길이는 처음만든 random한 정수를 넘지 않아야합니다.) - 인덱싱을 하여 최종적으로 먹을지 말지를 정합니다.
import random
def chicken():
destiny = ['먹는다', '안먹는다']
random_list = []
# (1)
random_float = random.random()
translated_str = str(random1).replace('0.','')
random_int = int(translated_str)
# (2)
for i in range(random_int):
random_destiny = random.choice(destiny)
random_list.append(random_destiny)
# (3)
random.shuffle(random_list)
# (4)
random_index = random.randrange(0,random_int)
return list1[random_index]
print(chicken())
사용된 랜덤모듈 메서드 설명
random.random()
0~1 사이의 실수를 반환합니다. 몇자리 까지 반환할지도 랜덤입니다.
random.choice()
반복가능한 개체를 인자로 넣어주면 그중 랜덤하게 한 값을 뽑아냅니다.
랜덤 인덱싱이라고 생각하시면 될 것 같습니다.
위의 코드에서는 '먹는다', '안먹는다' 중 하나를 뽑아주려고 사용 했습니다.
random.shuffle()
반복가능한 개체를 인자로 넣어주면 순서를 랜덤으로 섞어 줍니다.
random.randrange()
인자로는 3가지가 들어갈 수 있습니다.
(start, end, step)
- step은 옵셔널입니다
- 인자를 하나만 넣을시 end로 되고 start는 0으로 기본값이 정해집니다.
범위내에서 랜덤한 정수를 반환합니다.
로직 설명
(1)
기본적으로 파이썬 random 모듈에서는 랜덤한 정수를 반환하는 메서드가 존재하지 않습니다.
randrange나 randint의 경우는 범위를 지정해야되기 때문에 오늘 제 기준에선 랜덤이라고 할 수 없습니다.
그래서 랜덤 정수를 구하는 방법은 두가지정도가 생각납니다.
첫번째 방법은
random_float = random.random()
random_int = int(random.random() * 100000)
이렇게 랜덤한 실수에서 특정 수를 곱한후 int로 변환시켜 주는것입니다.
이것역시 자릿수를 제가 정하기 때문에 오늘 제 기준에서는 랜덤이 아닙니다.
두번째방법 위에 (1)번로직입니다.
random_float = random.random()
# 0.3195837591 type:float
translated_str = str(random1).replace('0.','')
# '3195837591' type:str
random_int = int(translated_str)
# 3195837591 type:int
이렇게 랜덤한 int값을 구했습니다.
(2)
랜덤한 정수만큼 반복문을 돌려 랜덤하게 먹을지 안먹을지 random_list에 추가해줍니다.
반복문을 돌릴때마다 random_destiny에는 '먹는다' 혹은 '안먹는다' 가 랜덤하게 할당되며 이를 random_list에 추가하는 형식 입니다.
(3)
더욱 랜덤하게 하기 위해 shuffle 메서드를 사용하여 순서를 한번 섞어줍니다
(4)
randrange 메서드를 사용하여 랜덤한 정수를 뽑아줍니다.
이때 범위는 random_list의 길이여야지 나중에 Out of index에러가 발생하지 않습니다.
마지막으로 random_list에서 무작위로 설정한 random_index를 인덱싱해주고 반환합니다.
결과
????????.......
너무 오래 걸리는것 같습니다....
그냥 random int를 구하는방식을 1번방식으로 사용하여 돌려보았습니다..
................................
대한민국은 3판 2선승제의 나라이기 때문에 오늘 치킨 먹겠습니다.
'개발자 정진관 > 개발자 이야기' 카테고리의 다른 글
당신은 왜 노력을 하나요? (0) | 2023.01.12 |
---|---|
[Wecode] Wecode 회고록 (0) | 2022.08.22 |
[고민]비전공 개발자는 어떻게 공부 해야할까? (0) | 2022.07.24 |
[Wecode] 개발자 회식 정총무의 정산이야기 (0) | 2022.07.03 |