In [1]:
from __future__ import division, print_function

13 Boucle for

Syntaxe :

for ELEMENT in LISTE:       # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1          # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3

14 Conditions if

Syntaxe :

if CONDITION_1:               # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1            # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3
elif CONDITION_2:
    INSTRUCTION #4            # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #5
    INSTRUCTION #6
else:
    INSTRUCTION #7            # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #8
    INSTRUCTION #9

14.5 Syntaxe compacte d'une assignation conditionnelle


In [6]:
a = 6
b = 15
if a < b:
    m = a
else:
    m = b

In [7]:
m


Out[7]:
6

In [3]:
m = a if a < b else b

In [5]:
m


Out[5]:
6

15 Fonctions def

Syntaxe :

def FONCTION(PARAMETRES):      # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1             # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3

16 La boucle while

La boucle while peut être utile lorsqu'on ne sait pas combien d'itérations on doit faire.

Syntaxe :

while CONDITION:            # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1          # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3

Écrire un programme qui affiche les puissances de deux inférieures à un milliard.


In [8]:
k = 1
while k < 10**9:
    print(k)
    k = k * 2


1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912

Pour un nombre $x\geq1$, trouver l'unique valeur entière $n$ vérifiant $$2^{n−1} < x < 2^n,$$ c’est-à-dire le plus petit entier $n$ vérifiant $x < 2^n$.


In [9]:
k = 1
n = 0
while k < 10**9:
    k = k * 2
    n = n + 1
print(n)


30

16.1 Interrompre une boucle avec break

Écrire un programme qui affiche les puissances de deux inférieures à un milliard et arrêter le programme si une puissance termine par 88.


In [11]:
k = 1
while True:
    k = 2*k
print(k)


---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-11-c8bf7e76088e> in <module>()
      1 k = 1
      2 while True:
----> 3     k = 2*k
      4 print(k)

KeyboardInterrupt: 

16.2 Continuer une boucle à l'itération suivante avec continue

Écrivez un programme qui calcule les 50 premiers termes de la table de multiplication par 13, mais n’affiche que ceux qui sont des multiples de 7.


In [13]:
for i in range(10):
    if i == 7:
        continue
    print(i)


0
1
2
3
4
5
6
8
9

17 Exemples (def + while + for + if)

17.1 Conjecture de Syracuse

En mathématiques, on appelle suite de Syracuse une suite d'entiers naturels définie de la manière suivante :

On part d'un nombre entier plus grand que zéro ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d'entiers positifs dont chacun ne dépend que de son prédécesseur.

Par exemple, à partir de 14, on construit la suite des nombres : 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2... C'est ce qu'on appelle la suite de Syracuse du nombre 14.

https://fr.wikipedia.org/wiki/Conjecture_de_Syracuse

Écrire une fonction qui calcule la suite de Syracuse d'un nombre et retourne ce résultat sous la forme d'une liste.


In [14]:
def syracuse(n):
    if n % 2 == 0:
        return n // 2
    else:
        return 3 * n + 1

In [15]:
syracuse(13)


Out[15]:
40

In [16]:
syracuse(40)


Out[16]:
20

In [23]:
n = 1234097125
while n != 1:
    n = syracuse(n)
    print(n, end=' ')


3702291376 1851145688 925572844 462786422 231393211 694179634 347089817 1041269452 520634726 260317363 780952090 390476045 1171428136 585714068 292857034 146428517 439285552 219642776 109821388 54910694 27455347 82366042 41183021 123549064 61774532 30887266 15443633 46330900 23165450 11582725 34748176 17374088 8687044 4343522 2171761 6515284 3257642 1628821 4886464 2443232 1221616 610808 305404 152702 76351 229054 114527 343582 171791 515374 257687 773062 386531 1159594 579797 1739392 869696 434848 217424 108712 54356 27178 13589 40768 20384 10192 5096 2548 1274 637 1912 956 478 239 718 359 1078 539 1618 809 2428 1214 607 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488 244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 

In [25]:
n = 1234097125
while n != 1:
    print(n, end=' ')
    n = syracuse(n)
print(n)


1234097125 3702291376 1851145688 925572844 462786422 231393211 694179634 347089817 1041269452 520634726 260317363 780952090 390476045 1171428136 585714068 292857034 146428517 439285552 219642776 109821388 54910694 27455347 82366042 41183021 123549064 61774532 30887266 15443633 46330900 23165450 11582725 34748176 17374088 8687044 4343522 2171761 6515284 3257642 1628821 4886464 2443232 1221616 610808 305404 152702 76351 229054 114527 343582 171791 515374 257687 773062 386531 1159594 579797 1739392 869696 434848 217424 108712 54356 27178 13589 40768 20384 10192 5096 2548 1274 637 1912 956 478 239 718 359 1078 539 1618 809 2428 1214 607 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488 244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1

In [ ]:

17.2 Énumérer les diviseurs d'un nombre entier


In [28]:
n = 12
L = []
for i in range(1, n+1):
    reste = n % i
    if reste == 0:
        L.append(i)
print(L)


[1, 2, 3, 4, 6, 12]

In [36]:
from math import sqrt
def diviseurs(n):
    L = []
    sq = int(sqrt(n))
    for i in range(1, sq+1):
        reste = n % i
        if reste == 0:
            L.append(i)
            L.append(n//i)
    return L

In [37]:
diviseurs(12)


Out[37]:
[1, 12, 2, 6, 3, 4]

In [38]:
diviseurs(7)


Out[38]:
[1, 7]

17.3 Tester si un nombre est premier

Écrire une fonction est_premier(n) qui renvoie True si n est premier et False sinon.


In [39]:
def est_premier(n):
    div = diviseurs(n)
    return len(div) == 2

In [40]:
est_premier(12)


Out[40]:
False

In [41]:
est_premier(13)


Out[41]:
True

In [45]:
def est_premier_2(n):
    sq = int(sqrt(n))
    for i in range(2, sq+1):
        if n % i == 0:
            return False
    return True

In [46]:
est_premier_2(12)


Out[46]:
False

In [47]:
est_premier_2(13)


Out[47]:
True

17.4 Trouver les nombres premiers jumeaux


In [ ]:

17.5 Séparer une liste en deux selon la parité

Écrivez un programme qui analyse un par un tous les éléments d’une liste de nombres pour générer deux nouvelles listes. L’une contiendra seulement les nombres pairs de la liste initiale, et l’autre les nombres impairs.


In [ ]:
L = [123, 535, 74764, 14379, 56452546, 2356, 3, 4, 8]

17.5 Séparer une liste en deux selon la parité

Existe-t-il deux nombres entiers positifs x et y tels que $x^2 − 61y^2 = 1$ ?


In [ ]:

18 Autres structures de données


In [ ]:

18.1 Tuples (type tuple)


In [ ]:

18.2 Emballage et déballage d'un tuple


In [ ]:

18.3 Dictionnaires (type dict)


In [ ]:

18.4 Ensembles (type set)


In [ ]:


In [ ]: