Créé en 2020 et modifié le 07 Oct 2020

support fish finder

Présentation

L’algorithme

Un algorithme est une suite d’instructions

La traduction d’un algorithme en un langage de programmation s’appelle un programme.
Les mêmes données d’entrée fourniront toujours le même résultat

Le programme

Les langages, appelés langages de haut niveau, ont une grammaire et une syntaxe proches du programmeur.
L’ordinateur ne connaît que le langage machine.

Certains langages utilisent un compilateur pour transformer le code en une suite d’instruction compréhensible par l’ordinateur.

 

« Le but n’est pas que le programme fonctionne, mais qu’il fonctionne vite et bien. Le meilleur ordinateur au monde et le meilleur langage au monde ne vous y aideront pas » S.Rohaut – Algorithmique

Certains langages ne sont pas compilés mais interprétés. Pour fonctionner ces programmes nécessitent un interpréteur qui est un autre programme. Il analyse la syntaxe et l’exécute au fur et à mesure.

D’autres utilisent une machine virtuelle. La machine virtuelle est un programme qui permet d’isoler l’application de l’OS. Le programme conçu pour la machine virtuelle pourra donc fonctionner sur n’importe quel ordinateur.

 

Le langage Python

Créé en 1991 par Guido van Rossum . L’un des langages les plus utilisé dans l’enseignement et les scripts.

Les variables

Une variable contient une valeur qui peut changer. Chaque variable doit avoir un nom (identifiant) et un type.

Les types de données

Le type d’une donnée détermine les valeurs qu’elle peut prendre. En python les types sont implicites, on ne les déclare pas.

Les booléens

Ils permettent de réaliser des tests. Un booléen ne peut prendre que deux valeurs : soit true (vrai) ou false (faux)

L’affectation des variables

x = 5
y = "John"
print(x)
print(y)

Écrire le programme qui affiche le prix total ttc en fonction du prix ht, du taux de tva et de la quantité achetée ( on prendra des valeurs au hasard).

Saisir

print('Votre nom:')
nom = input()
print(nom)
nom = input('Votre nom:')
print(nom)

Écrire un programme qui initialise deux variables entières et qui affiche directement la somme de ces deux nombres. N’oubliez pas d’afficher un message à l’utilisateur pour qu’il sache quoi saisir.

Exécution

Pour exécuter vos fichiers py, installer python

Ensuite en console, dans le répertoire contenant le fichier py, on utilise

python monfichier.py

Commentaire

#mon commentaire

Concaténation

nom = input('Votre nom:') 
print('Votre nom :', nom)

 

 

Les structures conditionnelles

La conditionnelle

a = 10
b = 20
if b > a:
  print("b est plus grand que a")

Le booléen est la condition de l’instruction si. C’est généralement une expression booléenne.

a = 10
b = 20
if b > a:
  print("b est plus grand que a")
else:
   print("b est plus petit que a")

Le booléen est la condition de l’instruction si. C’est généralement une expression booléenne.

L’indentation

Python détermine les instructions en fonction de l’indentation (espaces selon les blocs de code). Si celle ci n’est pas respectée, l’interpréteur indique une erreur.

a = 10
b = 20
if b > a:
print("b est plus grand que a")    #erreur

 

Les instructions composant le si peuvent elles-mêmes être des si :

if qte>100:
  if tauxTVA==0.196 :
    prixTTC=prixTTC*0.9

Indiquer si un nombre est supérieur à 30.

L’entreprise accorde une remise de 10 % sur le prix ttc pour tout achat de plus de 100 pièces ; écrire le programme calculant le prix ttc en fonction de la quantité, du prix ht et du taux de tva.

 

a = 10
b = 20
if b > a and b<500:
  print("b est plus grand que a et inférieur à 500")

 

remarque : pas de switch en python

Les boucles

While

La boucle de type « Tant que » permet la répétition d’un bloc d’instruction tant que la condition testée est vérifiée.

i = 1
while i < 10:
  print(i)
  i += 1

remarque : pas de ++ ou — en python
pas de do while

Écrire un programme qui saisit deux entiers et qui incrémente de 1 le premier tant qu’il n’est pas supérieur au deuxième.

