From 0c342dc37fa684e0594607b61c1297bbfd0073c8 Mon Sep 17 00:00:00 2001 From: Vhizux Date: Fri, 23 Oct 2020 21:38:54 +0200 Subject: [PATCH] added binomial distribution function --- .vscode/settings.json | 5 +++ mathgenerator/funcs/__init__.py | 1 + mathgenerator/funcs/binomial_distribution.py | 42 ++++++++++++++++++++ test.py | 4 +- 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json create mode 100644 mathgenerator/funcs/binomial_distribution.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9fadd3a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.linting.pylintEnabled": false, + "python.linting.flake8Enabled": true, + "python.linting.enabled": true +} \ No newline at end of file diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index 575dcd2..8bb773a 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -111,3 +111,4 @@ from .decimal_to_bcd import * from .circumference import * from .combine_like_terms import * from .conditional_probability import * +from .binomial_distribution import * diff --git a/mathgenerator/funcs/binomial_distribution.py b/mathgenerator/funcs/binomial_distribution.py new file mode 100644 index 0000000..73ccbe6 --- /dev/null +++ b/mathgenerator/funcs/binomial_distribution.py @@ -0,0 +1,42 @@ +from .__init__ import * + + +def factorial(n): + + if n == 1 or n == 0: + return 1 + else: + return n*factorial(n-1) + + +def newton_symbol(n, k): + return factorial(n)/(factorial(k)*factorial(n-k)) + + +def binomialDistFunc(): + + rejected_fraction = float(random.randint(30, 40)) + random.random() + batch = random.randint(10, 20) + rejections = random.randint(1, 9) + + answer = 0 + + rejected_fraction = round(rejected_fraction, 2) + + problem = "A manufacturer of metal pistons finds that, on average, {0:}% "\ + "of the pistons they manufacture are rejected because " \ + "they are incorrectly sized. What is the probability that a "\ + "batch of {1:} pistons will contain no more than {2:} " \ + "rejected pistons?".format(rejected_fraction, batch, rejections) + + for i in range(0, rejections+1): + answer += newton_symbol(batch, i)*((rejected_fraction/100.)**i) * \ + ((1 - (rejected_fraction/100.))**(batch-i)) + + answer = round(100*answer, 2) + + return problem, answer + + +binomial_distribution = Generator("Binomial distribution", 107, + "P(X