Tutoriel sur la programmation python bataille navale
Tutoriel sur la programmation python bataille navale
...
Les opérations
Tapez des opérations simples (suivies de "Enter"), les résultats s'affichent. Les règles de priorité mathématiques sur les opérations s'appliquent.
Pour écrire les puissances, on utilise **. Tapez par exemple : 3**2.
Remarque : en tapant sur la flèche vers le haut, vous remontez dans l'historique des instructions
Deux opérations spéciales, mais souvent utiles, sont à connaître :
- la division entière. Par exemple : 20//3 qui donne 6.
- le modulo qui donne le reste de la division entière. Par exemple : 20%3 qui donne 2.
Les variables
Des précisions sur ce qu'est une variable et comment l'ordinateur la voit :
OCR: les variables
SWI : les variables
Pour affecter une valeur à une variable a, on écrit simplement : a = 5.
Les noms de variable peuvent comporter plusieurs lettres simples (pas d'accents etc.), ainsi que des chiffres (sauf au début), mais pas de caractères spéciaux (sauf _).
On peut alors effectuer des opérations avec ces variables...
On peut changer l'affectation de a en écrivant par exemple a = 7 ou même a = a + 1 (ce qui augmente le contenu de la mémoire a de 1).
Attention, le nom de la variable est toujours à gauche du "="
Affectations multiples : on peut écrire "a,b = 3,4" ce qui affecte 3 à a et 4 à b, et même "a,b = b,a" ce qui échange a et b de manière très simple.
Ce mode d'utilisation (dans la console) de Python est intéressant pour tester des commandes ou des bouts de code...
2) Premiers programmes
Retour au plan de la page
Ouvrez un nouveau fichier (cela s'appelle un module) dans Spyder (si aucun n'est ouvert) et enregistrez le sous "essai.py".
Tapez des instructions analogues à celles du paragraphe précédent, en passant à la ligne pour chaque nouvelle instruction, puis cliquez sur la petite flèche verte...(qui fait exécuter le porgramme).
Que se passe-t-il ? Pas grand chose ! Contrairement à ce qui se passe dans la console, pour afficher un résultat, il faut demander à Python de l'afficher : c'est la fonction print.
Elle s'utilise comme dans beaucoup de langages sous la forme : print(a) affiche le contenu de la variable a, print("Hello") affiche ce qu'il y a entre les guillemets (c'est une chaîne de caractères) et print ("a vaut ", a) affiche la chaîne de caractères suivie de la valeur de la variable a. On peut donc afficher différents objets en les séparant par des virgules, et en mettant les chaînes de caractères entre guillemets.
Enregistrer votre programme avant de l'exécuter
Il est recommandé de mettre des commentaires (des explications) dans les programmes en commençant par un #
Exercices pour les futurs isn :
2.a) Ecrire un programme qui affiche "bonjour tout le monde"
2.b) Ecrire un programme qui affecte 1058 à la variable a et 337 à b, puis qui échange a et b, puis affiche "a vaut maintenant 337 et b vaut 1058" de telle sorte que si on change les valeurs données au départ (1058 et 337), le programme continue à retourner le bon message.
2.c) Ecrire un programme qui compte le nombre d'heures pleines contenues dans un nombre a de minutes et le nombre de minutes restantes
Réponse 2.a
Réponse 2.b
Réponse 2.c
Exercice 2.1 : Ecrire un programme qui affecte une valeur à la variable a et qui affiche son carré, avec un petit message de votre choix.
Pour chaque programme, on prendra soin de faire un jeu de tests qui recouvre tous les cas, et on choisira des noms de variables évocateurs (nb_livre pour un nombre de livres plutôt que n par exemple)
*Exercice 2.2 : Ecrire un programme qui trouve le nombre de centaines, de dizaines et d'unités d'un nombre a
On pensera à utiliser la division entière ( c'est à dire //) : en effet, si on prend 637 par exemple, 637//100 donne le nombre de centaines.
3) Les entrées et les types
Retour au plan de la page
Pour que l'on puisse entrer des données dans un programme, il existe la fonction input, qui s'utilise de la manière suivante :
a=input("entrez un nombre"). Dans la parenthèse se trouve, entre guillemets, le message qui s'affichera et la donnée entrée par l'utilisateur dans la console sera stockée dans la mémoire a.
Attention, la fonction "input" retourne toujours une chaîne de caractères et jamais un nombre !
Dans notre cas, a sera donc une chaîne de caractères.
Il faut savoir que la plupart des langages ne gèrent pas de la même manière les différents types d'objets (par exemple, ils ne réservent pas la même place en mémoire selon que l'on a un entier, un décimal, etc ...). La plupart du temps, Python attribue automatiquement le type qui convient le mieux à chaque objet. Les principaux types auxquels nous allons avoir à faire sont, dans un premier temps :
- les entiers , "integer". Par exemple si on écrit a = 3, Python attribue automatiquement le type integer à a (ce qui correspond à int)
- les décimaux, "float", par exemple b = 1.36
- les chaînes de caractères, "string", par exempel c = "hello" (str en Python)
- les listes, "list", par exemple d = [3,5,7,19], qui est une liste de 4 entiers.
Pour connaître le type d'une variable on écrit : print (type(a)).
Faire des essais avec différents type de variables.
De nombreux autres types existent, et on peut même construire ses propres types !.
Pour plus de détails consulter SWI : les types de données
On peut passer d'un type à un autre : pour transformer une chaîne de caractères en entier, on écrit :
int ("32"), et pour transformer un nombre en une chaîne de caractères on écrit str(32) par exemple.
Voici un exemple :
Vous noterez que l'on met usuellement un espace avant et après le signe "=".
Quand on lance ce programme, la chaîne de caractères "entrez un entier" s'affiche dans la console. Aller dans cette console et y entrer l'entier de votre choix.
Remarque : on peut composer les fonctions de Python. On peut par exemple écrire :
a = int (input("entrez un nombre")).
Pour éviter les problèmes avec la fonction "input" nous allons l'utiliser assez systématiquement avec la fonction "eval".
Faire des essais avec différents types de variables.
Exercices pour les futurs isn :
3.a) et 3.b) Reprendre les exercices 2b) et 2c), mais c'est l'utilisateur qui entre a et b dans le premier et le nombre de minutes dans le second.
Réponse 3.a
Réponse 3.b
a = input("entrez un entier")
a = int(a) #on transforme la chaîne a en un entier
#pour pouvoir faire des opérations
b = a**2
print("le carré de", a , "est ",b)
…
a = eval(input("entrez une donnée")) # attention à fermer les deux parenthèses
print( type(a) )
Réponse 3.b
Exercice 3.1 : Ecrire un programme qui demande deux entiers, puis qui donne le quotient entier et le reste de la division
du premier par le deuxième.
4) Les fonctions
Retour au plan de la page
Nous avons déjà rencontré la fonction "print", mais nous allons maintenant apprendre à coder nos propres fonctions.
Voici le code d'une fonction affine f définie par f (x) = 3x - 5.
Notes :
- le symbole de multiplication est indispensable
- les ":" marquent l'entrée dans un bloc et la ligne d'après est forcément indentée (décalé) d'une tabulation.
- pour sortir d'un bloc, il suffit de se décaler à nouveau vers la gauche "def" est le mot clé pour définir une fonction, f est le nom de la fonction derrière le nom de la fonction on met toujours des parenthèses et dans les parenthèses, les variables que l'on passe en paramètres : c'est le vocabulaire qu'il faut connaître.
- ce qu'il y a derrière le "return" est ce qui est renvoyé (ou retourné) par la fonction. Ce "return" fait aussi sortir du bloc de la fonction
Si vous écrivez ce programme et le lancez, rien ne se passera. En effet, cette fonction est comme une entreprise sous-traitante à qui on aurait demandé de se préparer à fabriquer un certain objet. Encore faut-il lancer la commande, pour que l'objet soit effectivement fabriqué.
Pour lancer cette fonction il faut l'appeler dans le programme, après la fin de l'indentation :
Notes :
à la troisième ligne, on voit que l'indentation est finie, ce qui marque la fin de la fonction. on voit que l'on a utilisé la fonction de deux manières différentes : dans la première, on récupère ce que la fonction retourne dans une variable a, dans la deuxième, on affiche directement le résultat. Les deux sont utiles.
La fonction écrite ci-dessus ressemble beaucoup à une fonction mathématique, mais on peut aussi passer en paramètre plusieurs nombres, des chaînes de caractères, des listes ou même rien (la parenthèse est alors vide). Voici des exemples :
Notes :
def f(x):
return 3*x - 5
def f(x):
return 3*x - 5
a = f(3)
print(a)
print(f(7))
def coucou():
print("coucou tout le monde")
def hello(nom):
print("hello " + nom +" !")
coucou()
hello("Toto")
Notes :
- la première fonction ne prend aucun paramètre et ne retourne rien, mais elle exécute une tâche : elle affiche une chaîne de caractères.
- la seconde prend un paramètre appelé "nom". Elle ne retourne rien mais affichera "hello Toto !". L'opération qui correspond au "+" ici s'appelle la concaténation et a juste pour effet d'accoler les chaînes de caractères.
- si vous appelez la fonction "hello" en lui passant 2 en paramètre, vous aurez une erreur, car Python ne peut additionner un nombre et une chaîne de caractères.
A savoir :
l'instruction "randrange" permet de choisir un entier au hasard. Elle ne fait pas partie des instructions accessibles directement en Python. Il faut charger l'instruction qui se trouve dans le module "random" en utilisant l'instruction :
from random import randrange.
randrange(3,50) choisit un entier au hasard entre 3 et 49 (attention, le dernier entier n'est pas pris).
len(l) est la longueur d'une liste l.
Par exemple si l = [13, 8, 9, 17], on a len(l) qui vaut 4.
Comment atteindre les éléments d'une liste : l[0] est le premier élément de la liste, ici c'est 13, l[1] le deuxième, ici 8 et
le dernier est l[3] qui vaut ici 17.
0 est l'index du terme 3, tandis que 1 est celui de 8 etc...
Exemple avec des listes :
*Exercice 4.1 :
1) Répondre aux questions sans utiliser Python (à la main).
Compléter les phrases suivantes :
"def" est un mot .......servant à .................................
"choixHasard" est le ...........................de la fonction.
"liste" est le ......................de la fonction
Si "index" vaut 0 quand on exécute "choixHasard", qu'est ce qui est retourné ?
Combien de paramètres sont passés à la fonction "afficheHasard", et qu'est ce qui est retourné ?
De quel type est la variable "mois" ? et la variable "annee" ?
Comment s"appelle l'opération qui correspond au "+" dans la ligne avec le "print" ?
A quoi sert le "str" ?
Donner l'affichage obtenu si le "randrange" de "choixHasard" vaut d'abord 2 , puis 15 lors du deuxième appel de la fonction.
Quelle est la valeur maximale que peut prendre le randrange quand on exécute choixHasard(listeMois) ?
Que fait la fonction "afficheHasard" si le "randrange" est 4.
2) Copier le programme dans Spyder. Utiliser le menu "Déboguer" et choisir Déboguer. Au bas du cadre en haut à droite, cliquez sur "Explorateur de variables". Dans ce cadre s'afficheront les valeurs de toutes les variables. Dans la console, taper "n + Enter" jusqu'au bout du programme (ou utiliser le deuxième symbole bleu, en forme de flèche reliant deux points) :
ceci fait avancer votre programme pas à pas. Observez attentivement ce qui se passe.
from random import randrange
def choixHasard(liste):
index = randrange(len(liste))
return liste[index]
def afficheHasard (liste):
index = randrange(len(liste))
print("terme choisi : ", liste[index])
#-------------------------------------------------------------
#programme principal
#--------------------------------------------------------------
listeMois = ["jan","fev","mars","avr","mai","juin","juil","aout","sept","oct","nov"
listeAn = list(range(1950,2001)) #on transforme le range en une liste
mois = choixHasard (listeMois)
annee = choixHasard (listeAn)
print ( "le mois choisi au hasard entre 1950 et 2000 est ", mois + " " + str
afficheHasard (listeMois)
Notes :
Notez la structure du programme qui commence par les imports, ensuite les définitions de toutes les fonctions, ensuite le programme principal : veuillez utiliser cette structure dans vos programmes.
tout ligne qui commence par un # est un commentaire et est ignoré lors de l'exécution du programme. Cela sert à informer le lecteur du programme les noms des variables et des fonctions doivent faciliter la compréhension du code lorsque l'on utilise deux mots pour un nom, on met une majuscule au deuxième ou on utilise le souligné (underscore) entre les deux mots le première fonction retourne un terme, qui peut alors être utilisé dans la suite du programme. La seconde ne retourne rien, elle ne fait qu'un affichage.
une même fonction peut être utilisée plusieurs fois avec des paramètres différents
*Exercice 4.2 :
Ecrire une fonction qui ne prend aucun paramètre, mais qui simule le lancer de deux dés et retourne la somme des nombres obtenus. Ecrire aussi un programme principal qui affiche le résultat (en dehors de la fonction).
5) Les instructions conditionnelles
Retour au plan de la page
Il s'agit des instructions "if", "elif" et "else". Voici un exemple :
Vous remarquerez :
- que l'opérateur de comparaison s'écrit "==", le "=" est réservé à l'affectation
- que le programme est décomposé en instructions simples et en blocs : le premier bloc commence à "if" chaque ligne d'entête d'un bloc se finit par ":"
- la suite du bloc est indentée (cela se fait automatiquement dans Spyder)
- la fin du bloc est signalée par la fin de l'indentation (on tape sur shift et tab)
Les indentations sont très précises, si vous ajoutez un espace de plus en début de ligne, python signalera une erreur (souvent difficile à déceler) !
Les autres opérateurs de comparaison sont : "!=" (différent),"<", ">","<=" et ">=".
Il faut aussi savoir que l'on peut imbriquer plusieurs blocs...
Exercices pour les futurs isn :
5.a) Ecrire un programme dans lequel l'utilisateur entre deux nombres, et le programme détermine le plus grand des deux.
5.b) Ecrire un programme qui détermine si une année est bissextile.
On rappelle qu'une année est bissextile si elle est multiple de 4, mais que si elle est multiple de 100 elle n'est pas bissextile, sauf si elle est multiple de 400.
Indications:
a est multiple de b si a%b est nul (quand on divise a par b, le reste est nul).
Attention à ne pas confondre "=" et "==" !