12/11/2008 Affichages à l'écran : retour à la ligne Algorithmes et structures de données Cours 9 Patrick Reuter print "bonjour" print ''martin" bonjour martin print "bonjour", print ''martin" bonjour martin http://www.labri.fr/~preuter/asd2008 Variables bonjour = 1 print bonjour print ''bonjour" bonjour -------1 1 bonjour Type simples: Type booléen – Vrai/faux (p.ex. TRUE, boolean) Type entier – Nombre entier (p.ex. 5, int) Type flottant – Nombre à virgule flottant (p.ex. 5.12, float) Types simples Type booléen • Deux valeurs possibles : FAUX (False), VRAI (True) • Opérateurs de comparaison : ==, !=, >, >=, <, <= • 2>8 • 2 <= 8 • • • • # faux # vrai Opérateurs logiques : NON (not), OU (or), ET (and) (3 == 3) or (9 > 24) # vrai (9 > 24) and (3 == 3) # faux not(2==2) # faux Types simples Type entier 20 + 3 20 - 3 20 * 3 20 ** 3 20 / 3 20 % 3 division entière) # 23 # 17 # 60 # 8000 # 6 (division entière) # 2 (modulo (reste de la 1 12/11/2008 Types simples Type entier long – Les entiers longs (seulement limités par la mémoire vive) – 2 ** 40 – 3 * 72L # 1099511627776L # 216L Types simples Type flottant • Les flottants sont not´es avec un « point d´ecimal » ou en notation exponentielle : 2.718 3e8 6.023e23 2. 3.0 # # 3 * 108 # 6.023 * 1023 #2 #3 • Ils supportent les mêmes opérations que les entiers, sauf : 20.0 / 3 20.0 // 3 Variables • Type • Motivation : – Calculer les intérets de 10 % d'une somme de 100 euros somme = 100.0 somme = somme + somme * 5.0/100.0 # 6.666666666666667 # 6 (division entière forcée) Excursion • Typage statique p.ex. Java int a; a = 3; a = 3.5; // ERREUR • Typage dynamique p.ex. python a = 3; a = 3.5; # OK Les chaînes de caractères • Pour connaître le type d'une variable : a = 3 print i t type(a) t ( ) b = 3.5 print type(b) Notations : • Les guillemets c1 1 = "L’ "L’eau d de l' l'océan" é " n = len(c1) # 16 c = round(b) # 3 2 12/11/2008 Longueur : s = "abcde" print len(s) # 5 Concat´enation : s1 = "abc" s2 = "defg" s3 = s1 + s2 On indique, entre crochets, la position d’un caractère par un indice qui commence à 0 s = "abcdefg" print i t s[0] [0] # a print s[2] # c # ’abcdefg’ On peut extraire une sous-chaîne par découpage : s = "abcdefg" s[1:3] [1 3] # ’b ’bc’ ’ s[3:] # ’defg’ s[:3] # ’abc’ TD 6 Correction nij 4 1 1 2 2 TD 6 Correction n= 4 i= 1 while i<=n: j = 1 while j<=i: print n-i+1-j+1, j = j + 1 print i = i + 1 1 2 3 3 1 2 3 4 4 1 2 3 4 5 4 32 210 1 0 -1 -2 5 3 12/11/2008 TD 6 Correction TD 6 Correction • Convertisseur • Convertisseur secondes = 125 secondes = 1331 min = secondes / 60 sec = secondes % 60 #ou bien #sec = secondes - (min * 60) print secondes," equivaut ", min, " minutes et ",sec, " secondes" Combien de minutes ? Combien de secondes ils restent ? TD 6 Correction TD 6 Correction secondes = 1331 min = secondes / 60 sec = secondes % 60 secondes = 18243 #ou bien #sec = secondes - (min * 60) heures = secondes h d / 3600 sec = secondes % 3600 print secondes," equivaut ", min, " minutes et ",sec, " secondes" min = sec = print print sec / 60 sec % 60 secondes," equivaut ", heures, " heures et ",min, " minutes et ",sec, " secondes" TD 6 Correction secondes = 448402 jours = secondes / (3600*24) sec = secondes % (3600*24) heures = sec / 3600 sec = sec % 3600 min = sec / 60 sec = sec % 60 print secondes," equivaut ",jours, " jours et ", print heures, " heures et ",min, " minutes et ",sec, " secondes" 4 12/11/2008 TD 6 Correction TD 6 Correction • "i" dans Mississippi nombreCaracteres = len(s) SI (nombreCaracteres%2==0) ALORS print "le nombre de caractères est pair" SINON print "le nombre de caractères est impair" TD 6 Correction TD 6 Correction • Palindrom – ANNA – ROTOR s = "Mississippi" longueur = len(s) compteur = 0 i = 0 while (i < longueur): if (s[i] == "i"): compteur = compteur + 1 i = i + 1 print "nombre de 'i' dans ",s," : ",compteur TD 6 Correction • Palindrom ch[0] == ch[7] TD 6 Correction • Palindrom ch[0] == ch[7] ch[1] == ch[6] 5 12/11/2008 TD 6 Correction • Palindrom ch[0] == ch[7] ch[1] == ch[6] ch[2] == ch[5] TD 6 Correction • Palindrom ch[0] == ch[7] ch[1] == ch[6] ch[2] == ch[5] ch[3] == ch[4] n = len(ch) - 1 ch[0] == ch[n] ch[1] == ch[n-1] ch[2] == ch[n-2] cch[3] [3] == cch[n-3] [ 3] TD 6 Correction • Conditions nécessaires • Conditions suffisantes TD 6 Correction i=0 n = len(s) - 1 resultat = VRAI TANT QUE i <= n/2 FAIRE DEBUT SI s[i] != s[n-i] ALORS resultat = FAUX i=i+1 FIN SI resultat == VRAI ALORS afficher("C'est un palindrome"); SINON afficher("Ce n'est pas un palindrome"); TD 6 Correction s = raw_input() i =0 n = len(s) - 1 resultat = True while i <= n/2: if (s[i] != ! s[n s[n-i]): i]): resultat = False i = i + 1 if (resultat == True): print "C'est un palindrome" else: print "Ce n'est pas un palindrome" 6 12/11/2008 Les entrées du clavier a = input() • Démo affecte la variable a avec une variable de type entier ou flottant. a = raw_input() affecte la variable a avec une variable de type chaîne de caractères. Messages d'erreurs python Messages d'erreurs python z = 1 prinnt z ERREUR DE SYNTAXE : Il faut écrire print au lieu de prinnt Messages d'erreurs python z = 1 if z==1: print z print "fini" Messages d'erreurs python z = a Traceback (most recent call last): File "D:/preuter/stud/asd2008/td/td7machine/erreurs.py", line 1, in <module> z=a NameError: name 'a' is not defined ERREUR D'INDENTATION: Le print "fini" devrait commencer en tout début de ligne ERREUR DE DECLARATION: La variable "a" n'est pas déclaré. 7 12/11/2008 Messages d'erreurs python s = "Demo" print s[4] Traceback (most recent call last): File "D:\preuter\stud\asd2008\td\td7machine\erreurs.py", line 2, in <module> print s[4] IndexError: string index out of range ERREUR DE BORNES: L'index 4 dans la chaîne de caractères s n'existe pas. Une chaîne de caractère avec longueur connaît uniquement les indices de 0 à 3. 8