Informatique Pour Tous III-Propositions de solutions aux exercices exercice 1 exercice 2 exercice 3 exercice 4
exercice 1
exercice 1 Fonction de saisie d'un nombre def input_nb(invite): """ cette fonction renvoie un nombre typé après saisie par l'utilisateur. invite est la chaîne vue par l'utilisateur pour la saisie """ mess_erreur = "Vous n'avez pas saisie un nombre!" # preparons le cas où saisie = input(invite) # rappel : saisie est un str if len(saisie) == 0: reponse = mess_erreur # si la saisie est vide else : reste = saisie if reste[0] == '-' : reste = reste[1 : len(reste)] if reste.count('.') == 1 : # enleve un signe - en premiere position # il y a un point dans la saisie pos = reste.index('.') # cherche le point deb = reste[0 : pos] # debut de reste jusqu'au point fin = reste[pos + 1 : len(reste)] # fin de reste à partir du point reste = deb + fin #reste, sans le point #ici reste ne contient que des chiffres si c'etait un numerique au départ if not reste.isnumeric() : # s'il reste encore des lettres reponse = mess_erreur else : reponse = float(saisie) # saisie est donc un nombre return reponse if reponse.is_integer() : # si le nombre est un int, autant en renvoyer un reponse = int(saisie)
exercice 1 Année bissextile (ver 1) def bissext1(n): if n % 400 == 0: bis = True elif n % 100 == 0 : bis = False elif n % 4 == 0 : bis = True else: bis = False if bis: chaine = "est bissextile" else: chaine = "n'est pas bissextile" return chaine
exercice 1 Année bissextile (ver 2) def bissext2(n): if n % 400 == 0 or n % 4 == 0 and n % 100!= 0 : chaine = "est bissextile" else: chaine = "n'est pas bissextile" return chaine
exercice 1 Programme complet : def input_nb(invite): mess_erreur = "Vous n'avez pas saisie un nombre!" saisie = input(invite) if len(saisie) == 0: reponse = mess_erreur else : reste = saisie if reste[0] == '-' : reste = reste[1 : len(reste)] if reste.count('.') == 1 : pos= reste.index('. ) deb = reste[0 : pos] fin = reste[pos + 1 : len(reste)] reste = deb + fin if not reste.isnumeric() : reponse = mess_erreur else : reponse = float(saisie) if reponse.is_integer(): reponse = int(saisie) return reponse def bissext1(n): if n % 400 == 0: bis = True elif n % 100 == 0 : bis = False elif n % 4 == 0 : bis = True else: bis = False if bis: chaine = "est bissextile" else: chaine = "n'est pas bissextile" return chaine texte = Saisissez une année puis appuyez sur la touche Entrée annee = input_nb(texte) print(bissext1(annee))
exercice 2
exercice 2 recherche d un élément dans une liste d éléments non triée: version 1 : def est_dans_liste_range(x,liste): for i in range(len(liste)): if x == liste [i]: return True return False version 2 : def est_dans_liste_liste(x, liste): for e in liste: if e == x: return True return False version 3 : def est_dans_liste_elegant(x, liste): return x in liste
exercice 2 recherche d un élément dans une liste d éléments non triée(suite): variante 1 : def est_dans_liste_index(x, liste): for i in range(len(liste)): if liste [i]== x: return i return False variante 1 améliorée : def est_dans_liste index2(x, liste): for i,valeur in enumerate(liste): if valeur == x: return i return False variante 2 : def est_dans_liste_multiple(x, liste): a = liste.count(x) #test si x est dans l lst_index=[] #cree la liste (modifiable) des indices trouvés if a == 0 : return False #pas de x dans l else : for i,valeur in enumerate(liste) : if valeur == x : lst_index.append(i) return lst_index
exercice 3
exercice 3 recherchedumaximumdansunelistedenombres: def indexmaximum(liste): n = len(liste) imax = 0 #pourquoi cette ligne? max = liste[0] for i in range(1,n): if liste[i] > max : max = liste[i] imax = i return (imax, max) #pourquoi cette indentation? variante : def indexminimum(liste): n = len(liste) imin = 0 min = liste [0] for i in range(1,n): if liste [i] < min : min = liste [i] imin = i return (imin,min)
exercice 4
exercice 4 calculdelamoyenneetdelavarianced unelistedenombres: def moyenne(liste): nombre = len(liste) somme = 0 for x in liste : somme += x on peut remplacer ce bloc par somme = sum([x for x in liste]) return somme / nombre on peut tester avant que nombren est pas nul! def s_e_c(liste, val): #somme des carrés des écarts de chaque élément de liste par rapport à la valeur val somme = 0 for elt in liste: somme += (elt - val)**2 return somme on peut remplacer ce bloc par somme = sum([(x-val)**2 for x in liste]) def variance(liste): if len(liste)!= 0 : return s_e_c(liste, moyenne(liste)) / len(liste)
exercice 4 calculdelamoyenneetdelavarianced unelistedenombres (suite): Variante : def variance2(liste) : n = len(liste) # taille carre_moy = moyenne(liste)**2 s = sum( [ x**2 for x in liste] ) variance = s / n - carre_moy return variance