Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 421

Projet pluridisciplinaire TP2 : python

Le logiciel Sage est basé sur le langage de programmation python. Dans ce TP, nous allons apprendre les bases de la syntaxe python et des structures de données tels qu'ils sont utilisés dans Sage.

Les Listes

Les listes sont une des structures fondamentales du python. Elles sont l'équivalent des tableaux du C++.

La cellule suivante définit et affiche une liste. Pour cela on utilise les crochets [ ].
l = [2, 1, 3] l

Le python est un langage dynamique, la déclaration, allocation et initialisation se font en une seule commande.

On accède aux éléments de la liste de la même façon qu'en C++. On peut aussi les modifier.

l[0]
l[0] = 4 l

Affichez les 2eme et 3eme élements de la liste.

Contrairement au C++, une liste peut contenir des éléments de type différents.
liste_mixte = [5,"bla","bli",3.2] liste_mixte
Pour connaître la taille d'une liste, on utilise la fonction len.
len(l) len(liste_mixte)

Pour ajouter un élément à la fin de la liste, on utilise la méthode append (équivalent du push_back du C++)

l.append(5) l

Par ailleurs, la méthode pop permet de supprimer le dernier élément.

v = l.pop() v l

Créez une liste contenant 2, 4 et 6. Puis ajoutez 8 à la fin de la liste en utilisant append.

Pour parcourir les éléments d'une liste, on utilise une boucle for de la façon suivante :
l = [2,2,4,3,5] for v in l: print v

Attention ! La syntaxe et la sémantique de la boucle for sont très différentes en python et en C++. En python, on parcourt directement les éléments de la liste sans passer par un indice. Pour énumérer les éléments de la liste et leurs indices, on utilise la syntaxe suivante :

l = [2,2,4,3,5] for i,v in enumerate(l): print i, v
l = [2,2,4,3,5] for i,v in enumerate(l): l[i] = v+1 l

Exécutez la cellule suivante, puis écrivez une boucle for pour afficher le carré des éléments de la liste. Puis écrivez une seconde boucle qui remplace chaque élément par son carré.

ma_liste = [2,3,4,5,6]

Structure de boucles et de contrôle en python

Vous avez peut-être remarquer que l'on n'utilise pas d'accolades en python. En effet, pour commencer un bloc de type if, for ou while, on utilise les deux points : suivi d'un changement d'indentation. C'est l'indentation qui marque la fin des blocs.

Exécutez les exemples suivant

i = 2 while i<=10: i = i+1 print i
i = 5 while i!=1: print i if i%2 == 0: i = i/2 else: i = i*3 +1
ma_liste = [2,3,3,4,5,6,8,9] for v in ma_liste: if v%2 == 1: print v

La cellule suivante contient une erreur d'indentation. Exécutez-la pour afficher l'erreur puis corrigez et exécutez à nouveau.

a = 2 while a<=100: print a a = 2*a

Ecrire une boucle for qui n'affiche que les valeurs de la liste inférieures à 10.

ma_liste = [4,12,13,8,6,11,9]

Ecrire une boucle qui compte le nombre de valeurs inférieures à 10.

La fonction suivante est très pratique : elle permet de créer une liste d'entiers entre deux valeurs données. Exécutez les exemples pour comprendre son fonctionnement

range(10)
range(1,23)
range(2,13,2)
range(10,0,-1)

Utilisez range pour afficher les nombres pairs inférieurs à 30

On peut utiliser range avec une boucle for.

for i in range(10): print i

Utilisez une boucle for avec range pour afficher les valeurs i2i^2 pour 1i101\leq i \leq 10.

Remarque : Il est très facile de tester si un élément appartient à une liste.

l = [1,2,3] 3 in l
if 4 in l: print "l contient 4" else: print "l ne contient pas 4"

Exercice : dans la cellule suivante, on définit 3 listes l1,l2,l_resultat. Ecrivez une boucle for pour que l_resultat contienne les valeurs qui sont à la fois dans l1 et l2.

l1 = [2,3,5,6,9,10] l2 = [1,2,3,4,5] l_resultat = []

Autres structures

Un dictionnaire est un tableau dont les indices peuvent être eux mêmes des objets (par exemple, des chaines de caractères). Par exemple, le dictionnaie suivant associe des notes et des élèves.

