Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168744
Image: ubuntu2004
Bienvenue sur l'interface graphique de Sage. Il s'agit d'une interface du type "question-réponse" qui ressemble à celles de tous les logiciels de calcul formel et numérique. Dans une cellule, *Entrée* permet de sauter une ligne, *Maj+Entrée* permet d'évaluer le contenu de la cellule.
2+2
Pour ouvrir une nouvelle cellule, cliquez sur la zone bleue tout en bas de la feuille ou juste au-dessus d'une fenêtre préexistante. Pour supprimer une cellule, videz-la puis faites *Retour arrière*. Ouvrez puis fermez une cellule.
Le langage utilisé pour la programmation est le Python, dont on va faire des rappels. Souvenez-vous, l'assignation de variables utilise =, tandis que le test d'égalité utilise ==. Si l'interface plante à un moment ou à un autre, Faites *Save & Quit* puis ouvrez de nouveau la feuille.
a = 5 # On peut aussi mettre des commentaires après un dièse, ils seront ignorés.
a = a*a # Combien vaut a maintenant ? a # Pour le savoir, on l'affiche.
Comme vous voyez, assigner une variable ne renvoie pas de valeur, et passer à la ligne permet de faire plusieurs commandes de suite. En revanche, seule la dernière sortie est affichée.
a == 25 # Un test renvoie une valeur : True ou False. Autres tests : <, >, <=, !=
L'interêt de sage est la grande quantité de fonctions déjà présentes. Supposons qu'on cherche à savoir si a est un nombre premier, mais on ne connait pas la bonne commande. Dans ce cas, on tape *a.* puis *Tabulation* pour afficher une liste des fonctions fréquemment utilisées sur des entiers. /// EXERCICE 1 : Essayez de trouver une fonction qui teste si a est premier (en anglais : "prime")
a.
On cherche maintenant à savoir si a est une puissance de 5. Avec la touche *Tab*, on trouve la fonction "is_power_of", mais on ne sait pas l'utiliser. Ajouter ? permet d'obtenir la documentation de la fonction avec une description sommaire et les arguments requis.
a.is_power_of?
Utiliser a.is_power_of(5) ou is_power_of(a,5) sont équivalents. Le premier est plus pratique pour trouver des fonctions inconnues avec *Tab*, mais ça ne marche que sur des variables.
5.
Toutes les fonctionnalités du Python sont présentes : if, boucles for, boucles while, fonctions...
if 0==1 : # attention à ne pas écrire 0=1 ! a = 42 else : a = 24 a # à votre avis ?
Pour les boucles for (répétition d'une action), la fonction range est bien pratique : range(n) va de 0 à n-1, range(a,b) va de a à b-1.
a = i = 1 while i <= a : i = 2*i i for i in range(10) : if is_prime(i) : i
L'indentation (espace blanc au début d'une ligne) permet de définir les limites de la boucle.
a = 0 for i in range(2,100): a = a+i # Cette assignation est effectuée à chaque passage a == 4950 # Mais ce test une seule fois, à la fin.
EXERCICE 2 : Calculez la factorielle de 100, c'est-à-dire 1*2*3...*100, puis affichez le résultat.
Enfin, la boucle while, qui fonctionne de la même façon mais continue tant qu'une condition n'est pas remplie.
i = 1 while i != 8 : i i = i+1 # Et si on part de i = 9, à votre avis ?
EXERCICE 3 : Écrire un algorithme qui calcule la plus petite puissance de 2 qui dépasse a. Indice : partez de 1, puis doublez jusqu'à dépasser a.
a = 2345
On va maintenant étudier quelques structures de données, à commencer par les listes. Une liste d'objets, par exemple d'entiers, permet de manipuler plusieurs objets à la fois.
l = [1, 2, 3, 4, 5] # Une liste d'entiers. l[4] # On appelle le 5e élément (on part de 0 !).
l2 = [] # Une liste vide. l2[2] # Forcément, ça crée des problèmes.
Notez l'erreur explicite "list index out of range". Voyons maintenant quelques fonctions de base.
l = [1,2] l.append(3) # On ajoute un élément à la fin de la liste l
l.extend([4,5,6]) # On ajoute une liste d'éléments à la fin l.reverse() # Puis on inverse la liste. l
EXERCICE 4 : Construire une liste comprenant tous les entiers premiers de 0 à 100 en utilisant is_prime(i).
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
On peut même utiliser les listes comme arguments d'une boucle for.
for i in [1,2,4,8,16,32]: i*i
Passons à un autre objet : les chaînes de caractères. Elles représentent du texte et sont utiles pour mieux décider de la sortie de nos programmes.
s = 'Hello world !' s
On peut concaténer deux chaînes avec +.
s1 = 'Il faut toujours finir ses ' s2 = 'phrases.' s1+s2
La fonction print permet de décider de ce qui est affiché en sortie. '\n' correspond à un saut de ligne, et on peut utiliser %d ou %s pour insérer un entier ou un chaîne, respectivement :
for i in [1,2,4]: for s in ['chat', 'oiseau', 'pingouin', 'hamster']: print 'Un %s à %d pattes'%(s,i) print '\n' # Attention ! Cette commande est executée une seule fois pour chaque valeur de i
EXERCICE 5 : Programmez un algorithme qui parcourt une liste en écrivant 'La valeur () est / n"est pas un nombre premier' selon les cas (attention, ne pas utiliser d'apostrophe simple...).
l = [3,6,5,23,593,9509]
EXERCICE 6 : La suite de Syracuse est définie par u(n+1) = u(n)/2 si u(n) est pair, 3u(n)+1 sinon. Programmez un algorithme qui calcule cette suite en partant d'une valeur quelconque, en imprimant à chaque étape la valeur par laquelle on passe, et s'arrête quand on a atteint 1. On pourra utiliser la fonction a.divides(b).
a = 27
Enfin, utiliser des fonctions peut être utile pour éviter de trop faire grossir ses programmes et simplifier la lecture.
def max(a,b): if a <=b: # Notez l'usage de l'indentation return b # return indique la sortie de la fonction. Dans ce cas, c'est une fonction de N² -> N. else: return a max(5,7)
EXERCICE 7 : les fonctions peuvent prendre tous types d'entrée, par exemple une liste. En utilisant la fonction précédent, définir une fonction qui calcule le maximum d'une liste d'entiers donnée en entrée.
def max_list(l): a = 0 for i in l: a = max(a,i) return a
EXERCICE 8 : Manipulons True et False. On veut une fonction contient_x qui renvoie True si la chaîne d'entrée contient un x, False sinon. Indice : on peut "parcourir" une chaîne avec une boucle for comme une liste.