DSPython  00.03.03 — 25 juin 2012
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Pages
natseq.py
Aller à la documentation de ce fichier.
1 #!/usr/bin/env python
2 # -*- coding: latin-1 -*-
3 ##\package DSPython.natseq Séquences de naturels
4 
5 ##\file
6 # Séquences de naturels
7 
8 # (c) Olivier Pirson --- DragonSoft
9 # http://www.opimedia.be/DS/
10 # Débuté le 28 décembre 2006
11 ####################################
12 from __future__ import print_function
13 
14 ## Date du dernier changement pour ce module
15 VERSION = 'natseq --- 2010 March 16'
16 
17 
18 
19 # ###########
20 # Fonctions #
21 #############
22 # Produit des éléments
23 def prod(s):
24  """Renvoie le produit des éléments de s
25  (Si s est vide alors renvoie 1)
26 
27  Pre: s: séquence de naturels
28 
29  Result: naturel
30 
31  O(n) = ..."""
32  r = 1
33  for n in s:
34  r *= n
35  return r
36 
37 
38 # Somme des éléments
39 def sum(s):
40  """Renvoie la somme des éléments de s
41  == sum_pow(s, 1)
42  (Si s est vide alors renvoie 0)
43 
44  Pre: s: séquence de naturels
45 
46  Result: naturel
47 
48  O(n) = ..."""
49  r = 0
50  for n in s:
51  r += n
52  return r
53 
54 
55 # Somme des éléments de s ** k
56 def sum_pow(s, k):
57  """Renvoie la somme des éléments de s ** k
58  (Si s est vide alors renvoie 0)
59  (Si k == 0 alors renvoie len(s))
60 
61  Pre: s: séquence de naturels
62 
63  Result: naturel
64 
65  O(n) = ..."""
66  r = 0
67  for n in s:
68  r += n ** k
69  return r
70 
71 
72 # ######\cond MAINTEST
73 # Main #
74 ########
75 if __name__ == '__main__':
76  def main_test():
77  """Test du module"""
78  import math, sys
79 
80  import DSPython.debug as debug
81 
82  debug.test_begin(VERSION, __debug__)
83 
84  print('prod()...', end=''); sys.stdout.flush()
85  assert prod([]) == 1, prod([])
86  assert prod([0]) == 0, prod([0])
87  assert prod([1]) == 1, prod([1])
88  assert prod([1, 2]) == 2, prod([1, 2])
89  assert prod([2, 3]) == 6, prod([2, 3])
90  assert prod([1, 2, 0]) == 0, prod([1, 2, 0])
91  for n in range(100):
92  assert prod(range(1, n + 1)) == math.factorial(n), \
93  (n, prod(range(1, n + 1)), math.factorial(n), range(1, n + 1))
94  print('ok'); sys.stdout.flush()
95 
96 
97  print('sum()...', end=''); sys.stdout.flush()
98  assert sum([]) == 0, sum([])
99  assert sum([0]) == 0, sum([0])
100  assert sum([1]) == 1, sum([1])
101  assert sum([1, 2]) == 3, sum([1, 2])
102  assert sum([1, 2, 0]) == 3, sum([1, 2, 0])
103  for n in range(1000):
104  assert sum(range(n + 1)) == n*(n + 1)//2, \
105  (n, sum(range(n + 1)), n*(n + 1)//2, range(n + 1))
106  print('ok'); sys.stdout.flush()
107 
108 
109  print('sum_pow()...', end=''); sys.stdout.flush()
110  assert sum_pow([], 0) == 0, sum_pow([], 0)
111  assert sum_pow([0], 0) == 1, sum_pow([0], 0)
112  assert sum_pow([1], 0) == 1, sum_pow([1], 0)
113  assert sum_pow([1, 2], 0) == 2, sum_pow([1, 2], 0)
114  assert sum_pow([1, 2, 0], 0) == 3, sum_pow([1, 2, 0], 0)
115 
116  assert sum_pow([], 1) == 0, sum_pow([], 1)
117  assert sum_pow([0], 1) == 0, sum_pow([0], 1)
118  assert sum_pow([1], 1) == 1, sum_pow([1], 1)
119  assert sum_pow([1, 2], 1) == 3, sum_pow([1, 2], 1)
120  assert sum_pow([1, 2, 0], 1) == 3, sum_pow([1, 2, 0], 1)
121 
122  assert sum_pow([], 2) == 0, sum_pow([], 2)
123  assert sum_pow([0], 2) == 0, sum_pow([0], 2)
124  assert sum_pow([1], 2) == 1, sum_pow([1], 2)
125  assert sum_pow([1, 2], 2) == 5, sum_pow([1, 2], 2)
126  assert sum_pow([1, 2, 0], 2) == 5, sum_pow([1, 2, 0], 2)
127 
128  for n in range(1000):
129  assert sum_pow(range(n + 1), 0) == n + 1, \
130  (n, sum_pow(range(n + 1), 0), range(n + 1))
131  assert sum_pow(range(n + 1), 1) == n*(n + 1)//2, \
132  (n, sum_pow(range(n + 1), 1), n*(n + 1)//2, range(n + 1))
133  assert sum_pow(range(n + 1), 2) == n*(n + 1)*(n*2 + 1)//6, \
134  (n, sum_pow(range(n + 1), 2), n*(n + 1)*(n*2 + 1)//6, range(n + 1))
135  assert sum_pow(range(n + 1), 3) == (n*(n + 1)//2)**2, \
136  (n, sum_pow(range(n + 1), 3), (n*(n + 1)//2)**2, range(n + 1))
137  print('ok'); sys.stdout.flush()
138  debug.test_end()
139 
140  main_test()
141 ##\endcond MAINTEST