---
# System prepended metadata

title: Python TP Gr.2 Eq.1

---

# Python TP Gr.2 Eq.1 

##### You can put your code in the section below with in the three ` ```python= ``` `

```python=
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.__name__
'math'
>>> 
```

```python=
def add(a, b):
    """add two number

    Parameters
    ----------
    a : int, float
        1st number
    b : [type]
        [description]

    Returns
    -------
    int, float
        [description]

    Examples
    --------
    >>> add(1, 3)
    4
    """
    return a + b


if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose=True)
```
```python=
yc@yc-Lenovo-V580:~/Documents/code/ensai_python/TP2$ python3 doc_string.py
Trying:
    add(1, 3)
Expecting:
    4
ok
1 items had no tests:
    __main__
1 items passed all tests:
   1 tests in __main__.add
1 tests in 2 items.
1 passed and 0 failed.
Test passed.
```

```python=
yc@yc-Lenovo-V580:~/Documents/code/ensai_python/TP2$ python3 
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import doc_string

>>> doc_string
<module 'doc_string' from '/home/yc/Documents/code/ensai_python/TP2/doc_string.py'>
>>> doc_string.__name__
'doc_string'
>>> from doc_string import add
```

```python=
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
```
Exercice 1
#1
```python=
liste = [2,5,1,9,11]
print(liste)
print(tuple(liste))
str(liste)
print(dict((x,0) for x in liste)) #x les clés et 0 valeurs
print(dict((x,i) for i,x in enumerate(liste))) #i les indices (à partir de 0) et x les valeurs 
print(dict((x,i) for x,i in enumerate(liste)))
print(set(liste)) #met les valeurs de la liste entre accolades
#pourquoi on peut pas le mettre dans un objet? 
print(set([100] + liste)) #rajoute 100 dans le set de la liste précédent
```

```python=
chaine = 'hello world'
print(chaine)
print(tuple(chaine)) #ça nous crée un tuple où chaque valeur est un str d'une lettre de la chaine
print(str(chaine))

print(dict((x,0) for x in chaine)) #x les clés et 0 valeurs, quand une valeur dans la chaine apparait plus d'une fois, le dict va retourner qu'une fois la valeur
print(dict((x,i) for i,x in enumerate(chaine))) #i les indices (à partir de 0) et x les valeurs, si une valeur apparait plusieurs fois, dict la retourne qu'une fois et son indice sera l'indice de l'apparition de la dernière valeur

print(set(chaine)) #met les valeurs de la liste entre accolades, et met qu'une fois une valeur si elle apparait plusieurs fois parce que il ne peut pas avoir de répétition dans un set
print(set([(100)] + chaine)) #on ne peut pas concaténer une liste et une chaine
```

#3
```python=
lst = [5,7,67,90,3]
lst.append("c") 
lst.append(10)
lst.append(lst)
lst.append((5,6))
lst.append({3:56, 89:0})
print(lst) #la fonction append ajoute à une liste l'élement entre parenthèses, il peut être de tout type

#print(len(lst)) #renvoie la taille de la liste
L = [7,0,10]
lst = [98, 100, 5]
lst.extend(L) #concatène les 2 listes et la met dans lst
print(lst)
lst.insert(4, "coucou") #fonction qui ajoute l'élement "coucou" à l'indice 4 dans la liste lst
lst.remove(100) #supprime l'élement 100 de la liste
print(lst) 
lst.pop(3) #supprime l'élement à l'indice 3 de la liste, ici "coucou"
print(lst.index(5)) #renvoie l'indice de la valeur 5, ne modifie pas la liste
print(lst.count(98)) #renvoie le nombre de fois que l'élement 98 apparait
lst.sort() #tri la liste et modifie la liste 
print(sorted(L)) #tri la liste mais ne la modifie pas ! 
print(L)

lst.reverse() #met à l'envers la liste et la modifie
```
Pour les dictionnaires : 
```python=
dico = {"Larousse" : 78, "Robert" : 67, "CNRTL" : 23}
#pour les clés
for clé in dico.keys():
    print(clé)

print(dico.keys()) #dict_keys(['Larousse', 'Robert', 'CNRTL'])

#pour les valeurs 
for val in dico.values():
    print(val)

print(dico.values()) #dict_values([78, 67, 23])

#pour les clés et valeurs 
for clé, valeur in dico.items():
    print(clé, valeur)

print(dico.get("Larousse")) #renvoie la valeur associé à la clé "Larousse"
dico.pop("Larousse") #supprime la clé et donc la valeur associer, modifie le dico
```

