챗봇을 만들다 보면 랜덤확률에 대한 기능을 구현해야 할 때가 자주 생기는 것 같아.
아래 함수는 자바스크립트 기준으로 작성했어.
function r_d(a) {
var b = Math.floor(Math.random() * a);
return b + 1;
};
코드가 길어지면 오류나거나 검토할 때를 비롯한 많은 경우에 불편한 것 같아서 최대한으로 줄였어.
가져갈 사람이 있을진 몰라도 가져갈때 가져가더라도 구조이해는 하고 가져가야 자기껄로 쓸 수 있어ㅎㅎ.
대충그냥 랜덤기능이기 때문에 r_d로 함수이름 선언해줬고 파라미터 a 는 아무거나 넣었어.
Math.random()으로 0부터 1 사이의 랜덤한 수를 생성하고
생성된 난수에 파라미터로 넣을 숫자값을 곱해줘.
그런다음 바로 Math.floor함수로 소수부분을 제거해줘.
파라미터로 5를 넣으면 0, 1, 2, 3, 4 중에 하나가 랜덤으로 출력되는 것 같아.
그렇기에 리턴값으로 b에 1을 더해줘서 출력해줘.
이렇게하면 5를 넣었을 시 반환되는 값은 1, 2, 3, 4, 5 중 하나로 랜덤하게 출력!!
만약 조건으로 20%의 확률로만 실행되게 하고싶다면?
/*function r_d(a) {
var b = Math.floor(Math.random() * a);
return b + 1;
};*/
//위에 저 함수를 만들었거나 다른데서 저 함수를 가져왔다고 가정
var c = 5; /*c라는 변수에 5가 담겨있다고 가정*/
if(r_d(c)==1){ /*1,2,3,4,5 중 하나를 랜덤으로 출력 후 1이 나왔다면 참*/
return (수행할 행동)
}
이제 이걸 응용해서 사용해보자!
프밍 한달차라 확실하진 않지만 대부분의 프로그래밍 언어들은 배열이라는게 있는 것 같아.
그걸 응용하다보니 배열 안에 객체?나 변수? 또는 값들을 여러개 넣고 랜덤으로 출력하는 기능이 필요할 때도 있었어.
아래 코드는 위에서 사용한 20%의 확률로 원하는 배열의 랜덤값을 출력하는 사용 예시야.
var c = 5;
var a = ['a','b','c','d','e'];
if(r_d(c)){
aa = a[r_d(a.length)-1] /* a배열의 길이만큼을 r_d()함수의 파라미터값으로 넣어준다*/
return aa; /*aa라는 변수에 a의 배열 중 랜덤한 값을 지정해 넣어줌*/
}
(r_d(a.length)에서 1을 빼준 이유는 배열은 0이 1이기에 결과값에 1을 빼 줘야함ㅎㅎ)
더 응용해볼 수도 있고 해 본 적도 있지만
기록용이기도 하고 다른사람의 창의력을 방해할 수도 있으니 이렇게까지만 기록해 둬야겠어.