모두의 파이썬 '19번째'시간!
'파이썬으로 수학 문제 풀기 1'시간을
가져보고자 한다.
오늘은 중학 수학 교육과정에 등장하는
'소인수분해', '경우의 수와 확률', '도형에서의 확률'을
표현해볼것이다.
소인수분해
혹시나 소인수분해를 모르는 사람들을 위해
설명 하자면 소인수분해란
'어떤 정수를 소수의 곱으로만 표현하는 것'이다.
또 여기서 '소수'란 공약수가 '1과 자기자신'이외에는
존재하지 않는 수를 말한다,
먼저 변수 'x'에는 소인수분해를 할 수를 입력한다.
그리고 'd'라는 변수를 만들어줄건데, 이 것은 x를 나눌 수이며
가장 작은 소수인 '2'로 설정을 해준다.
그리고 'while'문을 열어 'd(나누는 수)가 x(나누어지는 수) 이하일 동안...'
이라고 설정을 해주고 그 안에 '조건문(if)'를 달아준다. 조건은
'd로 x를 나눴을 때 나머지가 0이면'이고 조건에 부합할 경우
'd'를 출력하고 'x'는 'x를 d로 나눈 수'로 정의해준다.
'아닐 경우(else)'도 설정해주고
계속 나머지가 0이되는 값을 찾아주기 위해
'd = d + 1'로 해준다.
임의의 수 '24'를 입력했더니
'2x2x2x3'으로 딱 맞아떨어지게 나왔다.
주사위 실험 프로그램
두 번째 주제는 '주사위 실험 프로그램' 이다.
먼저 'random' 모듈을 불러와준다.
그런다음 'total'이란 변수를 만들어주고 값으로
'1,000,000'을 적는다. 이것은 주사위를 던지는
횟수를 뜻하는 변수로 사용할 것이다.
'ev'변수는 '주사위를 던져 2가 나온 횟수를 저장할 변수'로
사용할 것이다. 그럼다음 반복문 'for'을 넣어주고
반복문 안에 변수 'i'를 지정해준다. 반복 횟수는 'total'.
그리고 주사위 던지기를 계속 반복할 때 마다
값이 '2'가 나온 경우(조건문)를 만들어주고
2가 나오면 ev 전 값에 1씩 더해준다.(누적)
그리고 주사위를 100만번 던지는 동안
'2'가 나온 확률을 화면에 'print'로 표시 해 줄건데,
이 때 표시해줄 값은 (2가 나온 횟수 / 100만)으로
해준다.
총 '3번'을 돌려봤는데
다 '0.166 ... '의 근삿값이 도출되었다.
큰 틀은 벗어나지 않지만 매번 조금의
차이가 있는것을 볼 수 있다.
도형에서의 확률 실험 프로그램
19번 째 날 마지막 주제는
'도형에서의 확률 실험 프로그램'이다.
좌표 평면 위에 사분원이 존재한다.
이번 시간에 우리가 할 일은
1사분면 안에 랜덤하게 점을 찍었을 때
그 점이 '사분원 안에 있을 확률'을 구할 것이다.
원의 넓이는 'π'이고 사분원은
원의 '1/4' 이므로
한 변의 길이가 1인 정사각형에서
한 점을 뽑았을 때, 이 점이 빗금 친 부분에
있을 확률은 다음과 같다.
사분원의 넓이 / 정사각형의 넓이 = (π/4) / 1
∴ π/4 이다.
일단 랜덤하게 점을 찍어야하니
'random'모듈을 불러오도록 하자.
그리고 이번에도 마찬가지로
'100만번' 점을 찍도록 하겠다.
그리고 'ev' 변수는
'뽑힌 점이 사분원 안에 있는 경우'이다.
그리고 '반복문(for)'을 열고 횟수는
'total'로 지정해준다.
x,y 각각의 좌표에 랜덤한 값을 할당해주기 위해
'random.random' 함수를 쓸건데 이 함수를 쓰면
'0.0 <= 좌표값 <= 1.0' 구간 사이에서
랜덤하게 값을 지정한다.
그리고 'if x*x + y*y <= 1.0'
이 조건문이 뜻하는 바는
원점에서 점(x,y)까지의 거리 'd'를 구하는 공식이
d = 루트 x²+y²
하지만 이 경우 거리가 1이하 인지를
비교하는것이 목적이므로 제곱근을 구할 필요 없이
'x²+y²'의 값을 1.0과 비교하면 된다.
다시 한 번 이 좌표평면을 들고와서 보면
점 A(0.5, 0.2)를 이 공식에 대입하면, 원점과의 거리가
1 이하이므로 A는 사분원 안에 있는 점이다.
'x²+y² = 0.5 x 0.5 + 0.2 x 0.2 = 0.29 ≤ 1.0'
그래서 결과는 마지막 'prnit'를 보면
4를 곱했으므로 'π(3.141592...)'에
근사하게 나와야 하는데...
위 같은 수들이 무한히 반복된다.
책에 나온 명령어랑 똑같이 썼는데
왜 다른 결과가 나는지 모르겠다.
...
나중에 이유를 알게되면
게시글을 업데이트 하도록 하겠다.
2021년 12월 15일(수) 22:46PM 수정
정말 단순한 문제였다...
맨 마지막 줄 print를 for문 안에
들여쓰기를 해버려서 이상해진 것이였다.
책 처럼 결과가 3.14근처에서 나온다...!
'프로그래밍 > 파이썬' 카테고리의 다른 글
파이썬 정수(10,16,8진수) / 실수 / 한 글자 / 문자열 표현법 (0) | 2022.04.22 |
---|---|
모두의 파이썬 - DAY 20[完] (파이썬으로 수학 문제 풀기 2) (8) | 2021.12.17 |
모두의 파이썬 - DAY 18 (터틀런 만들기2) (8) | 2021.12.13 |
모두의 파이썬 - DAY 17 (터틀런 만들기1) (4) | 2021.12.11 |
모두의 파이썬 - DAY 16 (거북이 대포 게임 만들기) (6) | 2021.12.02 |
댓글