-
Notifications
You must be signed in to change notification settings - Fork 1
/
Python-TP1-2015.tex
1057 lines (794 loc) · 49 KB
/
Python-TP1-2015.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% Default to the notebook output style
% Inherit from the specified cell style.
\documentclass{article}
\usepackage{graphicx} % Used to insert images
\usepackage{adjustbox} % Used to constrain images to a maximum size
\usepackage{color} % Allow colors to be defined
\usepackage{enumerate} % Needed for markdown enumerations to work
\usepackage{geometry} % Used to adjust the document margins
\usepackage{amsmath} % Equations
\usepackage{amssymb} % Equations
\usepackage{eurosym} % defines \euro
\usepackage[mathletters]{ucs} % Extended unicode (utf-8) support
\usepackage[utf8x]{inputenc} % Allow utf-8 characters in the tex document
\usepackage{fancyvrb} % verbatim replacement that allows latex
\usepackage{grffile} % extends the file name processing of package graphics
% to support a larger range
% The hyperref package gives us a pdf with properly built
% internal navigation ('pdf bookmarks' for the table of contents,
% internal cross-reference links, web links for URLs, etc.)
\usepackage{hyperref}
\usepackage{longtable} % longtable support required by pandoc >1.10
\usepackage{booktabs} % table support for pandoc > 1.12.2
\definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
\definecolor{darkorange}{rgb}{.71,0.21,0.01}
\definecolor{darkgreen}{rgb}{.12,.54,.11}
\definecolor{myteal}{rgb}{.26, .44, .56}
\definecolor{gray}{gray}{0.45}
\definecolor{lightgray}{gray}{.95}
\definecolor{mediumgray}{gray}{.8}
\definecolor{inputbackground}{rgb}{.95, .95, .85}
\definecolor{outputbackground}{rgb}{.95, .95, .95}
\definecolor{traceback}{rgb}{1, .95, .95}
% ansi colors
\definecolor{red}{rgb}{.6,0,0}
\definecolor{green}{rgb}{0,.65,0}
\definecolor{brown}{rgb}{0.6,0.6,0}
\definecolor{blue}{rgb}{0,.145,.698}
\definecolor{purple}{rgb}{.698,.145,.698}
\definecolor{cyan}{rgb}{0,.698,.698}
\definecolor{lightgray}{gray}{0.5}
% bright ansi colors
\definecolor{darkgray}{gray}{0.25}
\definecolor{lightred}{rgb}{1.0,0.39,0.28}
\definecolor{lightgreen}{rgb}{0.48,0.99,0.0}
\definecolor{lightblue}{rgb}{0.53,0.81,0.92}
\definecolor{lightpurple}{rgb}{0.87,0.63,0.87}
\definecolor{lightcyan}{rgb}{0.5,1.0,0.83}
% commands and environments needed by pandoc snippets
% extracted from the output of `pandoc -s`
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}}
\newcommand{\RegionMarkerTok}[1]{{#1}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
\newcommand{\NormalTok}[1]{{#1}}
% Define a nice break command that doesn't care if a line doesn't already
% exist.
\def\br{\hspace*{\fill} \\* }
% Math Jax compatability definitions
\def\gt{>}
\def\lt{<}
% Document parameters
\title{Python-TP1-2015}
% Pygments definitions
\makeatletter
\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax%
\let\PY@ul=\relax \let\PY@tc=\relax%
\let\PY@bc=\relax \let\PY@ff=\relax}
\def\PY@tok#1{\csname PY@tok@#1\endcsname}
\def\PY@toks#1+{\ifx\relax#1\empty\else%
\PY@tok{#1}\expandafter\PY@toks\fi}
\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{%
\PY@it{\PY@bf{\PY@ff{#1}}}}}}}
\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}}
\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf}
\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}}
\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit}
\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}}
\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}}
\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}}
\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}}
\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}}
\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}}
\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}
\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}}
\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}}
\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\def\PYZbs{\char`\\}
\def\PYZus{\char`\_}
\def\PYZob{\char`\{}
\def\PYZcb{\char`\}}
\def\PYZca{\char`\^}
\def\PYZam{\char`\&}
\def\PYZlt{\char`\<}
\def\PYZgt{\char`\>}
\def\PYZsh{\char`\#}
\def\PYZpc{\char`\%}
\def\PYZdl{\char`\$}
\def\PYZhy{\char`\-}
\def\PYZsq{\char`\'}
\def\PYZdq{\char`\"}
\def\PYZti{\char`\~}
% for compatibility with earlier versions
\def\PYZat{@}
\def\PYZlb{[}
\def\PYZrb{]}
\makeatother
% Exact colors from NB
\definecolor{incolor}{rgb}{0.0, 0.0, 0.5}
\definecolor{outcolor}{rgb}{0.545, 0.0, 0.0}
% Prevent overflowing lines due to hard-to-break entities
\sloppy
% Setup hyperref package
\hypersetup{
breaklinks=true, % so long urls are correctly broken across lines
colorlinks=true,
urlcolor=blue,
linkcolor=darkorange,
citecolor=darkgreen,
}
% Slightly bigger margins than the latex defaults
\geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
\begin{document}
\maketitle
\subparagraph{TP 1 -- Informatique CM3 -- Septembre
2015}\label{tp-1-informatique-cm3-septembre-2015}
\section{Python @ Polytech'Lille}\label{python-polytechlille}
Le texte de cette sessions de travaux pratiques est également disponible
ici
http://nbviewer.ipython.org/github/ecalzavarini/python-at-polytech-lille/blob/master/Python-TP1-2015.ipynb
\subsubsection{Introduction aux commandes
Linux}\label{introduction-aux-commandes-linux}
Avant de commencer avec notre introduction au langage de programmation
Python, nous devons familiariser avec l'environnement du système
d'explotation Linux.
La première étape est d'apprendre les commandes les plus courantes. Ces
commandes peuvent être tapées sur une console Linux.
Pour savoir comment accéder à une console sur la distribution Linux
Debian dont vous disposez, voir: https://wiki.debian.org/fr/Console ou
simplement recherchez l'application ``terminal'' sur le menu des
applications.
\paragraph{La commande pwd}\label{la-commande-pwd}
La commande ``pwd'' affiche le répertoire courant, c'est à dire le
répertoire où l'on se trouve au moment où on tape la commande.
\paragraph{La commande ls}\label{la-commande-ls}
La commande ``ls'' permet de lister ce que contient un répertoire. Il y
a plusieurs manières de l'utiliser :
``ls'' donne la liste brute de ce qui se trouve dans le répertoire
``ls -l'' donne la liste de ce qui se trouve dans le répertoire avec des
informations complémentaires (droits de lecture, écriture et exécution,
propriétaire, taille, date de création ou de dernière modification).
``ls -a'' liste tous (pensez au mot ``all'') les fichiers du répertoire,
y compris les fichiers cachés. Cette option est très utile lorsque l'on
se trouve dans son répertoire personnel car il contient les fichiers de
configuration de l'utilisateur dont les noms commencent généralement par
un point et seule l'option -a permet de détecter leur existence.
\paragraph{La commande mkdir}\label{la-commande-mkdir}
La commande ``mkdir'' permet de créer un répertoire.
``mkdir nom\_repertoire'' crée le répertoire ayant pour nom
nom\_repertoire.
\paragraph{La commande cd}\label{la-commande-cd}
La commande ``cd'' permet de se déplacer dans l'arborescence de
repertoires. Il y a plusieurs manières de l'utiliser :
``cd nom\_repertoire'' permet d'aller dans le répertoire nom\_repertoire
``cd ..'' permet de retourner dans le répertoire parent (celui qui est
au-dessus dans l'arborescence de répertoires).
\paragraph{L'éditeur de texte emacs}\label{luxe9diteur-de-texte-emacs}
Pour créer ou modifier un fichier ``emacs -nw nom\_fichier.txt''
Pour sauvegarder tapez la combinaison de touches suivante: Ctrl-x
Ctrl-s.
Pour quitter emacs: Ctrl-x Ctrl-c.
\paragraph{La commande rm}\label{la-commande-rm}
La commande ``rm'' permet de supprimer un fichier :
``rm nom\_fichier'' supprime le fichier nom\_fichier si il se trouve
dans le répertoire courant.
``rm --r'' supprime un répertoire et ses sous répertoires.
\paragraph{La commande top}\label{la-commande-top}
La commande ``top'' affiche en continu des informations décrivant
l'activité du système. Elle permet surtout de suivre les ressources que
les processus utilisent (quantité de mémoire, pourcentage de
CPU\ldots{}). Sous top il est possible d'expédier de manière interactive
un signal à un processus, par exemple afin de le stopper, en tapant
``k'', top demande ensuite l'identifiant (PID) du processus concerné.
Pour quitter top, appuyer simplement sur la touche ``q''.
\paragraph{Archivage de données
(tar)}\label{archivage-de-donnuxe9es-tar}
La commande ``tar'' gère des archives, contenant chacune au moins un
répertoire ou fichier.
Vous aurez souvent besoin de ``tar xzf nom\_du\_fichier.tar.gz'' , qui
décompacte une archive au format .tar.gz ou .tgz. L'extension .tar.gz ou
.tgz indique que le fichier est une archive tar et qu'il est compacté.
Les arguments (aussi appelés options) employés dans la commande
précédente (``xzf'') peuvent être ainsi compris:
x (extraction) déclenche l'extraction de certains fichiers d'une archive
(lorsque l'on ne spécifie pas les noms des fichiers que l'on souhaite
extraire de l'archive, tar les extrait tous)
z décompacte l'archive grâce à la commande gzip
f traite un fichier-archive dont le nom suit (ici:
``nom\_du\_fichier.tar.gz'')
Si je me trouve dans le répertoire ``/home/delcros/'' la commande
suivante créera une archive du répertoire ``/home/delcros/personnel'' :
``tar cvzf personnel.tgz personnel''
l'option ``c'' permet de créer une archive
L'option ``z'' compacte l'archive grâce à gzip.
\paragraph{Questions :}\label{questions}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\itemsep1pt\parskip0pt\parsep0pt
\item
Ouvrir une consolle Linux et créer un répertoire TP-PYTHON dans le
répertoire courant. Comment vérifier qu'il a bien été créé ?
\end{enumerate}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\setcounter{enumi}{1}
\itemsep1pt\parskip0pt\parsep0pt
\item
Aller dans le répertoire que vous venez de créer, puis lister ce qu'il
contient. Quelle commande vous permet de savoir si vous êtes bien dans
le répertoire TP-PYTHON ?
\end{enumerate}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\setcounter{enumi}{2}
\itemsep1pt\parskip0pt\parsep0pt
\item
Créer un fichier appelé README.txt dans le répertoire TP-PYTHON avec
la commande ``emacs'', taper quelques lignes dedans. Enregistrer le
ficher. Vérifier qu'il a bien été créé.
\end{enumerate}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt
\item
Créer un fichier-archive du repertoire TP-PYTHON.
\end{enumerate}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\setcounter{enumi}{4}
\itemsep1pt\parskip0pt\parsep0pt
\item
Supprimer le fichier que vous venez de créer, comment vérifier qu'il a
bien été supprimé ?
\end{enumerate}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\setcounter{enumi}{5}
\itemsep1pt\parskip0pt\parsep0pt
\item
Supprimer le répertoire TP-PYTHON. Vérifier qu'il a bien été supprimé.
\end{enumerate}
\begin{enumerate}
\def\labelenumi{\arabic{enumi})}
\setcounter{enumi}{6}
\itemsep1pt\parskip0pt\parsep0pt
\item
Lancer l'interprète du langage Python (écrire ``python'' dans la
consolle de Linux). Supposons maintenant que, pour une raison
quelconque, le programme est bloqué. Tuez l'interprète Python en
utilisant la commande ``top''.
\end{enumerate}
\subsubsection{Introduction à la programmation numérique en
Python}\label{introduction-uxe0-la-programmation-numuxe9rique-en-python}
Pour lancer l'interprète du langage Python écrire ``python'' dans la
consolle de Linux.
Saisir votre série d'instructions Python après l'invite de la ligne de
commande ``\textgreater{}\textgreater{}\textgreater{}'' (à noter que
chaque instruction doit être validée avec la touche ``return'').
Une deuxième possibilité d'utilisation beaucoup plus pratique est de
créer un fichier (appelé script), par exemple avec l'éditeur de text
emacs : ``emacs -nw script.py''
Une fois que les instructions ont été écrites dans ce fichier, le script
peut être exécuté avec la commande ``python script.py''.
Le site le plus utile pour trouver des informations sur python est :
https://docs.python.org/2/\\voir notamment dans les sections
``Tutorial'' et ``Language reference''.
Pendant ce TP vous aurez à écrire plusieurs scripts (Nous vous suggérons
de les nommer script1.py, script2.py, \ldots{})
Les scripts doivent être accompagnés par un par un document descriptif
unique (README.txt). Dans ce fichier, vous devrez décrire le mode de
fonctionnement des scripts et, si besoin, mettre vos commentaires. Merci
d'y écrires aussi vos nomes et prenoms complets.
Tous les fichiers doivent être mis dans un dossier appelé TP1-nom1-nom2
et ensuite être compressés dans un fichier TP1-nom1-nom2.tgz .
Enfin vous allez envoyer ce fichier par email à l'enseignant : soit
Enrico ([email protected]) ou Stefano
Vous avez une semaine de temps pour compléter le TP, c'est-à-dire que la
date limite pour envoyer vos travaux c'est le jour avant le TP suivant.
\subsubsection{Script 1 : entrer ou afficher du texte et des
données}\label{script-1-entrer-ou-afficher-du-texte-et-des-donnuxe9es}
Nous voulons écrire un script qui tout d'abord affiche simplement une
message de bienvenue :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}1}]:} \PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Bienvenue au premier TP d}\PY{l+s}{\PYZsq{}}\PY{l+s}{informatique}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
Bienvenue au premier TP d'informatique
\end{Verbatim}
Vérifiez que le programme ci-dessus fonctionne quand il est écrit dans
un script (appelé par exemple script1.py) et interprété par python avec
la commande ``python script1.py''.
Nous souhaitons maintenant que ce programme nous demande aussi combien
d'étudiants sont présents dans la salle et qu'il affiche ce numéro sur
l'écran.
A noter que la lecture de données peut se faire par interrogation de
l'utilisateur. Par exemple :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}2}]:} \PY{n}{p} \PY{o}{=} \PY{n+nb}{input}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Entrer la valeur de la precision p, p =}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
Entrer la valeur de la precision p, p =0.1
\end{Verbatim}
l'écriture des données enregistrées dans une variable peut se faire tout
simplement encore avec la fonction ``print''
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}3}]:} \PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{la valeure de la precision est :}\PY{l+s}{\PYZdq{}} \PY{o}{+} \PY{n+nb}{str}\PY{p}{(}\PY{n}{p}\PY{p}{)} \PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
la valeure de la precision est :0.1
\end{Verbatim}
ou de façon équivalente :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}4}]:} \PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{la valeure de la precision est : }\PY{l+s+si}{\PYZpc{}e}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{p} )
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
la valeure de la precision est : 1.000000e-01
\end{Verbatim}
\paragraph{Commentaires en python}\label{commentaires-en-python}
Une bonne habitude à prendre est d'écrire des commentaires dans le
srtipts. Nous pouvons le faire avec le symbole " \# " , par exemple :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}5}]:} \PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{la valeure de p est : }\PY{l+s+si}{\PYZpc{}e}\PY{l+s}{\PYZdq{}} \PY{o}{\PYZpc{}}\PY{k}{p} ) \PYZsh{} ici nous imprimons le résultat final
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
la valeure de p est : 1.000000e-01
\end{Verbatim}
\paragraph{Écrivez donc votre premier
script!}\label{uxe9crivez-donc-votre-premier-script}
\subsubsection{Script2 : effectuer des opérations simples sur les
variables}\label{script2-effectuer-des-opuxe9rations-simples-sur-les-variables}
Nous souhaiton écrire un script qui fait la conversion d'unité pour des
mesures de pression.
Ce script devra demander à l'utilisateur d'introduire une valeur de
pression et une unité de mesure (choisi parmi: Pascal (Pa) , bar (bar) ,
atmosphère (atm) , Torricelli (torr) et pounds per square inch (psi)),
puis demander à l'utilisateur quelle unité il souhaite pour la
conversion et enfin afficher la valeur de pression dans l'unité
demandée.
Pour mener à bien ce script les informations suivantes peuvent être
utiles :
La table de conversion des unités de pression peut être repèrée ici :
http://en.wikipedia.org/wiki/Pressure\_measurement\#Units
\paragraph{L'affectation de données dans des
variables}\label{laffectation-de-donnuxe9es-dans-des-variables}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}6}]:} \PY{n}{a} \PY{o}{=} \PY{l+m+mf}{5.0}
\PY{n}{b} \PY{p}{,} \PY{n}{c} \PY{o}{=} \PY{l+m+mi}{10} \PY{p}{,} \PY{l+m+mi}{3}
\PY{n}{name} \PY{o}{=} \PY{l+s}{\PYZdq{}}\PY{l+s}{Mark}\PY{l+s}{\PYZdq{}}
\end{Verbatim}
Ici ``a'' , ``b'' , ``c'' et ``name'' sont des identificateurs (ou
simplement des variables).
Python ne nécessite pas de déclarer explicitement les types de
variables, différemment qu'en Fortran, C et d'autres langages. Juste
affectez une variable et Python comprendera automatiquement, ce n'est
pas nécessaire de préciser le type (réel, entier, character,
etc\ldots{})
Vous pouvez demander à Python de vous dire quel type il a attribué à vos
variables:
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}7}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{a}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}7}]:} float
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}8}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{b}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}8}]:} int
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}6}]:} \PY{n+nb}{type}\PY{p}{(}\PY{n}{name}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}6}]:} str
\end{Verbatim}
Portez une attention particulière à l'attribution de valeurs à virgule
flottante à des variables ou vous risquez d'obtenir des valeurs que vous
ne vous attendez pas dans vos programmes. Par exemple ,
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}9}]:} \PY{k}{print}\PY{p}{(}\PY{n}{b}\PY{o}{/}\PY{n}{c}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
3
\end{Verbatim}
Vous voyez , si vous divisez un nombre entier par un nombre entier ,
Python retourne une réponse arrondie à l'entier le plus proche . Mais si
vous voulez une résultat à virgule flottante (type float), l'un des
numéros doit être de type float. Le simple ajout d'un point décimal fera
l'affaire :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}10}]:} \PY{n}{b} \PY{p}{,} \PY{n}{c} \PY{o}{=} \PY{l+m+mf}{10.} \PY{p}{,} \PY{l+m+mf}{3.}
\PY{k}{print} \PY{p}{(}\PY{n}{b}\PY{o}{/}\PY{n}{c}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
3.33333333333
\end{Verbatim}
\paragraph{Utilisation des listes}\label{utilisation-des-listes}
Une liste est une collections d'objets :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}11}]:} \PY{n}{l} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{5}\PY{p}{,} \PY{l+m+mi}{6}\PY{p}{,} \PY{l+m+mi}{4}\PY{p}{]} \PY{c}{\PYZsh{} Definition et affectation d\PYZsq{}une liste}
\PY{k}{print}\PY{p}{(}\PY{n}{l}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{)} \PY{c}{\PYZsh{} Les indices commencent à 0, et non à 1}
\PY{k}{print}\PY{p}{(}\PY{n}{l}\PY{p}{[}\PY{l+m+mi}{3}\PY{p}{]}\PY{p}{)} \PY{c}{\PYZsh{} Le dernier indice est le 3ème}
\PY{k}{print}\PY{p}{(}\PY{n}{l}\PY{p}{[}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{)} \PY{c}{\PYZsh{} On peut compter à partir de la fin, en utilisant des indices negatifs}
\PY{k}{print}\PY{p}{(}\PY{n}{l}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{:}\PY{l+m+mi}{3}\PY{p}{]}\PY{p}{)} \PY{c}{\PYZsh{} On peut selectioner une tranche (slice) d\PYZsq{}elements dans la liste}
\PY{k}{print}\PY{p}{(}\PY{n}{l}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{:}\PY{l+m+mi}{3}\PY{p}{:}\PY{l+m+mi}{2}\PY{p}{]}\PY{p}{)} \PY{c}{\PYZsh{} La syntaxe du “slicing” [est start:stop:step]}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
0
4
4
[0, 5, 6]
[0, 6]
\end{Verbatim}
Une liste peut être modifiée:
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}12}]:} \PY{n}{l}\PY{p}{[}\PY{l+m+mi}{2}\PY{p}{]} \PY{o}{=} \PY{n}{l}\PY{p}{[}\PY{l+m+mi}{2}\PY{p}{]}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{+} \PY{l+m+mi}{1}
\PY{k}{print}\PY{p}{(}\PY{n}{l}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
[0, 5, 13, 4]
\end{Verbatim}
Si nous voulons connaître le nombre d'éléments dans une liste :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}13}]:} \PY{n+nb}{len}\PY{p}{(}\PY{n}{l}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}13}]:} 4
\end{Verbatim}
Nous pouvons créer de la même manière une liste de mots :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}14}]:} \PY{n}{mots} \PY{o}{=} \PY{p}{[}\PY{l+s}{\PYZdq{}}\PY{l+s}{arbre}\PY{l+s}{\PYZdq{}} \PY{p}{,} \PY{l+s}{\PYZdq{}}\PY{l+s}{avion}\PY{l+s}{\PYZdq{}} \PY{p}{,} \PY{l+s}{\PYZdq{}}\PY{l+s}{nuage}\PY{l+s}{\PYZdq{}}\PY{p}{]}
\PY{k}{print}\PY{p}{(}\PY{n}{mots}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
avion
\end{Verbatim}
\paragraph{Structure alternative ``if''}\label{structure-alternative-if}
Regardez l'exemple ci-dessous concernant le calcul des racines réelles
d'une équation algébrique du second ordre, pour comprendre le
fonctionnement d'une structure ``if'' :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor} }]:} \PY{n}{d} \PY{o}{=} \PY{n}{b}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{l+m+mi}{4}\PY{o}{*}\PY{n}{a}\PY{o}{*}\PY{n}{c}
\PY{k}{if} \PY{n}{d} \PY{o}{\PYZgt{}} \PY{l+m+mi}{0} \PY{p}{:}
\PY{n}{x1} \PY{o}{=} \PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{b} \PY{o}{\PYZhy{}} \PY{n}{sqrt}\PY{p}{(}\PY{n}{d}\PY{p}{)}\PY{p}{)}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{a}\PY{p}{)}
\PY{n}{x2} \PY{o}{=} \PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{b} \PY{o}{+} \PY{n}{sqrt}\PY{p}{(}\PY{n}{d}\PY{p}{)}\PY{p}{)}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{a}\PY{p}{)}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{RESULTATS :}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Deux racines distinctes : x1 = }\PY{l+s}{\PYZdq{}} \PY{o}{+} \PY{n+nb}{str}\PY{p}{(}\PY{n}{x1}\PY{p}{)} \PY{o}{+} \PY{l+s}{\PYZdq{}}\PY{l+s}{ et x2 = }\PY{l+s}{\PYZdq{}} \PY{o}{+} \PY{n+nb}{str}\PY{p}{(}\PY{n}{x2}\PY{p}{)}\PY{p}{)}
\PY{k}{elif} \PY{n}{d} \PY{o}{==} \PY{l+m+mi}{0} \PY{p}{:}
\PY{n}{x1} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{n}{b}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{a}\PY{p}{)}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{RESULTATS :}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Une racine double : x1 = }\PY{l+s}{\PYZdq{}} \PY{o}{+} \PY{n+nb}{str}\PY{p}{(}\PY{n}{x1}\PY{p}{)}\PY{p}{)}
\PY{k}{else} \PY{p}{:}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{RESULTATS :}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Aucune solution!}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\end{Verbatim}
\paragraph{à noter : indentation necessaire en langage
Python}\label{uxe0-noter-indentation-necessaire-en-langage-python}
Pour les structures de controle du langage Python, comme ``if''(et nous
verros ensuite ``for''), il n'y a pas de mot clé ``end'' pour signaler
la fin du bloc de lignes concernées par les structures
``if'',``while'',``for''. Il faut par contre indenter les lignes (c'est
à dire créer des décalages à l'aide de la touche tabulation ``tab'' du
clavier) afin de définir une dépendance d'un bloc de lignes par rapport
à un autre.
\subsubsection{Script 3 : lire des données à partir d'un fichier et les
élaborer}\label{script-3-lire-des-donnuxe9es-uxe0-partir-dun-fichier-et-les-uxe9laborer}
Nous disposons des données de pression enregistrées (à la fréquence
d'une mesure par seconde) par un tube de Pitot d'un avion en vol à une
altitude de 10000 mètres :
https://github.com/ecalzavarini/python-at-polytech-lille/blob/master/pressure.txt
Vous pouvez télécharger ce fichier avec la commande de Linux " wget ``.
Ecrivez sur votre console :''wget adresse\_internet\_du\_fichier ``.
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}16}]:} \PY{k+kn}{from} \PY{n+nn}{IPython.display} \PY{k+kn}{import} \PY{n}{Image}
\PY{n}{Image}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{http://upload.wikimedia.org/wikipedia/commons/0/00/Pitot\PYZus{}tube\PYZus{}wings\PYZhy{}fr.jpg}\PY{l+s}{\PYZsq{}}\PY{p}{)}
\end{Verbatim}
\texttt{\color{outcolor}Out[{\color{outcolor}16}]:}
\begin{center}
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{Python-TP1-2015_files/Python-TP1-2015_86_0.jpg}
\end{center}
{ \hspace*{\fill} \\}
On est interessé à écrire un script qui lit ces données et qui les
transforme dans des mesures de vitesse. La relation entre la pression et
la vitesse est donnée par la loi de Bernoulli:
\[V(t) = \sqrt{\frac{2\left(p(t)-p_s\right)}{\rho}}.\] Ici:
\(p(t)\) est la pression mesurée au cours du temps (\(t\)) en Pascal,
\(p_s\) est la pression statique, \(p_s=4 \, kPa\),
\(\rho\) est la masse volumique de l'air, \(\rho=0.91875 \, kg/m^3\).
Pour la réalisation de ce script les informations suivantes vous seront
utiles :
\paragraph{La lecture des données}\label{la-lecture-des-donnuxe9es}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}17}]:} \PY{c}{\PYZsh{} Ouverture d\PYZsq{}un fichier}
\PY{n}{f} \PY{o}{=} \PY{n+nb}{open}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{pressure.txt}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{l+s}{\PYZdq{}}\PY{l+s}{r}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{c}{\PYZsh{} définition d\PYZsq{}une liste vide}
\PY{n}{data}\PY{o}{=}\PY{p}{[}\PY{p}{]}
\PY{c}{\PYZsh{} lecture de fichier complet et affectation des éléments de la liste }
\PY{n}{data}\PY{o}{=}\PY{n}{f}\PY{o}{.}\PY{n}{read}\PY{p}{(}\PY{p}{)}\PY{o}{.}\PY{n}{split}\PY{p}{(}\PY{p}{)}
\PY{c}{\PYZsh{} fermeture du fichier f}
\PY{n}{f}\PY{o}{.}\PY{n}{close}\PY{p}{(}\PY{p}{)}
\PY{c}{\PYZsh{}contrôle de type}
\PY{k}{print}\PY{p}{(} \PY{n+nb}{type}\PY{p}{(}\PY{n}{data}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{)} \PY{p}{)}
\PY{c}{\PYZsh{}impression de la première donnée }
\PY{k}{print}\PY{p}{(}\PY{n}{data}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
<type 'str'>
53274.300000
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}18}]:} \PY{c}{\PYZsh{}conversion au type désiré }
\PY{n}{data}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} \PY{o}{=} \PY{n+nb}{float}\PY{p}{(}\PY{n}{data}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{)}
\PY{c}{\PYZsh{}contrôle de type}
\PY{k}{print} \PY{p}{(} \PY{n+nb}{type}\PY{p}{(}\PY{n}{data}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{)} \PY{p}{)}
\PY{c}{\PYZsh{}impression}
\PY{k}{print} \PY{n}{data}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
<type 'float'>
53274.3
\end{Verbatim}
à noter que lorsque les données sont lues de la manière ci-dessus, elles
sont stockées dans une liste de type chaîne de caractères (string). Si
nous devons effectuer des opérations mathématiques sur elles, nous
devons les convertir en un type numérique ( par exemple ``float'' ou
``int'' ).
\paragraph{Ecriture dans un fichier}\label{ecriture-dans-un-fichier}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}1}]:} \PY{n}{val1} \PY{o}{=} \PY{l+m+mf}{5.0} \PY{c}{\PYZsh{} affectation d\PYZsq{}une variable réelle}
\PY{n}{val2} \PY{o}{=} \PY{n+nb}{str}\PY{p}{(}\PY{n}{val1}\PY{p}{)} \PY{c}{\PYZsh{} conversion en chaîne de caractères}
\PY{c}{\PYZsh{} Ouverture d\PYZsq{}un nouveau fichier}
\PY{n}{f} \PY{o}{=} \PY{n+nb}{open}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{output.txt}\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{l+s}{\PYZdq{}}\PY{l+s}{w}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{c}{\PYZsh{} écriture dans le fichier }
\PY{n}{f}\PY{o}{.}\PY{n}{write}\PY{p}{(}\PY{n}{val2}\PY{p}{)}
\PY{c}{\PYZsh{} fermeture du fichier }
\PY{n}{f}\PY{o}{.}\PY{n}{close}\PY{p}{(}\PY{p}{)}
\end{Verbatim}
à noter que la commande ``write'' ne peut écrire que des chaînes de
caractères (string).
\paragraph{La structure repetitive
``for''}\label{la-structure-repetitive-for}
Regardez l'exemple ci-dessous concernant tri par sélection de données,
pour comprendre le fonctionnement d'une structure boucle ``for'' :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}19}]:} \PY{c}{\PYZsh{} Tri par sélection}
\PY{c}{\PYZsh{} Données initiales }
\PY{n}{M} \PY{o}{=} \PY{p}{[}\PY{l+m+mf}{1.} \PY{p}{,} \PY{l+m+mf}{2.} \PY{p}{,} \PY{l+m+mf}{5.} \PY{p}{,} \PY{l+m+mf}{40.} \PY{p}{,} \PY{l+m+mf}{65.} \PY{p}{,} \PY{l+m+mf}{2.}\PY{p}{,}\PY{l+m+mf}{8.} \PY{p}{,} \PY{l+m+mf}{98.} \PY{p}{,}\PY{l+m+mf}{115.} \PY{p}{,}\PY{l+m+mf}{0.} \PY{p}{,} \PY{l+m+mf}{3.}\PY{p}{]}
\PY{c}{\PYZsh{} Détermination de la longueur de la liste}
\PY{n}{N} \PY{o}{=} \PY{n+nb}{len}\PY{p}{(}\PY{n}{M}\PY{p}{)}
\PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{n}{N}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{:}
\PY{k}{for} \PY{n}{j} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n}{i}\PY{o}{+}\PY{l+m+mi}{1}\PY{p}{,}\PY{n}{N}\PY{p}{)}\PY{p}{:}
\PY{k}{if} \PY{n}{M}\PY{p}{[}\PY{n}{j}\PY{p}{]} \PY{o}{\PYZlt{}} \PY{n}{M}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{:}
\PY{n}{val\PYZus{}temp} \PY{o}{=} \PY{n}{M}\PY{p}{[}\PY{n}{i}\PY{p}{]}
\PY{n}{M}\PY{p}{[}\PY{n}{i}\PY{p}{]} \PY{o}{=} \PY{n}{M}\PY{p}{[}\PY{n}{j}\PY{p}{]}
\PY{n}{M}\PY{p}{[}\PY{n}{j}\PY{p}{]} \PY{o}{=} \PY{n}{val\PYZus{}temp}
\PY{k}{print}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Liste triée :}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{k}{print}\PY{p}{(}\PY{n}{M}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
Liste triée :
[0.0, 1.0, 2.0, 2.0, 3.0, 5.0, 8.0, 40.0, 65.0, 98.0, 115.0]
\end{Verbatim}
à noter que la commande " range(a,b) " produit une liste de nombres
entiers progressifs compris entre a et b-1 , par exemple :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}20}]:} \PY{n+nb}{range}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}20}]:} [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
\end{Verbatim}
\paragraph{Utiliser les fonctions
mathématiques}\label{utiliser-les-fonctions-mathuxe9matiques}
En Python afin de pouvoir utiliser les fonctions mathématiques (par
exemple, exp, sqrt , sin , cos , tan), vous devez les importer par
avance à partir de la bibliothèque mathématique ``math'' :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}21}]:} \PY{k+kn}{from} \PY{n+nn}{math} \PY{k+kn}{import} \PY{o}{*} \PY{c}{\PYZsh{} importing all functions from the math library}
\end{Verbatim}
Nous vous demandons donc de lire la serie des données de pression dans
le fichier et de calculer la vitesse de l' avion en utilisant la
relation donnée.
On demande ensuite de calculer la valeur moyenne de la vitesse de
l'avion (en Km/heure) et de l'imprimer.
Question bonus : Seriez-vous capable de calculer l'accélération de
l'avion au cours du temps, et de l'enregistrer dans un fichier?
\subsubsection{Script 4 : représentation graphique des
données}\label{script-4-repruxe9sentation-graphique-des-donnuxe9es}
Nous souhaitons analyser graphiquement les données , par exemple en les
traçant ou en faisant leur histogramme .
Pour la réalisation de ce script les informations suivantes vous seront
utiles :
\paragraph{Bibliothèques de Python}\label{bibliothuxe8ques-de-python}
Python dispose de nombreuses bibliothèques qui fournissent des
fonctionnalités avancées comme la possibilté d'effectuer des opérations
sur des matrices, des fonctions graphiques, et bien plus encore. Nous
pouvons donc importer ces bibliothèques de fonctions pour étendre les
capacités de Python dans nos programmes.
Nous allons commencer par l'importation de quelques bibliothèques pour
nous aider.
Premièrement, nous l'avons déjà vu, nous utilisons Math, la bibliothèque
mathématique standard qui comprend les fonctions trigonométriques et
transcendantales, ainsi que d'autres fonctions spéciales.
Pour voir la liste complète des fonctions de la bibliothèque Math:
https://docs.python.org/2/library/math.html\#module-math
Notre deuxième bibliothèque préférée est NumPy (Numerical Python),
fournissant un grande nombre d'opérations matricielles utiles (cette
bibliothèque est similaire à MATLAB ). Nous allons l'utiliser beaucoup!
La documentation de numpy se trouve ici :
http://docs.scipy.org/doc/numpy/reference/
La troisième bibliothèque dont nous avons besoin est Matplotlib, une
bibliothèque de graphique 2D que nous allons utiliser pour tracer nos
résultats.
La documentation de référence est disponible ici :
http://matplotlib.org/contents.html
Le code suivant sera au sommet de la plupart de vos programmes :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}22}]:} \PY{k+kn}{from} \PY{n+nn}{math} \PY{k+kn}{import} \PY{o}{*} \PY{c}{\PYZsh{} importing all functions from the math library}
\PY{k+kn}{import} \PY{n+nn}{numpy} \PY{k+kn}{as} \PY{n+nn}{np} \PY{c}{\PYZsh{} we import the array library, and call it \PYZsq{}np\PYZsq{}}
\PY{k+kn}{import} \PY{n+nn}{matplotlib.pyplot} \PY{k+kn}{as} \PY{n+nn}{plt} \PY{c}{\PYZsh{} import plotting library, and call it \PYZsq{}plt\PYZsq{}}
\end{Verbatim}
Nous importons donc toutes les fonctions de la bibliothèque ``math'' et
nous importons aussi une bibliothèque nommée ``numpy''. Enfin, nous
importons un module appelé ``pyplot'' d'une grande bibliothèque appelée
``matplotlib''.
Les deux dernières lignes ci-dessus ont créé des raccourcis pour les
bibliothèques tel que ``np'' et ``plt'' respectivement. La raison de la
création des raccourcis est que nous avons besoin de taper les noms de
bibliothèque assez souvent dans le code. Pour utiliser une fonction
appartenant à l'une de ces bibliothèques, nous devons dire à Python où
la chercher. Pour cela, chaque nom de fonction est écrit après le nom de
la bibliothèque, avec un point entre les deux. Par exemple :
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}23}]:} \PY{n}{np}\PY{o}{.}\PY{n}{zeros}\PY{p}{(}\PY{l+m+mi}{5}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}23}]:} array([ 0., 0., 0., 0., 0.])
\end{Verbatim}
\paragraph{Tracer des courbes}\label{tracer-des-courbes}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}24}]:}
\PY{n}{x}\PY{o}{=}\PY{n}{np}\PY{o}{.}\PY{n}{linspace}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{)} \PY{c}{\PYZsh{} nous définissons une liste (array) avec Numpy }
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{np}\PY{o}{.}\PY{n}{sin}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{)} \PY{c}{\PYZsh{} on utilise la fonction sinus de Numpy}
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{np}\PY{o}{.}\PY{n}{cos}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{)}
\PY{n}{plt}\PY{o}{.}\PY{n}{ylabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{fonction sinus}\PY{l+s}{\PYZsq{}}\PY{p}{)}
\PY{n}{plt}\PY{o}{.}\PY{n}{xlabel}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{l}\PY{l+s}{\PYZsq{}}\PY{l+s}{axe des abcisses}\PY{l+s}{\PYZdq{}}\PY{p}{)}
\PY{n}{plt}\PY{o}{.}\PY{n}{show}\PY{p}{(}\PY{p}{)}
\end{Verbatim}
\begin{center}
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{Python-TP1-2015_files/Python-TP1-2015_117_0.png}
\end{center}
{ \hspace*{\fill} \\}
\paragraph{Changer le style des
courbes}\label{changer-le-style-des-courbes}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}25}]:}
\PY{n}{t1}\PY{o}{=}\PY{n}{np}\PY{o}{.}\PY{n}{linspace}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{)}
\PY{n}{t2}\PY{o}{=}\PY{n}{np}\PY{o}{.}\PY{n}{linspace}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{20}\PY{p}{)}
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{n}{t1}\PY{p}{,} \PY{n}{t1}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{r\PYZhy{}\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{n}{t1}\PY{p}{,} \PY{n}{t1}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{bs}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{n}{t2}\PY{p}{,} \PY{n}{t2}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{3}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{g\PYZca{}\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
\end{Verbatim}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{outcolor}Out[{\color{outcolor}25}]:} [<matplotlib.lines.Line2D at 0x10bdc9c90>,
<matplotlib.lines.Line2D at 0x10bdc9f10>,
<matplotlib.lines.Line2D at 0x10bce75d0>]
\end{Verbatim}
\begin{center}
\adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{Python-TP1-2015_files/Python-TP1-2015_119_1.png}
\end{center}
{ \hspace*{\fill} \\}
\paragraph{Un histogramme et un affichage de texte sur le
graphique}\label{un-histogramme-et-un-affichage-de-texte-sur-le-graphique}
\begin{Verbatim}[commandchars=\\\{\}]
{\color{incolor}In [{\color{incolor}26}]:}
\PY{n}{mu}\PY{p}{,} \PY{n}{sigma} \PY{o}{=} \PY{l+m+mi}{100}\PY{p}{,} \PY{l+m+mi}{15}
\PY{n}{x} \PY{o}{=} \PY{n}{mu} \PY{o}{+} \PY{n}{sigma} \PY{o}{*} \PY{n}{np}\PY{o}{.}\PY{n}{random}\PY{o}{.}\PY{n}{randn}\PY{p}{(}\PY{l+m+mi}{10000}\PY{p}{)} \PY{c}{\PYZsh{}generation de 10000 nombres aleatoires}
\PY{n}{bins} \PY{o}{=} \PY{l+m+mi}{30}
\PY{c}{\PYZsh{} histogramme des donnees}
\PY{n}{plt}\PY{o}{.}\PY{n}{hist}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{bins}\PY{p}{,} \PY{n}{normed}\PY{o}{=}\PY{l+m+mi}{1}\PY{p}{,} \PY{n}{facecolor}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{r}\PY{l+s}{\PYZsq{}}\PY{p}{,} \PY{n}{alpha}\PY{o}{=}\PY{l+m+mf}{0.8}\PY{p}{)}