DSPython
00.03.03 — 25 juin 2012
Page principale
Paquetages
Classes
Fichiers
Liste des fichiers
Tout
Classes
Espaces de nommage
Fichiers
Fonctions
Variables
Pages
DSPython
bool.py
Aller à la documentation de ce fichier.
1
#!/usr/bin/env python
2
# -*- coding: latin-1 -*-
3
##\package DSPython.bool Booléens : les 16 connecteurs binaires
4
#
5
# Cf. \htmlonly <a href="http://www.opimedia.be/logiques/" target="_blank">
6
# <tt>http://www.opimedia.be/logiques/</tt></a>\endhtmlonly
7
#\htmlonly
8
#<table border="1" cellspacing="0" summary="connecteurs binaires">
9
#<tr align="center" style="color:gray">
10
#<td colspan="2" align="left">“connecteur négatif”</td>
11
#<td style="background:gray"></td>
12
#<td class="math"><span style="margin-right:-.8ex"> /</span>1</td>
13
#<td class="math"><span
14
# style="margin-left:-.5ex;margin-right:-.5ex"> /</span>| </td>
15
#<td class="math"><span style="margin-right:-1.2ex"> /</span>→</td><td> </td>
16
#<td class="math"><span style="margin-right:-1.2ex"> /</span>←</td><td> </td>
17
#<td class="math"><span style="margin-right:-1.2ex"> /</span>↔</td>
18
#<td class="math"><span style="margin-right:-.75ex"> /</span>↓ </td>
19
#<td style="background:gray"></td>
20
#<td class="math"><span style="margin-left:-.5ex;margin-right:-1ex"> /</span>∨</td>
21
#<td class="math"><span style="margin-right:-1.25ex"> /</span>⊕</td>
22
#<td class="math"><span style="margin-right:-.75ex"> /</span>b</td><td> </td>
23
#<td class="math"><span style="margin-right:-.75ex"> /</span>a</td><td> </td>
24
#<td class="math"><span style="margin-right:-1.25ex"> /</span>∧</td>
25
#<td class="math"><span style="margin-right:-.8ex"> /</span>0</td></tr>
26
#
27
#<tr style="background:gray"><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
28
#<td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
29
#<td></td><td></td><td></td></tr>
30
#<tr class="math" align="center"><th>a</th><th>b</th><th width="0" style="background:gray"></th>
31
#<th width="20">0</th><th width="20">∧</th><th width="20"> </th><th width="20">a</th>
32
#<th width="20"> </th><th width="20">b</th><th width="20">⊕</th>
33
#<th width="20">∨</th><th style="background:gray"></th><th width="20">↓</th>
34
#<th width="20">↔</th><th width="20"> </th><th width="20">←</th>
35
#<th width="20"> </th><th width="20">→</th><th width="20">|</th><th width="20">1</th></tr>
36
#<tr style="background:gray"><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
37
#<td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
38
#<td></td><td></td><td></td></tr>
39
#
40
#<tr class="math" align="center"><th>0</th><th>0</th><td style="background:gray"></td><td>0</td>
41
#<td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td>
42
#<td style="background:gray"></td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td>
43
#<td>1</td><td>1</td></tr>
44
#<tr class="math" align="center"><th>0</th><th>1</th><td style="background:gray"></td><td>0</td>
45
#<td>0</td><td>0</td><td>0</td><td>1</td><td>1</td><td>1</td><td>1</td>
46
#<td style="background:gray"></td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td>
47
#<td>1</td><td>1</td></tr>
48
#<tr class="math" align="center"><th>1</th><th>0</th><td style="background:gray"></td><td>0</td>
49
#<td>0</td><td>1</td><td>1</td><td>0</td><td>0</td><td>1</td><td>1</td>
50
#<td style="background:gray"></td><td>0</td><td>0</td><td>1</td><td>1</td><td>0</td><td>0</td>
51
#<td>1</td><td>1</td></tr>
52
#<tr class="math" align="center"><th>1</th><th>1</th><td style="background:gray"></td><td>0</td>
53
#<td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td>
54
#<td style="background:gray"></td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td>
55
#<td>0</td><td>1</td></tr>
56
#<tr style="background:gray"><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
57
#<td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
58
#<td></td><td></td><td></td></tr>
59
#</table>
60
#\endhtmlonly
61
62
##\file
63
# Booléens : les 16 connecteurs binaires
64
#
65
# Cf. \htmlonly <a href="http://www.opimedia.be/logiques/" target="_blank">
66
# <tt>http://www.opimedia.be/logiques/</tt></a>\endhtmlonly
67
68
# (c) Olivier Pirson --- DragonSoft
69
# http://www.opimedia.be/DS/
70
# Débuté le 3 juin 2007
71
####################################
72
from
__future__
import
print_function
73
74
## Date du dernier changement pour ce module
75
VERSION =
'bool --- 2010 April 12'
76
77
78
79
# ###########
80
# Fonctions #
81
#############
82
## Renvoie a (premier élément)
83
def
bin_a
(a, b):
84
"""Renvoie a
85
(connecteur binaire : premier élément)
86
87
Pre: a: valeur booléenne
88
b: valeur booléenne
89
90
Result: bool
91
92
O() = 1"""
93
return
bool(a)
94
95
96
## Renvoie \htmlonly a ∧ b\endhtmlonly (conjonction)
97
def
bin_and
(a, b):
98
"""Renvoie a et b
99
(connecteur binaire : conjonction)
100
!!! Contrairement à l'opérateur Python and, les deux arguments sont toujours évalués
101
102
Pre: a: valeur booléenne
103
b: valeur booléenne
104
105
Result: bool
106
107
O() = 1"""
108
return
bool(a)
and
bool(b)
109
110
111
## Renvoie b (second élément)
112
def
bin_b
(a, b):
113
"""Renvoie b
114
(connecteur binaire : second élement)
115
116
Pre: a: valeur booléenne
117
b: valeur booléenne
118
119
Result: bool
120
121
O() = 1"""
122
return
bool(b)
123
124
125
## Renvoie \htmlonly a ↔ b\endhtmlonly (double implication, égalité booléenne)
126
def
bin_eq
(a, b):
127
"""Renvoie a équivalent à b
128
(connecteur binaire : double implication, égalité booléenne)
129
130
Pre: a: valeur booléenne
131
b: valeur booléenne
132
133
Result: bool
134
135
O() = 1"""
136
return
bool(a) == bool(b)
137
138
139
## Renvoie False
140
def
bin_false
(a, b):
141
"""Renvoie False
142
(connecteur binaire : constante faux)
143
144
Pre: a: valeur booléenne
145
b: valeur booléenne
146
147
Result: False
148
149
O() = 1"""
150
return
False
151
152
153
## Renvoie \htmlonly a → b\endhtmlonly (implication)
154
def
bin_imp
(a, b):
155
"""Renvoie a implique b
156
(connecteur binaire : implication)
157
158
Pre: a: valeur booléenne
159
b: valeur booléenne
160
161
Result: bool
162
163
O() = 1"""
164
return
bool(b)
or
not
bool(a)
165
166
167
## Renvoie not a (négation du premier élément)
168
def
bin_na
(a, b):
169
"""Renvoie not a
170
(connecteur binaire : négation du premier élément)
171
172
Pre: a: valeur booléenne
173
b: valeur booléenne
174
175
Result: bool
176
177
O() = 1"""
178
return
not
bool(a)
179
180
181
## Renvoie a | b (incompatibilité, barre de Sheffer, négation du et)
182
def
bin_nand
(a, b):
183
"""Renvoie a est incompatible avec b
184
(connecteur binaire : incompatibilité, barre de Sheffer, négation du et)
185
186
Pre: a: valeur booléenne
187
b: valeur booléenne
188
189
Result: bool
190
191
O() = 1"""
192
return
not(bool(a)
and
bool(b))
193
194
195
## Renvoie not b (négation du second élément)
196
def
bin_nb
(a, b):
197
"""Renvoie not b
198
(connecteur binaire : négation du second élément)
199
200
Pre: a: valeur booléenne
201
b: valeur booléenne
202
203
Result: bool
204
205
O() = 1"""
206
return
not
bool(b)
207
208
209
## Renvoie \htmlonly not(a → b)\endhtmlonly (négation de l'implication)
210
def
bin_nimp
(a, b):
211
"""Renvoie not(a implique b)
212
(connecteur binaire : négation de l'implication)
213
214
Pre: a: valeur booléenne
215
b: valeur booléenne
216
217
Result: bool
218
219
O() = 1"""
220
return
bool(a)
and
(
not
bool(b))
221
222
223
##\brief Renvoie \htmlonly a ↓ b\endhtmlonly
224
# (négation conjointe, barre de Sheffer duale, négation du ou)
225
def
bin_nor
(a, b):
226
"""Renvoie a négation conjointe b
227
(connecteur binaire : négation conjointe, barre de Sheffer duale, négation du ou)
228
229
Pre: a: valeur booléenne
230
b: valeur booléenne
231
232
Result: bool
233
234
O() = 1"""
235
return
not(bool(a)
or
bool(b))
236
237
238
## Renvoie \htmlonly not(a ← b)\endhtmlonly (négation de l'implication réciproque)
239
def
bin_nrec
(a, b):
240
"""Renvoie not(b implique a)
241
(connecteur binaire : négation de l'implication réciproque)
242
243
Pre: a: valeur booléenne
244
b: valeur booléenne
245
246
Result: bool
247
248
O() = 1"""
249
return
bool(b)
and
not
bool(a)
250
251
252
## Renvoie \htmlonly a ∨ b\endhtmlonly (disjonction inclusive)
253
def
bin_or
(a, b):
254
"""Renvoie a ou b
255
(connecteur binaire : disjonction inclusive)
256
!!! Contrairement à l'opérateur Python or, les deux arguments sont toujours évalués
257
258
Pre: a: valeur booléenne
259
b: valeur booléenne
260
261
Result: bool
262
263
O() = 1"""
264
return
bool(a)
or
bool(b)
265
266
267
## Renvoie \htmlonly a ← b\endhtmlonly (implication réciproque)
268
def
bin_rec
(a, b):
269
"""Renvoie b implique a
270
(connecteur binaire : implication réciproque)
271
272
Pre: a: valeur booléenne
273
b: valeur booléenne
274
275
Result: bool
276
277
O() = 1"""
278
return
bool(a)
or
not
bool(b)
279
280
281
## Renvoie True
282
def
bin_true
(a, b):
283
"""Renvoie True
284
(connecteur binaire : constante vraie)
285
286
Pre: a: valeur booléenne
287
b: valeur booléenne
288
289
Result: True
290
291
O() = 1"""
292
return
True
293
294
295
## Renvoie \htmlonly a ⊕ b\endhtmlonly (disjonction exclusive)
296
def
bin_xor
(a, b):
297
"""Renvoie a xou b
298
(connecteur binaire : disjonction exclusive)
299
300
Pre: a: valeur booléenne
301
b: valeur booléenne
302
303
Result: bool
304
305
O() = 1"""
306
a = bool(a)
307
b = bool(b)
308
return
(a
or
b)
and
not
(a
and
b)
309
310
311
## Renvoie a si t, b sinon (si alors sinon)
312
def
ter_if
(t, a, b):
313
"""Renvoie a si t, b sinon
314
(connecteur ternaire : si alors sinon)
315
316
Pre: t: valeur booléenne
317
a: valeur booléenne
318
b: valeur booléenne
319
320
Result: bool
321
322
O() = 1"""
323
return
(bool(a)
if
bool(t)
324
else
bool(b))
325
326
327
328
# ######\cond MAINTEST
329
# Main #
330
########
331
if
__name__ ==
'__main__'
:
332
def
main_test
():
333
"""Test du module"""
334
import
sys
335
336
import
DSPython.debug
as
debug
337
338
debug.test_begin(VERSION, __debug__)
339
340
341
print(
'bin_a()...'
, end=
''
); sys.stdout.flush()
342
assert
bin_a
(
False
,
False
) ==
False
343
assert
bin_a
(
False
,
True
) ==
False
344
assert
bin_a
(
True
,
False
) ==
True
345
assert
bin_a
(
True
,
True
) ==
True
346
print(
'ok'
); sys.stdout.flush()
347
348
349
print(
'bin_and()...'
, end=
''
); sys.stdout.flush()
350
assert
bin_and
(
False
,
False
) ==
False
351
assert
bin_and
(
False
,
True
) ==
False
352
assert
bin_and
(
True
,
False
) ==
False
353
assert
bin_and
(
True
,
True
) ==
True
354
print(
'ok'
); sys.stdout.flush()
355
356
357
print(
'bin_b()...'
, end=
''
); sys.stdout.flush()
358
assert
bin_b
(
False
,
False
) ==
False
359
assert
bin_b
(
False
,
True
) ==
True
360
assert
bin_b
(
True
,
False
) ==
False
361
assert
bin_b
(
True
,
True
) ==
True
362
print(
'ok'
); sys.stdout.flush()
363
364
365
print(
'bin_eq()...'
, end=
''
); sys.stdout.flush()
366
assert
bin_eq
(
False
,
False
) ==
True
367
assert
bin_eq
(
False
,
True
) ==
False
368
assert
bin_eq
(
True
,
False
) ==
False
369
assert
bin_eq
(
True
,
True
) ==
True
370
print(
'ok'
); sys.stdout.flush()
371
372
373
print(
'bin_false()...'
, end=
''
); sys.stdout.flush()
374
assert
bin_false
(
False
,
False
) ==
False
375
assert
bin_false
(
False
,
True
) ==
False
376
assert
bin_false
(
True
,
False
) ==
False
377
assert
bin_false
(
True
,
True
) ==
False
378
print(
'ok'
); sys.stdout.flush()
379
380
381
print(
'bin_imp()...'
, end=
''
); sys.stdout.flush()
382
assert
bin_imp
(
False
,
False
) ==
True
383
assert
bin_imp
(
False
,
True
) ==
True
384
assert
bin_imp
(
True
,
False
) ==
False
385
assert
bin_imp
(
True
,
True
) ==
True
386
print(
'ok'
); sys.stdout.flush()
387
388
389
print(
'bin_na()...'
, end=
''
); sys.stdout.flush()
390
assert
bin_na
(
False
,
False
) ==
True
391
assert
bin_na
(
False
,
True
) ==
True
392
assert
bin_na
(
True
,
False
) ==
False
393
assert
bin_na
(
True
,
True
) ==
False
394
print(
'ok'
); sys.stdout.flush()
395
396
397
print(
'bin_nand()...'
, end=
''
); sys.stdout.flush()
398
assert
bin_nand
(
False
,
False
) ==
True
399
assert
bin_nand
(
False
,
True
) ==
True
400
assert
bin_nand
(
True
,
False
) ==
True
401
assert
bin_nand
(
True
,
True
) ==
False
402
print(
'ok'
); sys.stdout.flush()
403
404
405
print(
'bin_nb()...'
, end=
''
); sys.stdout.flush()
406
assert
bin_nb
(
False
,
False
) ==
True
407
assert
bin_nb
(
False
,
True
) ==
False
408
assert
bin_nb
(
True
,
False
) ==
True
409
assert
bin_nb
(
True
,
True
) ==
False
410
print(
'ok'
); sys.stdout.flush()
411
412
413
print(
'bin_nimp()...'
, end=
''
); sys.stdout.flush()
414
assert
bin_nimp
(
False
,
False
) ==
False
415
assert
bin_nimp
(
False
,
True
) ==
False
416
assert
bin_nimp
(
True
,
False
) ==
True
417
assert
bin_nimp
(
True
,
True
) ==
False
418
print(
'ok'
); sys.stdout.flush()
419
420
421
print(
'bin_nor()...'
, end=
''
); sys.stdout.flush()
422
assert
bin_nor
(
False
,
False
) ==
True
423
assert
bin_nor
(
False
,
True
) ==
False
424
assert
bin_nor
(
True
,
False
) ==
False
425
assert
bin_nor
(
True
,
True
) ==
False
426
print(
'ok'
); sys.stdout.flush()
427
428
429
print(
'bin_nrec()...'
, end=
''
); sys.stdout.flush()
430
assert
bin_nrec
(
False
,
False
) ==
False
431
assert
bin_nrec
(
False
,
True
) ==
True
432
assert
bin_nrec
(
True
,
False
) ==
False
433
assert
bin_nrec
(
True
,
True
) ==
False
434
print(
'ok'
); sys.stdout.flush()
435
436
437
print(
'bin_or()...'
, end=
''
); sys.stdout.flush()
438
assert
bin_or
(
False
,
False
) ==
False
439
assert
bin_or
(
False
,
True
) ==
True
440
assert
bin_or
(
True
,
False
) ==
True
441
assert
bin_or
(
True
,
True
) ==
True
442
print(
'ok'
); sys.stdout.flush()
443
444
445
print(
'bin_rec()...'
, end=
''
); sys.stdout.flush()
446
assert
bin_rec
(
False
,
False
) ==
True
447
assert
bin_rec
(
False
,
True
) ==
False
448
assert
bin_rec
(
True
,
False
) ==
True
449
assert
bin_rec
(
True
,
True
) ==
True
450
print(
'ok'
); sys.stdout.flush()
451
452
453
print(
'bin_true()...'
, end=
''
); sys.stdout.flush()
454
assert
bin_true
(
False
,
False
) ==
True
455
assert
bin_true
(
False
,
True
) ==
True
456
assert
bin_true
(
True
,
False
) ==
True
457
assert
bin_true
(
True
,
True
) ==
True
458
print(
'ok'
); sys.stdout.flush()
459
460
461
print(
'bin_xor()...'
, end=
''
); sys.stdout.flush()
462
assert
bin_xor
(
False
,
False
) ==
False
463
assert
bin_xor
(
False
,
True
) ==
True
464
assert
bin_xor
(
True
,
False
) ==
True
465
assert
bin_xor
(
True
,
True
) ==
False
466
print(
'ok'
); sys.stdout.flush()
467
468
469
print()
470
print(
'ter_if()...'
, end=
''
); sys.stdout.flush()
471
assert
ter_if
(
False
,
False
,
False
) ==
False
472
assert
ter_if
(
False
,
False
,
True
) ==
True
473
assert
ter_if
(
False
,
True
,
False
) ==
False
474
assert
ter_if
(
False
,
True
,
True
) ==
True
475
476
assert
ter_if
(
True
,
False
,
False
) ==
False
477
assert
ter_if
(
True
,
False
,
True
) ==
False
478
assert
ter_if
(
True
,
True
,
False
) ==
True
479
assert
ter_if
(
True
,
True
,
True
) ==
True
480
print(
'ok'
); sys.stdout.flush()
481
debug.test_end()
482
483
main_test
()
484
##\endcond MAINTEST