1. Python : LP1
  2. Python : LP2
  3. Python : LP3
  4. Python : DC1
  5. Binaire : B1
  6. HTML : html1
  7. Trace d'exécution : A1

Page en évolution constante !

Cette page est dédiée aux exercices de début de séances : des exercices ciblés, assez courts, visant à installer des automatismes.

Vous retrouvez l'équivalent en terminale dans la section avant propos : Warmup - Automatismes .

Cette page est utile pour vous préparer à l'exercice 1 de l'épreuve pratique du baccalauréat et aux contrôles en classe de codage.

A travailler et retravailler sans modération.

Bon codage à vous !

Python : lp1

Écrire une fonction set_pv qui prend en paramètres :

Cette fonction set_pv renvoie le nombre de points de vie restant.
Attention ! Dans ce jeu, il faut retirer de pdv les dégâts diminués de l'armure. Par exemple, Si pdv $= 20$, damage$=5$ et armor $=2$ alors pv après le combat vaut $20-5+2=17$.
Ainsi, set_pv(20,5,2) doit renvoyer 17.

De plus, cette fonction ne doit être utilisée que dans le cas où les dégâts sont strictement supérieurs au niveau d'armure. Ajouter une précondition pour faire respecter cette attente du jeu.

Les plus rapides peuvent préciser le typage des entrées et des sorties, documenter la fonction et rajouter des préconditions sur les types et valeurs des arguments saisis.

Code de déblocage de la correction :

print, +, str

Écrire un scrypt affiche : "La NSI, c'est super, on apprend à coder 4h dans la semaine."

Il faudra utiliser une variable matiere contenant NSI et une variable heure qui contient 4.

Contraintes : utiliser print, + et str.

Code de déblocage de la correction :

Python : lp2

Écrire une fonction survivre(pdv, armor, damage) qui prend 3 entiers positifs ou nul en argument et renvoie un booleen True si pdv>0 et False sinon.

Pour ce jeu, on rappelle que pour déterminer les nouveaux points de vie, il faut retirer de pdv les dégats diminués de l'armure. Si pdv = 20, damage =5 et armor =2 alors pdv après le combat vaut 20-5+2=17.

Ajouter un assert qui vérifie que les damage sont supérieur à l'armor.

Par exemple : survivre(15, 12, 20) renvoie True.

Par exemple : survivre(15, 12, 45) renvoie False.

Par exemple : survivre(15, 12, 5) provoque un message d'erreur.

Code de déblocage de la correction :

Un personnage d'un jeu vidéo dispose de plusieurs outils. Chaque outil possède un pourcentage d'usure et certains sont réparables. Un objet réparable ayant un pourcentage d'usure d'au moins 80% doit être réparé.
Proposer une fonction a_reparer qui prend en paramètre :

Cette fonction renvoie un booléen : True signifiant que l'outil est à réparer, False signifiant le contraire.

Vérifier entre autres que :

Les plus rapides peuvent préciser le typage, rajouter des préconditions sur les arguments puis une documentation.

Code de déblocage de la correction :

Un combattant de votre jeu possède un score_combattant défini par la fonction modification_score(score_vie,score_dommage,nombre_armes) qui possède les paramètres suivants :

Cette fonction renvoie deux informations (un tuple) :

Coder cette fonction et faire des tests. Ajouter des assert pour les préconditions et un docstring pour documenter votre fonction

Exemples de tests :

Code de déblocage de la correction :

Dans un jeu vidéo, le joueur peut commencer avec trois principales catégories de personnages ; chaque catégorie de personnage conduit à un niveau d'expérience exp de départ différent :

Proposer une fonction a_pour_exp ayant pour paramètre categorie une chaîne de caractères donnant la catégorie du personnage choisi et renvoyant le niveau d'expérience de départ en exp.
Faire en sorte qu'une chaîne de caractères différentes de trois principales catégories conduise à une expérience nulle.

Par exemple :

Les plus rapides peuvent préciser le typage des paramètres, une précondition et une documentation.

Code de déblocage de la correction :

Vous devez coder une fonction test_variables avec trois paramètres qui sont les variables :

Votre fonction ne retourne rien, vous pouvez le coder en utilisant return None

A vous de coder des assert dans votre fonction pour tester les différentes préconditions

A vous de faire différents tests

Quelques rappels en python :

Pour les plus rapides, prenez l'habitude de documenter votre fonction avec des docstring

Code de déblocage de la correction :

Pour gérer l'interface de démarrage d'un jeu vidéo, vous avez à créer une fonction lancement.
Celle-ci est sans paramètre et va exécuter les tâches suivantes :

