Applications des bases du langage Python

En utilisant ce que vous avez appris sur la page découverte, réalisez les applications ci-dessous en mettant en œuvre les concepts suivants :

  • utilisation des variables
  • utilisation du test if
  • utilisation de la bouble while

 

Application 1 : le nombre mystérieux

Le nombre mystérieux est un jeu consistant à deviner un nombre compris ente 1 et 100.

L'ordinateur choisit au hasard le nombre mystérieux (entier entre 1 et 100) et l'enregistre dans une variable. L'utilisateur propose un nombe, puis l'ordinateur lui répond en indiquant si le nombre saisie est supérieur, inférieur, ou égal au nombre mystérieux.

L'utilisateur propose alors un autre nombre, la partie est finie une fois que l'utilisateur a deviné le nombre mystérieux.

Voici le programme de base demandant un nombre à l'utilisateur, testant ce nombre, et répondant si le nombre est supérieur, inférieur, ou égal au nombre mystérieux jusqu'à ce que l'utilisateur trouve le nombre mystérieux :

from random import *

nombre_mysterieux=randint(1,100)
n_saisie=input("Entrez un nombre entre 1 et 100")
n=int(n_saisie)

while(n!=nombre_mysterieux):
        if n>nombre_mysterieux:
                print("Le nombre mystérieux est inférieur à",n)
        if n<nombre_mysterieux:
                print("Le nombre mystérieux est supérieur à",n)
        n=int(input("Entrez un autre nombre entre 1 et 100"))

print("Bravo ! Vous avez trouvé le nombre mystérieux :",n)

Remarque : la fonction input de Python demande à l'utilisateur de saisir une information sous forme de chaîne de caractères. La fonction int de Python convertit une chaîne de caractère contenant seulement des chiffres en une valeur numérique. Par exemple : int("53") renverra l'entier 53.

 

TRAVAIL DEMANDÉ :

Question 1 - Testez ce programme de base dans Python en l'enregistrant dans un fichier nombre_mysterieux.py.

Question 2 - Améliorez le programme afin qu'il compte dans une variable i le nombre de fois où l'utilisateur a entré un nouveau nombre et qu'il l'affiche à la fin de la partie.

Question 3 - Améliorez à nouveau le programme afin qu'il demande au début de la partie la valeur maximale du nombre mystérieux. Cette valeur sera saisie par l'utilisateur et enregistrée dans une variable maxi. Le nombre mystérieux doit alors être compris entre 1 et maxi (et non plus entre 1 et 100).

 

 

Application 2 : triplet Pythagoricien et année "Pythagoricienne"

On rappelle que dans un triangle, si le carré de la longueur d'un côté est égal à la somme des carrés des longueurs des deux autres côtés alors ce triangle est rectangle : il s'agit de la réciproque du théorème de Pythagore.

Exemple : 5²=25 et 4²+3²=16+9=25 donc un triangle dont les côtés mesurent 5, 4 et 3 est rectangle. On dit que c'est un triangle pythagoricien et que (5,4,3) est un triplet pythagoricien. Les triplets (13,12,5) et (17,15,8) sont également des triplets pythagoriciens.

 

TRAVAIL DEMANDÉ :

Réalisez un programme évolutif en Python afin de répondre aux 5 questions suivantes en l'enregistrant dans un fichier nommé triplet_pythagoricien.py.

Vous inscrirez les réponses à ces 5 questions en commentaires dans votre programme :

Question 1 : existe-t-il un triangle pythagorien dont l'hypoténuse mesure 2018 ? Si oui, quelle est la longueur des deux autres côtés ?

Question 2 : existe-t-il un autre triangle pythagorien dont l'hypoténuse mesure 2019 ? Si oui, 2019 sera alors appelée une année "Pythagoricienne". Quelle est dans ce cas la longueur des deux autres côtés du triangle ?

Question 3 : en partant de l'année courante, quelle est la prochaine année qui n'est pas "Pythagoricienne" ?

Question 4 : durant le 21ème siècle, soit entre les années 2001 et 2100, combien d'années sont "Pythogoriciennes" ? Quelle proportion (en pourcentage) cela représente-t-il ?

Question 5 : quelle est la proportion (en pourcentage) d'années "Pythagoriciennes" entre l'an 1 et l'an 5000 ? Comparez par rapport à la proportion de la question 4.

 

 

Application 3 : la suite de Syracuse

