Objectif

Cette activité est la première d'une série qui a pour objectif de traiter les chapitres d'arithmétique sous l'angle de la programmation en Python, en initiant à la notion de liste. Les listes en Python ne sont pas au programme de la Seconde mais sont très appropriées dans ce contexte.

Niveau 1 : sans liste

Nous allons écrire un programme, sous la forme d'une fonction diviseurs(n), qui va afficher à l'écran les diviseurs positifs d'un nombre naturel entré par l'utilisateur.

  1. Comment savoir si un entier est un diviseur d'un autre entier ?

  2. Un entier bb est le diviseur d'un entier aa si, dans la division euclidienne de aa par bb, le reste est égal à 0.

  3. Quels nombres doit-on tester pour espérer obtenir la liste complète des diviseurs d'un nombre ?

  4. On teste tous les entiers naturels de 1 jusqu'à nn.

  5. Quelle instruction permet de passer en revue une série de nombres entiers dont on connaît le début et la fin ? Quelle ligne de code utilisera-t-on ?

  6. Nous allons utiliser une boucle for avec la ligne for i in range(1,n+1):.

  7. Le symbole % permet d'obtenir le reste de la division euclidienne d'un nombre par un autre. A l'aide des réponses précédentes, compléter le script suivant :

    from math import *
    def diviseurs(n):
      for i in range( ... , ...):
        if n%i==0:
          print( ... )
            

    Pour écrire plus vite, on peut retrouver dans la boîte à outils, accessible avec la touche toolbox, les instructions basiques (boucles, définition d'une fonction, etc.) et dans le menu variable, accessible avec la touche var, toutes les variables déjà définies dans le script. Cela évite d'avoir à tout réécrire lettre par lettre !

  8. from math import *
    def diviseurs(n):
      for i in range(1,n+1):
        if n%i==0:
          print(i)
            

Niveau 2 : en utilisant les listes

Notion de liste

En Python, on distingue plusieurs types de variables dont les principaux sont : nombres entiers, nombres décimaux et chaînes de caractères (texte). Un autre type de ces variables est la liste qui, comme son nom l'indique, permet de stocker une liste de… variables. En effet, une liste peut comprendre des nombres, des chaînes de caractères, d'autres listes, et même tout cela à la fois.

Une liste se définit à l'aide de crochets et ses éléments sont séparés par des virgules :

zoo = ["lion","tigre","ours"]

temperatures = [27.4,27.7,24.5,21]

Nous allons nous intéresser au cas le plus simple puisque nous listons des entiers.

Lister les diviseurs d'un nombre

Dans notre cas, nous allons construire la liste pas à pas puisque son contenu va dépendre du nombre nn qui sera choisi au lancement du programme.

Néanmoins, même si cette liste n'existe pas encore, il est nécessaire de la déclarer dès le début de notre fonction. Nous allons donc créer un liste vide appelée div avec la ligne :

div = []

Pour ajouter un nombre kk à notre liste, on utilisera div.append(k).

Dans notre cas, le nombre ajouté doit être un diviseur du nombre nn choisi au départ.

On propose de modifier légèrement la fonction précédente, en complétant le script suivant :

from math import *
def diviseurs(n):
  div = ...
  for i in range( ... , ...):
    if n%i==0:
      div.append( ... )
  return div
    
from math import *
def diviseurs(n):
  div = []
  for i in range(1,n+1):
    if n%i==0:
      div.append(i)
  return div
      

Niveau expert : listes en compréhension

Il est aussi possible de définir une liste en indiquant entre crochets toutes les conditions nécessaires à sa génération. Par exemple, pour générer la liste des multiples de 7 compris entre 100 et 200, on pourra utiliser :

return [i for i in range(100,201) if i%7==0]

Essayez d'écrire une fonction diviseurs_short(n) qui permet de lister les diviseurs de nn en seulement deux lignes !

def diviseurs_short(n):
  return [i for i in range(1,n+1) if n%i==0]