<jupyter_start><jupyter_text>TD 1 : Premiers pas en Python<jupyter_code>from jyquickhelper import add_notebook_menu
add_notebook_menu()<jupyter_output><empty_output><jupyter_text>Partie 1 Un langage de programmation permet de décrire avec précision des opérations très simples sur des données. Comme tout langage, il a une grammaire et des **mot-clés**. La complexité d'un programme vient de ce qu'il faut beaucoup d'opérations simples pour arriver à ses fins. Voyons cela quelques usages simples. Il vous suffit d'exécuter chaque petit extrait en appuyant sur le triangle pointant vers la droite ci-dessus. N'hésitez pas à modifier les extraits pour mieux comprendre ce que le programme fait.**La calculatrice**<jupyter_code>x = 5
y = 10
z = x + y
print (z)    # affiche z<jupyter_output><empty_output><jupyter_text>On programme sert souvent à automatiser un calcul comme le calcul mensuel du taux de chômage, le taux d'inflation, le temps qu'il fera demain... Pour pouvoir répéter ce même calcul sur des valeurs différentes, il faut pouvoir décrire ce calcul sans savoir ce que sont ces valeurs. Un moyen simple est de les nommer : on utilise des variables. Une variable désigne des données. ``x=5`` signifie que la variable ``x``contient 5. ``x+3`` signifie qu'on ajoute 3 à ``x`` sans avoir besoin de savoir ce que ``x`` désigne.**L'addition, l'incrémentation**<jupyter_code>x = 2
y = x + 1
print (y)
x += 5
print (x)<jupyter_output><empty_output><jupyter_text>Lorsqu'on programme, on passe son temps à écrire des calculs à partir de variables pour les stocker dans d'autres variables voire dans les mêmes variables. Lorsqu'on écrit ``y=x+5``, cela veut dire qu'on doit ajouter 5 à ``x`` et qu'on stocke le résultat dans ``y``. Lorsqu'on écrit ``x += 5``, cela veut dire qu'on doit ajouter 5 à ``x`` et qu'on n'a plus besoin de la valeur que ``x`` contenait avant l'opération.**La répétition ou les boucles**<jupyter_code>a = 0
for i in range (0, 10) :
  a = a + i             # répète dix fois cette ligne
print (a)<jupyter_output><empty_output><jupyter_text>Le mot-clé ``print`` n'a pas d'incidence sur le programme. En revanche, il permet d'afficher l'état d'une variable au moment où on exécute l'instruction ``print``.**L'aiguillage ou les tests**<jupyter_code>a = 10
if a > 0 :
      print(a)     # un seul des deux blocs est pris en considération
else :
      a -=  1
      print (a)<jupyter_output><empty_output><jupyter_text>**Les chaînes de caractères**<jupyter_code>a = 10
print  (a)     # quelle est la différence
print ("a")   # entre les deux lignes
s = "texte"
s += "c"
print (s)<jupyter_output><empty_output><jupyter_text>Toute valeur a un type et cela détermine les opérations qu'on peut faire dessus. ``2 + 2`` fait ``4`` pour tout le monde. ``2 + "2"`` fait quatre pour un humain, mais est incompréhensible pour l'ordinateur car on ajoute deux choses différentes (``torchon + serviette``).<jupyter_code>print("2" + "3")
print(2+3)<jupyter_output>23
5<jupyter_text>Partie 2 Dans cette seconde série, partie, il s'agit d'interpréter pourquoi un programme ne fait pas ce qu'il est censé faire ou pourquoi il provoque une erreur, et si possible, de corriger cette erreur.**Un oubli**<jupyter_code>a = 5
a + 4
print   (a)   # ou voudrait voir 9 mais c'est 5 qui apparaît<jupyter_output>5<jupyter_text>**Une erreur de syntaxe**<jupyter_code>a = 0
for i in range (0, 10) 
    a = a + i
print    (a)<jupyter_output><empty_output><jupyter_text>**Une autre erreur de syntaxe**<jupyter_code>a = 0
for i in range (0, 10):
    a = a + i
  print         (a)<jupyter_output><empty_output><jupyter_text>**Une opération interdite**<jupyter_code>a = 0
s = "e"
print (a + s)<jupyter_output><empty_output><jupyter_text>**Un nombre impair de...**<jupyter_code>a = 0
for i in range (0, 10) :
      a = (a + (i+2)*3
print                                  (a)<jupyter_output><empty_output><jupyter_text>Partie 3 Il faut maintenant écrire trois programmes qui :+   Ecrire un programme qui calcule la somme des 10 premiers entiers au carré.+   Ecrire un programme qui calcule la somme des 5 premiers entiers impairs au carré.+   Ecrire un programme qui calcule la somme des qui 10 premières factorielles : $\sum_{i=1}^{10} i!$.A propos de la parité :<jupyter_code>14%2, 233%2<jupyter_output><empty_output><jupyter_text>Tutor Magic Cet outil permet de visualiser le déroulement des programmes (pas trop grand, site original [pythontutor.com](http://www.pythontutor.com/)).<jupyter_code>%load_ext tutormagic
%%tutor --lang python3

a = 0
for i in range (0, 10):
    a = a + i<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10260869565217391, 'fraction_numerical': 0.017391304347826087, 'mean_word_length': 4.715527950310559, 'pattern_counts': {'":': 0, '<': 55, '<?xml version=': 0, '>': 56, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '347518', 'license': 'MIT', 'n_tokens_mistral': 1720, 'n_tokens_neox': 1664, 'n_words': 586, 'path': '_unittests/ut_helpgen/notebooks_python/td1a_cenonce_session1.ipynb', 'repo_name': 'janjagusch/pyquickhelper', 'size': '4600'}