---
---

<link rel="stylesheet" href="styles.css" type="text/css">

<span id="Initial"><br><br></span>

# <span><a href="#Plan">[&nabla;]</a></span> <span><a href="#Final">[@]</a></span> <span style="color: red;">Introduction à Python 3</span>

### Version 2022-10-25
### Licence cc-by-sa ModLibre.info sauf autres indications

#### NB : Copiez les instructions que vous voulez tester dans une version récente de Python 3


<span id="Plan"><br><br></span>

# <span><a href="#Bonaldi">[&nabla;]</a></span> <span><a href="#Initial">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">Plan de l'introduction à Python 3<br><br></span>

### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#Bonaldi) [**L'effet Bonaldi**](#Bonaldi)
### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#Disque) [**Périmètre et surface d'un disque**](#Disque)
### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#Multiplie) [**Multiplication**](#Multiplie)
### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#Fibonacci) [**Suite de Fibonacci**](#Fibonacci)
### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#Coeur) [**Tracé d'un coeur**](#Coeur)
### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#SIR-Python) [**Modèle d'épidémie programmé en Python**](#SIR-Python)
### &#x25cf; &nbsp;&nbsp;&nbsp;&nbsp; [[&nabla;]](#References) [**Références**](#References)


<span id="Bonaldi"><br><br></span>

# <span><a href="#Disque">[&nabla;]</a></span> <span><a href="#Initial">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">« L'effet Bonaldi »</span>

```{Python}
#!/usr/bin/python3
# https://www.python.org/dev/peps/pep-0263/
#
# Copyright (C) 2018-2018 cc-by-sa 4.0      ModLibre.info
# Version            2018-06-03 Jean.Thiery@ModLibre.info

# Titre: Impression d'un texte

print("Hello Bonaldi !")    # fr: print = imprimer
print("      Toute démonstration d’un produit quelconque               ")
print("      qui fonctionnait parfaitement aux répétitions             ")
print("      échouera lamentablement lors de la démonstration publique.")

# L'« effet Bonaldi »
#
# L'« effet Bonaldi », ou parfois « syndrome Bonaldi »,
# est une théorie populaire associée au nom de Jérôme Bonaldi.
# Elle fait référence aux déboires que connut cet animateur
# lorsqu'il présentait des objets et inventions insolites
# à la fin de l'émission Nulle part ailleurs.
# L'effet Bonaldi est un cas particulier de la loi de Murphy.
# Il énonce que :
#
# « Toute démonstration d’un produit quelconque
#   qui fonctionnait parfaitement aux répétitions
#   échouera lamentablement lors de la démonstration publique. »
#
# https://fr.wikipedia.org/wiki/J%C3%A9r%C3%B4me_Bonaldi
```
```
Hello Bonaldi !
    Toute démonstration d’un produit quelconque
    qui fonctionnait parfaitement aux répétitions
    échouera lamentablement lors de la démonstration publique
```

<span id="Disque"><br><br></span>

# <span><a href="#Multiplie">[&nabla;]</a></span> <span><a href="#Bonaldi">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">Périmètre et surface d'un disque</span>

```{Python}
# Copyright (C) 2015-2015   Creative Commons Attribution 2.5
# Version       2015-10-02  Jean.Thiery@ModLibre.info
# Titre: Contour et surface d'un disque

import math

texte   = input("Rayon du disque ? ")       # entre
rayon   = int(texte)
contour = 2 * math.pi * rayon
print("Contour = %s" % contour)             # imprime
surface = math.pi * rayon * rayon
print("Surface = %s" % surface)             # imprime
```
```
Rayon du disque ? 10
Contour = 62.8318530718
Surface = 314.159265359
```

<span id="Multiplie"><br><br></span>

# <span><a href="#Fibonacci">[&nabla;]</a></span> <span><a href="#Disque">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">Multiplication</span>

```{Python}
# Copyright (C)  2007-2015   Creative Commons Attribution 2.5
#                            http://wiki.laptop.org/go/Pippy
# Initial version            Chris Ball
# Version        2015-10-01  Jean.Thiery@ModLibre.info
#
# Title:  Times2 -> Multiplie
# Author: Chris Ball
# About:  Print any times table
# Shows:  Loops, range, and input
# XOversion: Bundled in 656

texte  = input("Quelle table de multiplication ? ")     # entre
nombre = int(eval(texte))
for i in range(1,10):                       # dans l'intervalle [1,10[
    print(nombre, "x", i, "=", i*nombre)    # imprime
```
```
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x ......
```

<span id="Fibonacci"><br><br></span>

# <span><a href="#Coeur">[&nabla;]</a></span> <span><a href="#Multiplie">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">Suite de Fibonacci</span>

```{Python}
# Copyright (C) 2007-2015   Creative Commons Attribution 2.5
#                           http://wiki.laptop.org/go/Pippy
# Initial version           Rafael Ortiz </go/User:RafaelOrtiz>
# Version       2015-10-01  Jean.Thiery@ModLibre.info

# Title:  Fibonacci Series
# Author: Rafael Ortiz </go/User:RafaelOrtiz>
# About:  The Fibonacci Number Series
# en:     http://en.wikipedia.org/wiki/Fibonacci_number
# fr:     http://fr.wikipedia.org/wiki/Suite_de_Fibonacci
# Shows:  Using tuple assignments. While loop. 
# XO version

a, b = 1, 1
while b < 10000:                # tant que
     print(a)                   # imprime
     a, b = b, a+b

# Variations
# a, b = 1, -1
#    a, b = b, a-b              # suite de Fibonacci alternée
```
```
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
```

<span id="Coeur"><br><br></span>

# <span><a href="#SIR-Python">[&nabla;]</a></span> <span><a href="#Fibonacci">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">Tracé d'un coeur</span>

```{Python}
# Copyright (C) 2015-2015   GPL v3 [https://www.gnu.org/licenses/gpl.html]
# Version       2015-10-30  Jean.Thiery@ModLibre.info

# coeur.py :                Tracé d'un coeur     

from math import *; from turtle import *

texte = input("Longueur de la pointe [100] ? ")
if texte == "" : texte = "100"
taille = eval(texte)

texte = input("Angle de la pointe [15 (60) 90] ? ")
if texte == "" : texte = "60"
angle = eval(texte)
rayon = taille / sin(pi*angle/180)

clearscreen()                       # Efface l'écran
shape("circle")                     # Plume sous forme de cercle
shapesize(0.01, 0.1, 0)             # Plume très fine
penup()                             # Plume haute
setpos( 0, -taille)                 # Position initiale

pencolor(1, 0, 0)                   # Couleur de plume (rouge, vert, bleu) 
pendown()                           # Plume basse
fillcolor(1, 0, 0)                  # Couleur de remplissage (rouge, vert, bleu)
begin_fill()                        # Début de remplissage

setheading(90)                      # Direction vers le haut
circle(rayon,  angle)               # Coté gauche de la pointe
setheading(heading()+180)           # On continue tout droit
circle(rayon, -angle)               # Coté gauche du coeur

x, y = position()                   # Position de la plume      
circle(abs(x)/2, -180)              # Sommet gauche du coeur
setheading(-90)                     # Direction vers le bas
circle(abs(x)/2, -180)              # Sommet droit du coeur

circle(rayon, -angle)               # Coté droit du coeur
setheading(heading()+180)           # On continue tout droit
circle(rayon,  angle)               # Coté droit de la pointe

end_fill()                          # Fin de remplissage
penup()                             # Plume haute

exitonclick()                       # Sort du mode graphique

# VARIATIONS : Changer le signe de l'angle d'un cercle
#
# circle(abs(x)/2, -180) -> circle(abs(x)/2,180)  # Sommet droit du coeur
# ou
# circle(rayon, -angle)  -> circle(rayon, angle)  # Coté gauche du coeur
#
# VARIATIONS : Changer les couleurs
#
# fillcolor(0, 0, 0)    # black     = noir
# fillcolor(1, 0, 0)    # red       = rouge
# fillcolor(0, 1, 0)    # green     = vert
# fillcolor(0, 0, 1)    # blue      = bleu
# fillcolor(1, 1, 0)    # yellow    = jaune
# fillcolor(0, 1, 1)    # cyan      = cyan
# fillcolor(1, 0, 1)    # magenta   = magenta
# fillcolor(1, 1, 1)    # white     = blanc
#
# REFERENCES
#
# Module turtle
# https://docs.python.org/2/library/turtle.html
#
# Dessins de coeurs
# http://serge.mehl.free.fr/anx/coeur.html
# http://heraldie.blogspot.fr/2012/10/le-cur-heraldique-et-geometrie.html
```
<img src="images/Python_Coeur_30_2015-10-30_21_1366x0768_cc-by-sa_JMT.png" style="width:90%; border:0px solid; margin-right: 0px" align="center">