For

On utilise for lorsque le nombre d’itérations est connu.

for j in range(10) : 
  print j   #0 à 9

for x in range(2, 10, 3):
  print(x) #2 5 8

Afficher les nombres pairs de 0 à 20 dans l’ordre décroissant

Que fait cette boucle ?

        for j in range(0,10,2) :
         print(2*j)
  • Le pas (incrément) de la boucle est un entier quelconque, mais il est fixe. Par défaut, il est de 1.
  • Un pas de zéro n’est pas une bonne idée : la boucle ne s’arrêtera jamais.
  • Le pour étant une instruction comme une autre, le corps d’un pour peut très bien contenir un autre pour (ou toute autre boucle).

Afficher pour chaque nombre de 1 à 10 les nombres qui lui précédent .

Parcours de collection

La boucle pour chaque permet de faire défiler une collection que nous verrons dans les chapitres suivants.

fruits = ["apple", "banana", "cherry"]
for x in fruits:
  print(x)


Voici la même boucle avec la structure for classique

fruits = ["apple", "banana", "cherry"]
for x in range(0,3):
 print(fruits[x])
fruits.append("abricot") #ajouter
fruits.remove("banana") #enlever
print(fruits[3]) #afficher, commence à 0 !

https://docs.python.org/fr/3/tutorial/datastructures.html

  1. Écrire un programme qui saisit un entier positif.
  2. Écrire un programme qui affiche n fois ‘coucou’, l’entier n sera saisi par l’utilisateur.
  3. Écrire un programme qui saisit un nombre tant qu’il n’est pas égal à 10.
  4. Écrire un programme qui saisit un nombre tant qu’il n’est pas égal à 10 et affiche un message du style ‘ce nombre n’est pas bon’.

 

 

 

Les fonctions

Lorsqu’un problème programme devient complexe, on le décompose en plusieurs sous-problèmes (sous-programmes).

Intérêts

– Réutilisation de la même procédure plusieurs fois au cours d’un programme en faisant un simple appel.
– Résoudre un programme long et complexe en plusieurs procédures plus simples.
– Obtenir des procédures totalement indépendantes du programme principal.

Une fonction est une suite d’instructions qui permet d’obtenir un résultat

def my_function():
  print("Hello from a function")


my_function()

Valeur retournée

def my_function():
  return 8

i=my_function() # i vaut 8

Paramètres, valeurs par défaut

myFunction(fname="Jo", double b=0)
  print(fname)

  myFunction("Liam")
  myFunction("Jenny",5)
  myFunction("Anja")

Portée des variables

Si les instructions constituant la procédure utilisent des variables (indice de boucle par exemple), ce sont des variables locales à la procédure c’est-à-dire qui ne sont connues, et qui ne peuvent donc être utilisées que dans la fonction. Ils sont détruit à la sortie. Les variables du programme principal sont dites variables globales au programme. Elles sont lisibles par l’ensemble du programme contrairement aux variables locales.

i = 3 #global

myFunction()
  y = 12 #local
  global z=10 #global
}

 

  1. Écrire une fonction qui affiche cinq fois bonjour
  2. Écrire une fonction qui renvoie bonjour
  3. Écrire une fonction qui renvoie le carré de 23
  4. Écrire une fonction qui renvoie la somme des nombres de 8 à 20
  5. Écrire la fonction puissance qui renvoie un nombre x à la puissance y (x et y sont connus dans le programme principal).
  6. Écrire une fonction qui prend en paramètre deux chaines de caractère et renvoie la concaténation de ces chaines
  7. Écrire une fonction Multiplie qui prend en paramètre deux réels. Ainsi Multiplie(2,4) calculera 2*4

 

La Programmation objet

La classe

Une classe est définie par son nom, ses propriétés et ses fonctions. Les objets sont des instances de classe. Ils sont structurés par les propriétés définissant la classe. Ils peuvent exécuter les fonctions définies au sein de la classe.

[enlever la méthode toString et salaire]

Le nom de la classe commence toujours par une majuscule.
Les propriétés sont : nom, annee_naissance et salaire.
Dans une classes, les fonctions s’appellent des méthodes. Ici, les méthodes sont affiche() et calcul_age().
Par convention, le nom d’une classe doit être le même que le nom du fichier.