d = dict() d["Anna"] = 4.5 d["Boris"] = 18. d["Lisa"] = 18.5 d["Ahmed"] = 15. d["Lou"] = 10. d["Martin"] =5.5 d
for nom in d.keys(): print nom
for nom in d.keys(): print "L'étudiant(e) " + nom + " a obtenu " + str(d[nom])
d.values()

Exercice : après avoir observer les exemples précédents. Calculez la moyenne des notes et affichez le nom de l'étudiant ayant eu la meilleure note.

Listes doubles

Tout comme en C++, il est possible de faire des listes de listes.

l_double = [[1,2,3],[4,5,6]] l_double
l_double[0][1]

Affichez la valeur 4 en utilisant l_double.

Voici un exemple de double boucle for qui affiche les valeurs de l_double.

for ligne in l_double: for v in ligne: print v

Voici un exemple qui affiche les lignes de l_double

for ligne in l_double: print ligne
Les matrices sont une application mathématique des listes doubles. Observez les exemples suivants.
m1 = Matrix([[1,1,3],[4,5,5],[6,7,9]]) m1
m1.determinant()
m1.inverse()
m1 *m1.inverse()

Exercice : Créez une matrice triangulaire inférieure ne contenant que des 1. Calculez son inverse et son déterminant.

Fonctions

Tout comme en C++, il est possible de définir des fonctions en python. Exécutez l'exemple ci-dessous

def biggest_prime(n): while n>=1: if n.is_prime(): return n n = n-1 return None
biggest_prime(100) biggest_prime(75)
97 73

Ce premier exemple donne la syntaxte d'une fonction. Elle se définit avec le mot clé def suivi du nom de la fonction. Ensuite, on donne entre paranthèse les noms des arguments. Comme pour les boucles for, on doit écrire le code de la fonction en dessous et de manière indentée ! Enfin, pour retourner un résultat, il faut utiliser la commande return.

Attention ! Une fonction python est un ensemble de ligne de code à exécuter, ce n'est pas la même chose que les fonctions mathématiques que nous avons vues dans le TP1.

Par ailleurs, vous remarquerez que, contrairement au C++, on ne spécifie pas le type des variables. Le python est un langage dynamique et toute la sémantique est donc testée au niveau de l'exécution. Exécutez la cellule suivante et observez l'erreur de type.

biggest_prime("test")

Observez la fonction suivante et son exemple d'utilisation. Exécutez quelques exemples supplémentaires.

def tangente_plot(f,a,xmin,xmax): t = f.derivative(x)(a)*(x-a)+f(a) return plot(f,(x,xmin,xmax), color="blue") + plot(t,(x,xmin,xmax),color="red")
f(x) = sin(x)*x +1 tangente_plot(f,2,-4,4)

**Exercice : ** écrire une fonction qui prend en paramètre un nombre n et retroune le plot d'un polygône régulier à n côtés.

Compréhension de listes

La syntaxe du python offre beaucoup de souplesse pour la création de listes. Exécutez les exemples suivants.

l1 = [i*2 for i in range(5)] l1
l2 = [i/2 for i in l1] l2

De la même façon, on peut rajouter des conditions.

l1 = [2,2,15,3,5,1,10,12,4] l1
[2, 2, 15, 3, 5, 1, 10, 12, 4]
l2 = [i for i in l1 if i<10] l2
[2, 2, 3, 5, 1, 4]

Utilisez une syntaxe similaire pour créer la liste des entiers impaires inférieurs à 20. De même pour les nombres premiers inférieurs à 100. (Remarque, il existe une fonction isprime)

Animations

Sage permet la création d'animations à partir d'une liste de plots. L'utilisation de la compréhension de liste python rend son utilisation d'autant plus simple. Exécutez l'exemple suivant.

mes_plots = [circle((0,0),1,color="red") + point2d((cos(t*2*pi/25),sin(t*2*pi/25))) for t in xrange(26)] animate(mes_plots)

**Exercice ** Créer une animation représentant des polygônes réguliers à l'intérieur d'un cercle, le nombre de côté des polygônes doit varier entre 3 et 10.

︠3f39fc66-5a8b-4997-9c37-ccbc7314d48d︠ ︠3b883fda-87f8-4121-a561-b89c5a85775f︠ ︠13441722-5b69-4f20-9ba6-870934dc7123︠