Pour les chaines de caractère
```python=
#pour les chaines
chaine = "on fait du python"
chaine2 = "1 2 3 bonjour"
print(chaine.capitalize()) #met une majuscule à la première lettre, ne modifie pas la chaine 
print(chaine2.capitalize()) #ne met pas le b en majuscule
print(chaine.upper()) #met toute la chaine en majuscule mais ne modif pas 
print(chaine2.upper())
print(chaine.count("o")) #compte le nombre de "o" dans la chaine
#avec juste des guillemets ça compte le nombre de caractères
print(chaine.split()) #fait une liste des mots séparé par un espace



```
TP2 
exo1

```python=
#1
def position(elt, liste, depart):
    """[summary]
    
    parameters
    ----------
    elt : str, int, float, list, tuples, dict
        élement entré par l'utilisateur cherché dans la liste
    liste : list
        liste d'élements
    depart : int
        position de départ, l'élement n'est cherché qu'à partir de cet indice

    Returns
    -------
    int
        L'indice de l'élement recherché dans la liste, ou -1 si l'occurence n'existe pas 

    Examples
    --------
    >>> position(6, [7,8,6,0,6], 1)
    2
    >>> position(6, [7,8,6,0,6], 3)
    4
    >>> position("coucou", ["hello", "bonjour", "hola"], 0)
    -1
    """
    for i in range(depart,len(liste)) :
        if elt == liste[i]:
            return(i)
    return(-1)

            
#print(position(6, [7,8,6,0,6], 1))
#print(position(6, [7,8,6,0,6], 3))
#print(position("coucou", ["hello", "bonjour", "hola"], 0))

#2
def sous_liste(petite_liste, grande_liste):
    """[summary]
    
    parameters
    ----------
    petite_liste : list
        liste d'éléments
    grande_liste : list
        liste d'éléments
    
    Returns
    -------
    booléen
        Indique si les éléments de la petite_liste apparaissent tous et dans le même ordre dans grande_liste

    Examples
    --------
    >>> sous_liste([2,4,10], [1,2,4,5,6,8,10,12])
    TRUE
    >>> sous_liste([2,4,10], [1,2,5,6,8,10,12])
    FALSE
    >>> sous_liste([2,4,10], [1,4,2,5,6,8,10,12])
    FALSE
    """
    lst  = list()
    for element in petite_liste :
        lst.append(position(element,grande_liste, 0))
    return(sorted(lst) == lst)

#print(sous_liste([2,4,10], [1,2,4,5,6,8,10,12]))
#print(sous_liste([2,4,10], [1,2,5,6,8,10,12]))
#print(sous_liste([2,4,10], [1,4,2,5,6,8,10,12]))  

#3
#ça fonctionnerait avec un tuple et les str 
 ```  

exo2
```python =
def transformer(fonction, liste):
    """[summary]
    
    parameters
    ----------
    fonction : function
        
    liste : list
        liste d'éléments
    
    Returns
    -------
    list
        liste de départ à laquelle on a appliqué la fonction à chaque élément

    Examples
    --------
    >>> transformer(sorted, [5,1,9])
    [1,5,9]
    >>> transformer(len, [5,1,9])
    [9,1,5]
    
    """
    return(fonction(liste))
    
print(transformer(sorted, [5,1,9]))
print(transformer(len, [5,1,9]))
```



        
    
        




