Guest User

Untitled

a guest
Feb 19th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #!/usr/local/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from __future__ import division
  5. from operator import mul
  6.  
  7. def P(m,n):
  8. '''
  9. 基本概率计算: P(E)
  10. '''
  11. return m/n
  12.  
  13. def per(n):
  14. '''
  15. 计算阶乘
  16. '''
  17. return reduce(mul,range(n,0,-1))
  18.  
  19. def combination(n,r):
  20. '''
  21. 计算组合
  22. '''
  23. return per(n)/( per(r)*per(n-r) )
  24.  
  25. import unittest
  26. class TestPermutations(unittest.TestCase):
  27. def setUp(self):
  28. pass
  29. def testPer(self):
  30. self.assertEqual(per(5),5*4*3*2*1)
  31. def testComb(self):
  32. self.assertEqual(combination(n=4,r=2),6)
  33. self.assertEqual(int(round(combination(n=49,r=6))),13983816)
  34. def testBasicpe(self):
  35. '''
  36. P(掷一公平骰子得出6)=1/6
  37. '''
  38. self.assertEqual(P(1,6),1.0/6.0)
  39. def testAdd(self):
  40. '''
  41. 加法定理验证
  42.  
  43. 如果掷两粒公平骰子,擲出2和4的概率分别是多少?
  44. '''
  45. self.assertEqual( P(1,36),1/36 )
  46. self.assertEqual( P(1,36)+P(1,36)+P(1,36),3/36 )
  47. def testMultiplication(self):
  48. '''
  49. 乘法定理验证
  50.  
  51. 假设掷三粒公平骰子所得出数字之积为k。P(k是奇数)是多少?
  52. P(k是奇数)=P(第一个数是奇数)*P(第二个数是奇数)*P(第三个数是奇数)=3/6*3/6*3/6=1/8
  53. '''
  54. self.assertEqual( P(3,6)*P(3,6)*P(3,6),1/8 )
  55.  
  56.  
  57. if __name__ == '__main__':
  58. unittest.main()
Add Comment
Please, Sign In to add comment