La suite de Syracuse est une suite de nombre définie de la façon suivante : on part d'un nombre entier  non nul, s'il est pair on le divise par 2 et s'il est impair on le multiplie par 3 et on ajoute 1. Et on recommence l'opération avec le résultat.

On obtient ainsi une suite de nombres. Ce qui est remarquable avec cette suite, c'est que chaque fois qu'on a essayé avec un nombre, on est tombé sur 1 au bout d'un certain nombre d'essais mais personne n'a pour l'instant réussi à démontrer que c'était vrai pour tous les entiers.

Vous allez ici programmer la suite de Syracuse en Python. Voici l'algorithme de votre programme :

demander le nombre n de départ à l'utilisateur

tant que n est différent de 1 répéter :

     si n est pair alors n=n/2
     sinon n=3*n+1
     afficher n

Remarque : pour savoir si un nombre n est pair ou impair il faut tester le reste de sa division par 2 : n % 2

 

TRAVAIL DEMANDÉ :

Question 1 - Proposez un programme en Python réalisant cet algorithme et affichant tous les nombres (qui sont des entiers) de la suite de Syracuse en partant d'un nombre n quelconque. Remarque : on veut afficher seulement des nombres entiers naturels (par exemple il ne faut pas afficher 4.0 mais simplement 4).

Question 2 - Améliorez votre programme afin de compter (et d'afficher) dans une variable i le nombre de fois que la boucle a été exécutée avant de trouver 1.

Question 3 - Arriverez-vous à trouver un nombre de départ pour lequel la suite de Syracuse ne passe jamais par 1 ?

IMPORTANT : pour toutes les questions suivantes on ne considèrera que les valeurs de n comprises entre 1 et 10**6 (1 million) pour le nombre de départ de la suite de Syracuse : 1 ≤ n ≤ 106

Question 4 - Pour quel nombre n de départ (pour 1 ≤ n ≤ 106) la valeur de i est-elle la plus importante ?

Question 5 - Si n est un nombre impair, quelle sera la parité de 3*n+1 : pair, impair, ou ça dépend ? Si n est un nombre pair, quelle sera la parité de n/2 : pair, impair, ou ça dépend ?

Question 6 - Est-il possible qu'il y ait plusieurs nombres pairs consécutifs dans la suite de Syracuse ? Si oui, donnez un nombre n de départ pour obtenir une telle suite. Est-il possible qu'il y ait plusieurs nombres impairs consécutifs dans la suite de Syracuse ? Si oui, donnez un nombre n de départ pour obtenir une telle suite.

Question 7 - Améliorez votre programme afin de compter et d'afficher la quantité de nombres pairs et de nombres impairs présents dans la suite de Syracuse. Y-a-t-il plus de nombres pairs ou impairs dans la suite de Syracuse et quelle est leur proportion ?

Question 8 - Lorsqu'il y a une puissance de 2 dans la suite de Syracuse (exemple : n=64), que deviennent les valeurs suivantes de n dans la suite de Syracuse ?

Question 9 - Lorsque la suite de Syracuse finit par 1 (n=1, soit dans pratiquement tous les cas) cela signifie-t-il que la suite est forcément passée par une puissance de 2 ? Si oui, quels sont les 4 derniers termes de la suite ? Toutes les suites de Syracuses finissent-elles forcément par ces 4 nombres ? Même question mais en observant maintenant les 5, les 6, les 7 puis les 8 derniers nombres de la suite de Syracuse. En conclusion, quels sont les derniers termes qui sont communs à toutes les suites de Syracuse quelque soit le nombre de départ n (pour 1 ≤ n ≤ 106) ?

Question 10 - Pour quel nombre n de départ (pour 1 ≤ n ≤ 106) la suite de Syracuse contient-elle le moins de puissances de 2 ? Et combien y a-t-il de puissances de 2 dans ce cas ?

Question 11 - Pour quel nombre n de départ (pour 1 ≤ n ≤ 106) la suite de Syracuse contient-elle le plus de puissances de 2 ? Et combien y a-t-il de puissances de 2 dans ce cas ?

Question 12 - Quel serait le comportement de la suite si en cas de nombre impair on remplace 3*n+1 par n+1, 2*n+1, 4*n+1 ou 5*n+1 (ce qui définit 4 nouvelles suites qui ne sont pas la suite de Syracuse) ? Ces 4 nouvelles suites aboutissent-elles systèmatiquement à 1 comme la suite de Syracuse ?