Code de déblocage de la correction :

fonction warning(pdv) structure conditionnelle

Créer une fonction warning avec comme paramètre un entier pdv.

Cette fonction permet de renvoyer un message :

À vous d'écrire un docstring pour commenter votre fonction et des préconditions en utilisant des assert

Code de déblocage de la correction :

fonction jeter_de(face)

Créer une fonction jeter_de avec comme paramètre un entier face.

Cette fonction renvoie un nombre aléatoire compris entre 1 et le nombre de faces (donné en argument par la variable face ) du dé

Aide python: pour obtenir un nombre aléatoire entre 1 et en python

# Obtenir et afficher un nombre aléatoire entre 1 et 6
# A tester
from random import randint
a= randint(1,6)
print(a)
 

À vous d'écrire un docstring pour commenter votre fonction et des préconditions en utilisant des assert

Code de déblocage de la correction :

fonctionelif if structure conditionnelle print + str

Code de déblocage de la correction :

Python : LP3

Vous programmez un jeu vidéo.
Le personnage principal de votre jeu doit rencontrer un boss final.
Ce personnage possède un certain nombre de points de vie, nombre stocké dans une variable nommée pv.
Le boss final possède 8 points de vie.
Lors du combat final, à chaque tour du combat, le lancer d'un dé à six faces est simulé : le nombre obtenu est le nombre de points de vie perdus par le personnage principal. Cependant, le boss final perd un point de vie à chaque tour du combat.
Le combat se poursuit jusqu'à ce que soit le personnage, soit le boss n'ait plus de points de vie.
Dans le cas où le personnage et le boss n'ont plus de points de vie à l'issue du combat, le personnage perd la partie.
Compléter ci-dessous la fonction combattre qui prend en paramètre le nombre de points de vie pv du personnage au début du combat final et renvoie la chaîne de caractères "Victoire !" dans le cas où le personnage gagne le combat et la chaîne "Défaite !" dans le cas où le personnage perd la partie.

Tester aussi la fonction complétée. Vous devez entre autres obtenir les résultats suivants :

from random import randint
def combattre(pv):
    pv_boss = ...
    ... :
        perte = randint(...,...)
        pv_boss = ...
        pv = ...
    if ...:
        return "Victoire !"
    else:
        return "Défaite !"

Code de déblocage de la correction :

Compléter la fonction test_entier(l) qui prend en paramètre l une liste.

Cette fonction renvoie un booléen : True si un élément de type int est dans la liste, False sinon

Rappel : tester le code type(4) et type([1,2,3])

def test_entier(l):
    test= ...
    for ... in l :
        if type(elt) == ... :
            test = ...
    return test


test_entier(['ok',2,'pas_ok'])
            

L'exécution de l'algorithme doit renvoyer le booléen True

A vous de vérifier votre code à l'aide de la fonction test() suivante :


def test() :
    assert test_entier(['je',2,4]) == True
    assert test_entier(['bob','max',[1,5,4],1]) == True
    assert test_entier([[1,2],[3,4]]) == False
    assert test_entier(['boby','Mimi']) == False
    assert test_entier([]) == False
    assert test_entier([2]) == True
    return None

test()

Faire une trace de l'algorithme avec l'exécution : test_entier(['ok',2,'pas_ok'])

L'utilisation de for vous semble-t-elle appropriée ?

Code de déblocage de la correction :

while

Blingbling veut ranger son tas de pièces d'or dans son coffre. Son coffre peut contenir au maximum 1000 pièces d'or.

Son tas de pièces est situé à coté de son coffre.

Il remplit son coffre par poignées allant de 3 à 8 pièces.

On veut savoir en combien de poignées, le coffre sera plein.

Les instructions suivantes renvoie un nombre aléatoire entre 8 et 25.

from random import *
print(randint(8,25))
            

Ecrire une fonction nb_poignees() qui renvoie le nombre de poignées nécessaire à remplir le coffre.

Code de déblocage de la correction :

while

On génère une liste de 30 nombres aléatoires compris entre 0 et 10 par le code l =[randint(0,10) for i in range(30)]

Tester ce code afin d'afficher la liste de 30 nombres il faut penser à importer la bibliothèque random en utilisant from random import *.

A vous de modifier ce code pour obtenir une liste de 100 nombres aléatoires compris entre 10 et 30.

On écrit une fonction est_dans(l,nb = 4) avec comme paramètres l une liste et nb un entier initialisé à 4.

Cette fonction renvoie un booléen qui permet de avoir si le nombre nb est dans la liste l.

