1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import itertools
import operator
def operation(type_, *nums) :
try :
res = tuple(itertools.accumulate(nums, getattr(operator, type_)))
except ZeroDivisionError :
res = 'La tête à toto 0÷0',
#res = 'nan',
except Exception as e :
res = e.args
if res :
return res[-1]
else :
return 0
def operationF(type_, *nums) :
res = float(nums[0])
try :
for n in nums[1:] :
res = getattr(float, type_)(res, n)
except ZeroDivisionError :
res = 'La tête à toto 0÷0'
return res
if __name__ == '__main__' :
import sys
operateurs = {
('+', 'add', 'plus', 'a', 'additionner',):'__add__',
('-', 'sub', 'moins', 's', 'soustraire',):'__sub__',
('x', 'mul', 'fois', 'm','multiplier', '×'):'__mul__',
('/', 'div', 'quotient', 'd', 'diviser', '÷'):'__truediv__',
}
help = '({}) numérique, numérique, (numerique, ...)'.format(
', '.join([n[0] for n in operateurs])
)
print(help)
if len(sys.argv) > 3 :
for o in operateurs:
if sys.argv[1] in o:
try:
nums = tuple(float(n) for n in sys.argv[2:])
except ValueError :
res = (
'Impossible d\'effectuer une opération'
' avec des valeurs non numériques.'
)
else :
#res = operation(operateurs[o], *nums)
res = operationF(operateurs[o], *nums)
break
else:
res = 'Opérateur {} non supporté.'.format(sys.argv[1])
print('>>>', res) |
Partager