<span id="SIR-Python"><br><br></span>

# <span><a href="#References">[&nabla;]</a></span> <span><a href="#Coeur">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">[Modèle d'épidémie](https://fr.wikipedia.org/wiki/Mod%C3%A8les_compartimentaux_en_%C3%A9pid%C3%A9miologie) programmé en Python</span>

<img src="images/SIR_Python_20_20D03Q03_1400x0900c.png" style="width:90%; border:0px solid; margin-right: 0px" align="center">

```{Python}
# © Copyright 2018...       Jared GERSCHLER http://jaredgerschler.blog/ 
# Acknowledgements          Jared GERSCHLER http://jaredgerschler.blog/ 

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# total population
N = 5000
# initial infected
I0 = 6
# initial recovered
R0 = 0
#initial susceptible
S0 = N - I0 - R0

# contact rate
beta = 0.3
# mean recovery rate
gamma = 0.1

# initial conditions vector
y0 = S0, I0, R0
# 200 evenly spaced values (representing days)
t = np.linspace(0, 200, 200)

def func(y, t, N, beta, gamma):
    # S, I, R values assigned from vector
    S, I, R = y
    # differential equations
    dSdt = -beta * S * I / N
    dIdt = beta * S * I / N - gamma * I
    dRdt = gamma * I
    return dSdt, dIdt, dRdt

# Integrate the diff eqs over the time array
values = odeint(func, y0, t, args=(N, beta, gamma))
# assign S, I, R values from values transpose
S, I, R = values.T

fig = plt.figure()
ax = fig.add_subplot(111, axisbelow=True)
ax.plot(t, S, 'black', lw=1.5, label='Susceptible')
ax.plot(t, I, 'orange', lw=1.5, label='Infected')
ax.plot(t, R, 'blue', lw=1.5, label='Recovered')
ax.set_xlabel('Time (days)')
ax.set_ylabel('Number of People')
ax.set_ylim(0,5100)
ax.set_xlim(0,200)
ax.grid(b=True, which='major', c='#bbbbbb', lw=1, ls='-')
legend = ax.legend()
legend.get_frame().set_alpha(0.5)
plt.show()
```
### Merci à [<span style="color: green;">_Jared GERSCHLER_</span>](http://jaredgerschler.blog/)</span> pour ce programme écrit en Python.

<span id="References"><br><br></span>

# <span><a href="#Final">[&nabla;]</a></span> <span><a href="#SIR-Python">[&Delta;]</a></span> <span><a href="#Plan">[@]</a> <span style="color: red;">Références</span>

- [Programmation en Python pour les mathématiques](https://www.dunod.com/sciences-techniques/programmation-en-python-pour-mathematiques-0) Alexandre Casamayou-Boucau, Pascal Chauvin, Guillaume Connan (janvier 2016).
<!-- : les exemples de ce livres sont en licence libre GNU/GPL. -->

<span id="Final"><br><br></span>

# <span><a href="#Initial">[@]</a></span> <span><a href="#References">[&Delta;]</a></span> <span style="color: red;">Fin</span>

***
##### [2022-10-25 &nbsp;&nbsp;&nbsp; © 2020-2021 ModLibre.info](http://ModLibre.info) &nbsp;&nbsp;&nbsp; [licence cc-by-sa](http://creativecommons.org) &nbsp;&nbsp;&nbsp; [Source](Python.Rmd) &nbsp;&nbsp;&nbsp; [W3C](http://validator.w3.org/) &nbsp;&nbsp;&nbsp; [HTML5](https://fr.wikipedia.org/wiki/HTML5) &nbsp;&nbsp;&nbsp; [CSS](http://jigsaw.w3.org/css-validator/)
***
  