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) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
Merci de vos lumières