A vous de compléter cette fonction dont le code ci-dessous est incomplet :

def est_dans(l,nb = 4):
    test=False
    n=len(l) # len(l) renvoie le nombre d'éléments dans l
    i=....
    while i ... len(l):
        if l[i] == .... :
            test= ....
        i+=1
    return ....
 

A vous de tester votre fonction avec :

l =[randint(0,10) for i in range(30)]
print(l)
print(est_dans(l,5))
print(est_dans(l)) # Si vous voulez tester 4, nb est initialisé à 4

A vous de proposer des tests qui renvoient un False en jouant soit sur la construction de la liste l, soit sur la valeur de nb.

Code de déblocage de la correction :

for chaine de caractères occurence

Lors d'un jeu vidéo, un personnage récolte différents objets.
Ces objets sont modélisés par un caractère ; voici quelques caractères possibles avec leur signification en terme d'objet :

La succession des objets ramassés est stockée dans une chaîne de caractères.
Par exemple, la chaîne de caractères "BXOBOOXP" signifie que le personnage a successivement ramassé du bois, du vide, de l'or, du bois, de l'or, de l'or, du vide et enfin une pierre.

Compléter la fonction ci-dessous nb_rammasse(chaine,objet) avec comme paramètres chaine une chaîne de caractères représentant une succession d'objets ramassés et objet un caractère unique représentant un objet possiblement ramassé.
Cette fonction doit renvoyer le nombre d'ojets objet présent dans chaine.

def nb_rammasse(chaine: str,objet: str)->int:
    """
    chaine est une chaîne de caractères et objet est un caractère seul.
    Fonction qui renvoie le nombre de fois où le caractère objet apparaît dans chaine.
    """
    nombre = ...
    for ... :
        if ... :
            nombre = ....
    return ....
 

À vous de tester votre fonction avec :

chaine = "BXOBOOXP"
print(nb_rammasse(chaine,"O")) # doit afficher 3
print(nb_rammasse(chaine,"A")) # doit afficher 0

Pour les plus rapides, proposer des préconditions portant sur chaineet sur objet (type, valeurs possibles, ...).

Pour connaître la longueur du chaîne de caractères ch, il suffit de saisir len(ch).

Code de déblocage de la correction :

Python : dc1

Un personnage d'un jeu vidéo accumule des points lors de différentes parties, points stockés dans une liste points.
Proposer une fonction sommer_points qui prend en paramètre une liste de nombres entiers et qui renvoie la somme de tous ces nombres entiers.

Par exemple :

points = [4, 17, 2, 12, 34, 8]
sommer_points(points)

renvoie 77.

Code de déblocage de la correction :

Les scores obtenu par un personnage de jeu vidéo sont sauvegardés dans une liste resultats.
Proposer une fonction meilleur_score qui prend en paramètre une liste de nombres entiers, sensés correspondre aux scores obtenus par le personnage, et qui renvoie le plus grand des nombres entiers de cette liste.

Tester la fonction obtenue en vérifiant que pour resultats=[45,78,59,21,84,68,72,53,60,65], meilleur_score(resultats) renvoie 84.

Code de déblocage de la correction :

Une joueuse de jeu vidéo a obtenu différents scores au cours de parties durant une semaine ; ces scores sont stockés dans une liste scores.
Cette joueuse aimerait connaître la moyenne des scores obtenus en ne prenant en compte que les scores dépassant 100 points.
Proposer une fonction get_mean qui prend en paramètre une liste scores et qui renvoie la moyenne des valeurs dépassant 100 présentes dans cette liste.

Par exemple :

Code de déblocage de la correction :

Binaire : B1

Pour gérer les connexions à un jeu vidéo, vous étudiez les adresses IP des joueurs.
Pour des raisons de sécurité, vous réduisez temporairement l'accès à votre jeu aux seul.e.s joueurs et joueuses de votre établissement.

On admet que les joueurs autorisés ont une adresse IP commençant par 192.168.

  1. Quelle est l'écriture binaire de 168 ?

  2. Le joueur ayant pour adresse IP écrite en binaire 11000000.10101000.00110010.00010111 peut-il se connecter à votre jeu ?

Code de déblocage de la correction :

HTML : html1

A vous d'écrire le code HTML qui permet d'avoir ce rendu visuel ci-dessous :

Vous pouvez vous rendre sur la source : Source wikipédia

Vous pouvez aussi copier-coller le texte brut :

