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
| #!/usr/bin python3
# -*- coding: utf-8 -*-
""" démontre comment doubler tout ce qui est numérique (ou pas)
Probèmatique : on veut une fonction qui accepte aussi bien des données
unaire (int, double) que des listes ou des générateurs
"""
def tout_doubler(x):
"""retourne le double de x
Si x est itérable, retourne une liste, chaque élément étant le double de l'élément correspondant dans x
Si x n'est pas itérable, retourne 2x
:Example:
>>> tout_doubler(2)
4
>>> tout_doubler('a')
'aa'
>>> tout_doubler([1,2])
[2, 4]
>>> tout_doubler(range(10))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> tout_doubler('abc')
'aabbcc'
>>> tout_doubler(['abc', [1,2]])
['aabbcc', [2, 4]]
"""
if type(x) is str:
return ''.join([u*2 for u in x])
try:
if len(x)==1:
return 2*x
else:
return [tout_doubler(u) for u in x]
except:
return 2*x
if __name__ == "__main__":
import doctest
doctest.testmod() |
Partager