Exemple :

Soit p1 et p2 deux instances de la classe Personne, donc deux objets Personne.
P1 a pour nom Henri, pour anne_naissance 1980 et p2 a pour nom Duval et pour annee_naissance 1982. Le salaire du premier est de 1500 et du deuxième 2100.
La fonction toString() permet à p1 d’afficher son propre contenu (idem pour p2). La fonction calcul_age() d’afficher leur propre âge.

 

personne.py

import datetime
class Person:
    def __init__(self, nom, annee):
        self.nom= nom
        self.annee= annee
    def calcul_age(self):
        return datetime.datetime.now().year-self.annee

p1 = Person("John", 1990)

print(p1.nom)
print(p1.annee)
print(p1.calcul_age())

Modifier le programme précédent pour qu’il puisse créer deux autres objets p2 et p3.
Réaliser une classe Sandwich qui possède comme propriété trois ingrédients, un poids et un prix.

L’initialisation d’objet

La plupart des classes doivent être dotées d’une fonction particulière appelée constructeur dans d’autres langages, ici une fonction d’initialisation. Elle prend en paramètre les variables que l’on souhaite initialiser.

 def __init__(self, nom, annee):
    self.nom= nom
    self.annee= annee

Réaliser le constructeur de la classe Sandwich .
Créer un objet correspondant à la classe Sandwich en utilisant le constructeur .

Réaliser une classe logement qui possède un nombre de pièce, une surface, une adresse, un prix.
Créer deux objets correspondant à la classe.

L’encapsulation

Encapsulation

Pour que chaque objet soit responsable de son état interne, il faut protéger les objets des interventions extérieures. C’est ce qu’on désigne par l’encapsulation.

_ protected member

__ private member

 

class Base: 
  def __init__(self): 
    
    # Protected member 
    self._a = 2
    # Private member 
    self.__b = 2

# Creating a derived class	 
class Derived(Base): 
  def __init__(self): 
    
    # Calling constructor of 
    # Base class 
    Base.__init__(self) 
    print("Calling protected member of base class: ") 
    print(self._a) 

obj1 = Derived() 
    
obj2 = Base() 

# Calling protected member 
# Outside class will result in 
# AttributeError 
print(obj2.a)

 

def __init__(self,x):
       self.__x = x

#1ere solution
   def get_x(self):
       return self.__x

   def set_x(self, x):
       self.__x = x


#meilleur solution, fonctions appelées automatiquement à l'obtention ou modification de x
    @property
    def x(self):
        return self.__x

    @x.setter
    def x(self, x):
        self.__x = x

 

Réaliser une classe Etudiant qui possède un nom, un prénom, un numéro, une date de naissance et une adresse. Ces éléments sont protégés. On réalisera les accesseurs et les modificateurs nécessaires.
Créer 3 étudiants et modifier le nom du premier, afficher la date de naissance du deuxième, modifier le numéro du troisième tout en affichant son nom.

 

Les tableaux

Les tableaux à une dimension

On souhaite enregistrer le nom de chaque étudiant de la classe. Une solution est de créer une variable par étudiant.

nom1 = "Jo";
nom2 = "Daril";
nom3 = "Dave";
nom4 = "Harry";
nom5 = "Doris";
...

Pour éviter d’avoir un grand nombre de variable, on peut regrouper celle-ci en une seule, un tableau. On le représente souvent comme une suite de cases contenant chacune une valeur.
On appelle indice le numéro d’une case du tableau. En programmation, la première case commence à l’indice 0.

Déclaration d’un tableau

noms = ["Jo", "Harry", "Zaza", "Tabata"]

Affectation d’un tableau

tab[0]=5
tab.append(3)
tab[2]= tab[0]+ tab[1]
  1. Écrire une fonction demandant à l’utilisateur 10 entiers. Les sauvegarder dans un tableau.
  2. Écrire  une fonction qui affiche les valeurs du tableau.
  3. Écrire  une fonction qui affiche les valeurs du tableau du dernier indice au premier.
  4. Écrire  une fonction qui affiche uniquement les valeurs négatives du tableau.