Bonjour,
J'apprend le Python. J'ai fait la fonction ci-dessous (qui tente de calculer le double de n'importe quoi ou presque). Bien que pas encore habitué au style Python, je ne trouve pas ce que j'ai écrit très 'pythonesque'. Y-a-t'il y moyen de faire ça mieux (les exemples à tester sont dans la docstring) ?Merci de vos lumières :)Code:
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()