Un texte est une série orale ou écrite de mots perçus comme constituant un ensemble cohérent, porteur de sens et utilisant les structures propres à une langue (conjugaisons, construction et association des phrases…)1. Un texte n'a pas de longueur déterminée sauf dans le cas de poèmes à forme fixe comme le sonnet ou le haïku. L'étude formelle des textes s'appuie sur la linguistique, qui est l'approche scientifique du langage. Étymologie « Texte » est issu du mot latin « textum », dérivé du verbe « texere » qui signifie « tisser ». Le mot s'applique à l'entrelacement des fibres utilisées dans le tissage, voir par exemple Ovide : « Quo super iniecit textum rude sedula Baucis = (un siège) sur lequel Baucis empressée avait jeté un tissu grossier »2 ou au tressage (exemple chez Martial « Vimineum textum = panier d'osier tressé »). Le verbe a aussi le sens large de construire comme dans « basilicam texere = construire une basilique » chez Cicéron3. Le sens figuré d'éléments de langage organisés et enchaînés apparaît avant l'Empire romain : il désigne un agencement particulier du discours. Exemple : « epistolas texere = composer des épîtres » - Cicéron (ier siècle av. J.-C.)4 ou plus nettement chez Quintilien (ier siècle apr. J.-C.) : « verba in textu jungantur = l'agencement des mots dans la phrase »5. Les formes anciennes du Moyen Âge désignent au xiie siècle le volume qui contient le texte sacré des Évangiles, puis au xiiie siècle, le texte original d'un livre saint ou des propos de quelqu'un. Au xviie siècle le mot s’applique au passage d'un ouvrage pris comme référence et au début du xixe siècle le mot texte a son sens général d'« écrit »6. Texte littéraire Un texte répond de façon plus ou moins pertinente à des critères qui en déterminent la qualité littéraire. On retient en particulier la structure d'ensemble, la syntaxe et la ponctuation, l'orthographe lexicale et grammaticale, la pertinence et la richesse du vocabulaire, la présence de figures de style, le registre de langue et la fonction recherchée (narrative, descriptive, expressive, argumentative, injonctive, poétique). C'est l'objet de l'analyse littéraire. En informatique En informatique, la notion de texte s'oppose à la notion de données binaires, on parle alors : de texte brut dans un protocole de télécommunication ; de document texte si le logiciel utilisé permet de formater le texte ; ou encore de texte formaté ou riche lorsque les indications de formats sont données en texte brut (exemple : Rich Text Format) ; de fichier texte dans un fichier qui ne contient que des caractères sans mise en forme autre que les sauts de lignes et le choix des caractères.


A vous d'insérer également un lien vers la source.

L'image est accessible sur le lien : image wikipédia

Code de déblocage de la correction :

Trace d'exécution: A1

for, boucle, trace d'exécution

Réaliser la trace d'exécution de l'algorithme suivant :

pdv = 20
for i in range(5):
    pdv = pdv - i

Code de déblocage de la correction :

for,boucle, if, trace d'exécution

Réaliser la trace d'exécution de l'algorithme suivant :

pdv = 30

for i in range(3):
    # "!="" signifie "différent de" 
    if pdv != 30 :
        pdv = pdv + 10*i
    else : 
        pdv = pdv - 10*i

Vous pouvez utiliser la numérotation suivante des lignes :

1) pdv = 30

2) for i in range(3):
    # "!="" signifie "différent de" 
3)     if pdv != 30 :
4)         pdv = pdv + 10*i
5)     else : 
6)         pdv = pdv - 10*i

Réaliser une en-tête de tableau de trace d'exécution comme celle ci-dessous à compléter :

Numéro Contrôle variable locale : pdv variable locale : i
1
2
...

pour déterminer quelle est la valeur de la variable pdv en fin d'exécution.

Code de déblocage de la correction :

for each,boucle, trace d'exécution

Réaliser la trace d'exécution de l'algorithme suivant :

l=[12,8,15]
nb_de_notes = 0
somme_notes = 0
for nb in l:
    somme_notes = somme_notes + nb 
    nb_de_notes = nb_de_notes + 1
moyenne = somme_notes / nb_de_notes

Vous pouvez utiliser la numérotation suivante des lignes :

1) l=[12,8,15]
2) nb_de_notes = 0
3) somme_notes = 0
4) for nb in l:
5)     somme_notes = somme_notes + nb 
6)     nb_de_notes = nb_de_notes + 1
7) moyenne = somme_notes / nb_de_notes

Une en-tête de tableau de trace d'exécution possible :

Numéro l nb_de_notes somme_notes nb moyenne
1
2
...

En utilisant votre trace d'exécution, que contient la variable moyenne ?

Code de déblocage de la correction :

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International