algo avancée
This commit is contained in:
parent
63c4a7e2fc
commit
affa70b31c
|
@ -195,6 +195,21 @@ La boucle **pour** (for)
|
||||||
Truc Suivant
|
Truc Suivant
|
||||||
Fin
|
Fin
|
||||||
|
|
||||||
|
.. important:: Même la boucle for dépend de l'environnement de language,
|
||||||
|
ça n'est pas un axiome algorithmique, dans un contexte
|
||||||
|
impératif, la syntaxe sera de la forme::
|
||||||
|
|
||||||
|
for i=1 to 50 do
|
||||||
|
(... bla bla ...)
|
||||||
|
done
|
||||||
|
|
||||||
|
et dans un contexte objet:
|
||||||
|
|
||||||
|
for i in myobj:
|
||||||
|
(... bla bla ...)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
La boucle tant que (while)
|
La boucle tant que (while)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -99,3 +99,38 @@ Travaux Pratiques
|
||||||
cas 12 : écrire “décembre (31 jours)”
|
cas 12 : écrire “décembre (31 jours)”
|
||||||
défaut : écrire “numéro invalide”
|
défaut : écrire “numéro invalide”
|
||||||
fselon
|
fselon
|
||||||
|
|
||||||
|
|
||||||
|
.. ifconfig:: exercice
|
||||||
|
|
||||||
|
**travaux pratiques :**
|
||||||
|
|
||||||
|
|
||||||
|
tp liste :
|
||||||
|
recherche par dichotomie d'un élément dans une triée
|
||||||
|
|
||||||
|
.. ifconfig:: exercice
|
||||||
|
|
||||||
|
**travaux pratiques :**
|
||||||
|
|
||||||
|
tp ensembles :
|
||||||
|
|
||||||
|
Écrivez une fonction Python `Delta(A,B)` qui renvoie la différence symétrique de deux ensembles A et B::
|
||||||
|
|
||||||
|
A delta B := A union B \ A intersection B.
|
||||||
|
|
||||||
|
Un ensemble est représenté sous forme de liste et on supposera que chaque valeur contenue dans une liste n'apparaît qu'une fois.
|
||||||
|
Par exemple si A=[2,1,5,6,9] et B=[7,4,5,2,8], la liste renvoyée est la liste [1,6,9,7,4,8].
|
||||||
|
|
||||||
|
|
||||||
|
.. ifconfig:: exercice
|
||||||
|
|
||||||
|
**travaux pratiques :**
|
||||||
|
|
||||||
|
tp dictionnaires :
|
||||||
|
|
||||||
|
On rappelle qu'un dictionnaire en python est une structure énumérée (comme les listes, tuples, chaînes) dont les clés sont quelconques (dans les autres cas les clefs sont entières). Comme pour une liste, on accède à la valeur associée à une clef c par H[c]. On crée un dictionnaire vide dico avec dico = {}. On crée une nouvelle entrée en écrivant par exemple dico["pseudo"] = "Keyser Söze". On obtient la liste des clés avec list(dico.keys()) et la liste des valeurs avec list(dico.values()). Pour récupérer une valeur à partir de sa clef, il suffit d'écrire dico[clef].
|
||||||
|
|
||||||
|
Écrivez une fonction Python Distribution(chaine) qui renvoie un dictionnaire dont les clefs sont les caractères de la chaîne passée en paramètre et la valeur associée à une clef c est le nombre d'occurences de ce caractère dans la chaîne. Par exemple, si chaine="abaccab", alors le dictionnaire renvoyé est {"a":3,"b":2,"c":2}. Écrivez une fonction LettreLaPlusFrequente(chaine) qui renvoie la lettre la plus fréquente dans la chaine.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,143 @@
|
||||||
Définition d'un programme
|
Définition d'un programme
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
Ce pourrait être dit abstraitement, mais ce serait dommage.
|
||||||
|
Construisons un programme en python
|
||||||
|
|
||||||
|
La CLI (command line interface)
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
.. code-block:: ocaml
|
||||||
|
|
||||||
|
let echo () =
|
||||||
|
let len = Array.length Sys.argv in
|
||||||
|
if len > 1 then
|
||||||
|
begin
|
||||||
|
for i=0 to len-1 do
|
||||||
|
print_string Sys.argv.(i) ;
|
||||||
|
print_char ' ';
|
||||||
|
done
|
||||||
|
end
|
||||||
|
let _ = echo()
|
||||||
|
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
ocaml cli.ml arg1 arg2 arg3
|
||||||
|
cli.ml arg1 arg2 arg3
|
||||||
|
|
||||||
|
en python:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
print sys.argv
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
python toto.py arg1 arg2
|
||||||
|
['toto.py', 'arg1', 'arg2']
|
||||||
|
|
||||||
|
c'est plus simple...
|
||||||
|
|
||||||
|
|
||||||
|
La REPL (boucle d'interaction)
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
REPL
|
||||||
|
|
||||||
|
Read Eval Print Loop : outil principal de communication avec un programme
|
||||||
|
ou avec un système. Exemples : la console python, le prompt OCaml.
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
outil de communication avec un programme.
|
||||||
|
|
||||||
|
- interface texte
|
||||||
|
- interface graphique
|
||||||
|
|
||||||
|
**Exemples de REPL**
|
||||||
|
|
||||||
|
Le prompt python::
|
||||||
|
|
||||||
|
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
|
||||||
|
[GCC 5.4.0 20160609] on linux2
|
||||||
|
Type "help", "copyright", "credits" or "license" for more information.
|
||||||
|
>>>
|
||||||
|
>>> dir()
|
||||||
|
['__builtins__', '__doc__', '__name__', readline', 'rlcompleter']
|
||||||
|
>>>
|
||||||
|
|
||||||
|
Le prompt ipython::
|
||||||
|
|
||||||
|
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
|
||||||
|
Type "copyright", "credits" or "license" for more information.
|
||||||
|
|
||||||
|
IPython 2.4.1 -- An enhanced Interactive Python.
|
||||||
|
? -> Introduction and overview of IPython's features.
|
||||||
|
%quickref -> Quick reference.
|
||||||
|
help -> Python's own help system.
|
||||||
|
object? -> Details about 'object', use 'object??' for extra details.
|
||||||
|
|
||||||
|
In [1]:
|
||||||
|
|
||||||
|
Le prompt OCaml (utop)::
|
||||||
|
|
||||||
|
Type #utop_help for help about using utop.
|
||||||
|
|
||||||
|
─( 09:21:24 )─< command 0 >──
|
||||||
|
utop #
|
||||||
|
# let x = 1 in x + 2;;
|
||||||
|
- : int = 3
|
||||||
|
# let y = 1 + 2;;
|
||||||
|
val y : int = 3
|
||||||
|
# y * y;;
|
||||||
|
- : int = 9
|
||||||
|
|
||||||
|
Construire une boucle d'interaction avec l'utilisateur en python::
|
||||||
|
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
error = True
|
||||||
|
while error:
|
||||||
|
try:
|
||||||
|
entier = int(input('donnez un entier : '))
|
||||||
|
error = False
|
||||||
|
except:
|
||||||
|
print('une valeur entiere est attendue')
|
||||||
|
print(entier)
|
||||||
|
|
||||||
|
Lire et écrire dans un fichier
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Les descripteurs de fichiers (file handle)
|
||||||
|
|
||||||
|
Exemple en python
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> fh = file("test.txt", "w")
|
||||||
|
>>> fh.write("un contenu exemple")
|
||||||
|
>>> fh.close()
|
||||||
|
>>>
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> fh.read()
|
||||||
|
'un contenu exemple'
|
||||||
|
>>> fh.close()
|
||||||
|
>>>
|
||||||
|
|
||||||
|
Linéarisation (serialisation) de données par exemple en json
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import json
|
||||||
|
data = dict(a='essai', b='essai2', c=range(3))
|
||||||
|
with open('data.txt', 'w') as outfile:
|
||||||
|
json.dump(data, outfile)
|
||||||
|
|
||||||
Qu'est-ce qu'un programme ?
|
Qu'est-ce qu'un programme ?
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
@ -431,99 +568,3 @@ Pour résumer en ocaml, nous avons vu
|
||||||
- qu'il n'y a pas de distinction entre expressions et instructions.
|
- qu'il n'y a pas de distinction entre expressions et instructions.
|
||||||
|
|
||||||
|
|
||||||
La REPL (boucle d'interaction)
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
.. glossary::
|
|
||||||
|
|
||||||
REPL
|
|
||||||
|
|
||||||
Read Eval Print Loop : outil principal de communication avec un programme
|
|
||||||
ou avec un système. Exemples : la console python, le prompt OCaml.
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
outil de communication avec un programme.
|
|
||||||
|
|
||||||
- interface texte
|
|
||||||
- interface graphique
|
|
||||||
|
|
||||||
**Exemples de REPL**
|
|
||||||
|
|
||||||
Le prompt python::
|
|
||||||
|
|
||||||
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
|
|
||||||
[GCC 5.4.0 20160609] on linux2
|
|
||||||
Type "help", "copyright", "credits" or "license" for more information.
|
|
||||||
>>>
|
|
||||||
>>> dir()
|
|
||||||
['__builtins__', '__doc__', '__name__', readline', 'rlcompleter']
|
|
||||||
>>>
|
|
||||||
|
|
||||||
Le prompt ipython::
|
|
||||||
|
|
||||||
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
|
|
||||||
Type "copyright", "credits" or "license" for more information.
|
|
||||||
|
|
||||||
IPython 2.4.1 -- An enhanced Interactive Python.
|
|
||||||
? -> Introduction and overview of IPython's features.
|
|
||||||
%quickref -> Quick reference.
|
|
||||||
help -> Python's own help system.
|
|
||||||
object? -> Details about 'object', use 'object??' for extra details.
|
|
||||||
|
|
||||||
In [1]:
|
|
||||||
|
|
||||||
Le prompt OCaml (utop)::
|
|
||||||
|
|
||||||
Type #utop_help for help about using utop.
|
|
||||||
|
|
||||||
─( 09:21:24 )─< command 0 >──
|
|
||||||
utop #
|
|
||||||
# let x = 1 in x + 2;;
|
|
||||||
- : int = 3
|
|
||||||
# let y = 1 + 2;;
|
|
||||||
val y : int = 3
|
|
||||||
# y * y;;
|
|
||||||
- : int = 9
|
|
||||||
|
|
||||||
Construire une boucle d'interaction avec l'utilisateur en python::
|
|
||||||
|
|
||||||
#!/usr/bin/env python3
|
|
||||||
error = True
|
|
||||||
while error:
|
|
||||||
try:
|
|
||||||
entier = int(input('donnez un entier : '))
|
|
||||||
error = False
|
|
||||||
except:
|
|
||||||
print('une valeur entiere est attendue')
|
|
||||||
print(entier)
|
|
||||||
|
|
||||||
Lire et écrire dans un fichier
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
Les descripteurs de fichiers (file handle)
|
|
||||||
|
|
||||||
Exemple en python
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> fh = file("test.txt", "w")
|
|
||||||
>>> fh.write("un contenu exemple")
|
|
||||||
>>> fh.close()
|
|
||||||
>>>
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> fh.read()
|
|
||||||
'un contenu exemple'
|
|
||||||
>>> fh.close()
|
|
||||||
>>>
|
|
||||||
|
|
||||||
Linéarisation (serialisation) de données par exemple en json
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
import json
|
|
||||||
data = dict(a='essai', b='essai2', c=range(3))
|
|
||||||
with open('data.txt', 'w') as outfile:
|
|
||||||
json.dump(data, outfile)
|
|
||||||
|
|
Loading…
Reference in New Issue