Correction - Exercice 2

7.1

def retourner_plus_grand(liste):
    max=liste[0]
    for nombre in liste:
        if nombre>=a:
            max=nombre
    return max

7.2

def plus_grand_mot(liste):
    plus_grand_mot=liste[0]
    for mot in liste:
        if len(mot)>=len(a):
            plus_grand_mot=mot
    return plus_grand_mot

7.3

def somme(liste):
    total=0
    for total in liste:
        total+=nombre
    return total

7.4

def extraire_nom_fichier(path):
    liste=path.split("/") #['usr,'bin,'toto.py']
    nom_du_fichier=list[-1].split(".") #['toto','py']
    return liste[0]

# En un seule ligne
def extraire_nom_fichier_une_ligne(path):
 return path.split("/")[-1].split(".")[0]

7.5.1

example_dict=[{'name': 'Sebastian', 'email': 'Donec.felis.orci@consectetueripsumnunc.edu', 'country': '1979'}, {'name': 'Barclay', 'email': 'aliquet.metus.urna@neceleifend.co.uk', 'country': '2000'}, {'name': 'Vivien', 'email': 'pharetra@a.com', 'country': '1955'}, {'name': 'Britanney', 'email': 'eu.tellus.Phasellus@arcuvelquam.ca', 'country': '1961'}, {'name': 'Reese', 'email': 'tortor.dictum.eu@egestasSed.ca', 'country': '1951'}, {'name': 'Keegan', 'email': 'libero.nec@cursuset.co.uk', 'country': '1998'}, {'name': 'Ezekiel', 'email': 'tempus.mauris.erat@aclibero.org', 'country': '1951'}, {'name': 'Odessa', 'email': 'massa.Quisque.porttitor@felis.net', 'country': '1925'}, {'name': 'Elijah', 'email': 'luctus.vulputate.nisi@nunc.com', 'country': '1963'}, {'name': 'Hilel', 'email': 'lectus.pede.et@aliquetsem.ca', 'country': '1982'}, {'name': 'Callie', 'email': 'et.euismod.et@aliquetmagnaa.net', 'country': '1984'}, {'name': 'India', 'email': 'Duis.sit.amet@Phaselluslibero.com', 'country': '1938'}, {'name': 'Lane', 'email': 'amet@turpis.ca', 'country': '1922'}, {'name': 'Alexis', 'email': 'sagittis.placerat@nibhdolor.net', 'country': '1927'}, {'name': 'Micah', 'email': 'lorem.eget.mollis@SeddictumProin.com', 'country': '1914'}, {'name': 'Rigel', 'email': 'sollicitudin@eratinconsectetuer.org', 'country': '1941'}, {'name': 'Avram', 'email': 'tincidunt.vehicula@vulputate.org', 'country': '1919'}, {'name': 'Dieter', 'email': 'ornare.lectus.justo@Integeridmagna.org', 'country': '1937'}, {'name': 'Sarah', 'email': 'cubilia.Curae.Phasellus@non.net', 'country': '1946'}, {'name': 'Graham', 'email': 'elit.Curabitur.sed@maurisIntegersem.edu', 'country': '1931'}, {'name': 'Daquan', 'email': 'fermentum.convallis.ligula@porttitorinterdum.co.uk', 'country': '1934'}, {'name': 'Nell', 'email': 'purus@lectusconvallisest.org', 'country': '1997'}, {'name': 'Ocean', 'email': 'ut@Nuncquisarcu.net', 'country': '2006'}, {'name': 'Cruz', 'email': 'Aenean.euismod.mauris@idmollisnec.edu', 'country': '1950'}, {'name': 'Hyacinth', 'email': 'amet@Nunc.edu', 'country': '1929'}]

def lire_dict(dict):
    for element in dict:
        print("{} est né.e en {}".format(element["name"],element["country"]))

lire_dico(exemple_dict)

7.5.2

def lire_dict_edu(dict):
    for element in dict:
        if element["email"].split(".")[-1] == 'edu':
            print("{} a pour email {}".format(element["name"],element["email"]))

read_dict_edu(example_dict)

7.6

def compte_lettres(phrase):
    dict={}
    # Pour chaque lettre:
    for lettre in phrase:
    # Si la clef existe (dans ce cas la lettre a déjà été rencontrée) alors on incremente sa valeur de 1.
        if lettre in dict:
            dict[lettre]+=1
    # Si la clef n'existe pas, on la crée et on initialise sa valeur à 1
        else:
            dict[lettre]=1
    return dict

phrase="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt "
print(compte_lettres(phrase))

7.7

def retourne_pair(liste):
    nouvel_liste=[]
    for nombre in liste:
        if nombre%2==0:
            nouvel_liste.append(element)
    return nouvel_liste

liste_paire=range(11)
print(retourne_pair(liste_paire))

7.8 Cette algorithme de tri classique s’appelle le tri à bulle. Ce n’est pas le plus rapide, mais il est facilement compréhensible.

def tri_a_bulles(tableau):
    for i in range(len(tableau),0,-1):
        for j in range(i-1):
            if tableau[j+1]<tableau[j]:
                tableau[j+1], tableau[j]=tableau[j],tableau[j+1]
    return tableau

7.9 On utlise ici une imbrication de compréhension de lire:

matrice=[[i+j for i in range(5)] for j in range(4)]

7.10

def somme_2(liste):
    if liste:
        #Litéralement ma somme vaut le dernier élément plus la somme de tous les autres éléments moins le dernier
        return liste[-1]+somme_2(liste[:-1])
    else:
        return 0

7.11

def carre():
    i=1
    while True:
        i+=1
        yield i*i

for i in carre():
    if i>200
        break
    print (i)

10.1

def liste_users():
    with open("/etc/passwd","r") as file:
        read_file=file.readlines()
    for element in read_file:
        e=element.rstrip().split(':')
        if e[-1]=="/bin/bash":
            print(e[0])

liste_users()

10.2

def generer_email(prenom,nom):
        modele = """
Bonjour {prenom} !
Voici en pièce jointe les billets pour votre voyage en train vers {destination}.
""".format(prenom=prenom,destination=nom)
        with open("email_{}".format(prenom), "w") as f:
            f.write(modele)

generer_email("Sacha","Rennes")

10.3

def afficher_fichier_no_comment(file,char):
    with open(file) as file_read:
        read_file=file_read.readlines()
    print(read_file)
    for element in read_file:
        if not element.strip() == "" and not element[0]==char:
            print(element,end='')
afficher_fichier_no_comment("test","#")