Author: Jil S.M.

DS

Correction du sujet de l’épreuve Blanche de 1ère NSI,…

Dans le cadre de l’évaluation en contrôle continu, les élèves étudiant la spécialité NSI passent des épreuves de de contrôle continu lors du troisième trimestre de leur année de première.

Introduction

Les épreuves de la session 2021 ont été annulés, mais les épreuves blanches dans notre établissement ont été maintenues.

Nous vous proposons la correction de cette épreuve. Elle contient 40 questions de la banque officielle des sujets ainsi qu’une question « One More Thing » sur deux points. Il est néanmoins hypothétiquement possible que certaines des réponses proposées dans ce sujet ne soient pas à 100 % « totalement officielles ».

Le sujet est disponible en version PDF :

Cette correction a été entièrement préparé et rédigé sur ce site web par nos élèves de la spécialité NSI du lycée Louis Pasteur.

Les sujets sont sous licence CC BY-NC-SA 3.0 FR, le présent corrigé est sous la même licence.

Thème A : types de base

Question A.1
Quel est un avantage du codage UTF8 par rapport au codage ASCII ?

Réponses
A. il permet de coder un caractère sur un octet au lieu de deux
B. il permet de coder les majuscules
C. il permet de coder tous les caractères
D. il permet de coder différentes polices de caractères
E. UTF8 permet de descendre de la montagne même quand ASCII ce n’est pas possible.

Correction : Réponse C
Après une très longue réflexion, la E nous semblait être la plus pertinente. Néanmoins n’aimant pas le Ski mais préférant la course à pied, nous avons plutôt choisi la C. En effet UTF8 permet de coder tous les caractères et même le très franchouillard « Â » ou encore le « ß » de nos cousins germains.

Question A.2
On considère les codes ASCII en écriture hexadécimale (en base 16).Retour ligne automatique
Le code ASCII de la lettre A est 0x41, celui de la lettre B est 0x42, celui de la lettre C est 0x43, etc. Quel est le code ASCII, en hexadécimal, de la lettre X (c’est la 24e lettre de l’alphabet usuel).

Réponses
A. 0x58 
B. 0x64 
C. 0x7A
D. 0x88

Correction : Réponse A
Ici le piège si on ne lisait que les chiffres c’était de croire que le X qui est la 24 ème lettre de l’alphabet usuel (soit la 24 lettre en décimal). On additionnait donc des décimaux et des hexadécimaux et paf, on tombait en plein dans l’erreur. Il faut donc convertir 23 (car il y a 23 d’écart entre A et X) en hexadécimal, puis l’additionner à l’hexadécimal de A. Et paf, ça fait des chocapics (où plutôt 0x58) !

Question A.3
Quelle est la représentation en binaire de l’entier 64 sur un octet ?

Réponses
A. 0101 0000
B. 1100 0100
C. 0100 0000
D. 0000 1100

Correction : Réponse C
C’est dans cette question où on verra qui sont les béotiens du binaire, je crois qu’on ne peut faire plus simple, tomberas-tu dans le piège qui te dit que c’est trop facile donc tu coches autre chose (d’illogique evidemment) puis en fait il s’avère que tu avais raison, donc tu as un énorme seum pasque tu sais que tu avais bon. Bref, j’espère que tu as la C sinon tu crains.

Question A.4
Quelle est l’écriture hexadécimale de l’entier dont la représentation en binaire non signé est 1100 0011 ?

Réponses
A. BB
B. C3
C. CB
D. 7610

Correction : Réponse B
Excepté si vous souhaitez vous rendre dans le chaleureux (et très perdu) canton d’Eu, ou avoir une carte bancaire, ou même écraser un bébé (???), euuu je vous conseille de prendre la Citroen C3, c’est la plus fiable et vous aurez moins de problèmes.

Thème B : types construits

Question B.1
On considère le script suivant :

t = [2, 8, 9, 2]
t[2] = t[2] + 5

Quelle est la valeur de t à la fin de son exécution ?

Réponses
A. [42, 13, 9, 2]
B. [2, 8, 14, 2]
C. [7, 13, 14, 7]
D. [7, 13, 9, 42]

Correction : Réponse B
Bon, même si le 42 attire inéluctablement nos regards, on doit l’oublier (excusez nous). Ça nous laisse plus que deux possibilités, B et C. Si vous vous débrouillez super bien en calcul mental, vous verrez que 9+5=14. Vérifier le calcul si vous doutez évidemment, je ne suis sure de rien. Donc, on remplace à l’indice 2 (n’oubliez pas qu’on commence avec l’indice 0 dans une liste) avec votre calcul effectué avec brio ci-dessus. On se demande où ils sortent leur réponse C quand même.

Question B.2
Que vaut l’expression [ 2*k for k in range(5) ] ?

Réponses
A. [0,2,4,6,8]
B. [2,4,6,8,10]
C. [1,2,4,8,16]
D. [2,4,8,16,32]

Correction : Réponse A
Une seule réponse sera l’élue, avec un zéro dedans puisque le inrange(5) démarre dès 0, donc sauf si vous avez des problèmes de vue, ou autres hein (ignare), impossible de trouver autre chose.

Question B.3
Après l’affectation suivante :

alphabet = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ]

quelle est l’expression qui permet d’accéder à la lettre E ?

Réponses
A. alphabet[42]
B. alphabet[’E’]
C. alphabet[4]
D. alphabet[5]

Correction : Réponse C
Donc, pour trouver l’expression qui permet d’accéder à la lettre E, il suffit de compter à quel rang elle est dans l’alphabet. Ensuite il nous faut retrancher à ce nombre 666, puis ajouter un peu de poudre de perlimpinpin de 69, quelques carabistouilles de 42 et enfin, traverser 120 fois la rue pour trouver un travail. Et voilà ! Vous tombez sur la réponse C (le premier indice de la liste est 0).

Question B.4
On définit le dictionnaire d = ’a’ : 1, ’b’ : 2, ’c’ : 3, ’z’ : 26. Quelle expression permet de récupérer la valeur de la clé ’z’ ?

Réponses
A. d[4]
B. d[26]
C. d[z]
D. d[’z’]

Correction : Réponse D
Vous savez utiliser un dictionnaire ? Et ben voilà c’est pareil ! On cherche la “définition” (appelée ici “valeur”) de “z” donc tape donc la réponse D, et magie on a comme retour la valeur de “z”.

Question B.5
On définit : L​ = [10,9,8,7,6,5,4,3,2,1] Quelle est la valeur de L[L[3]] ?

Réponses
A. 3
B. 4
C. 7
D. 8

Correction : Réponse A

Il faut apprendre à décomposer on cherche donc le retour de la liste L d’indice de la valeur de l’indice 3 de la liste L. Autrement dit, on regarde la valeur d’indice trois. Comptons :
1, 2, 3 ; c’est donc “8” ! Et bien non chers nsistes ! Il ne faut pas oublier que pour une liste en Python, la première valeur est celle d’indice “0”. Donc la valeur d’indice “3” est “7” !
On cherche ensuite la valeur de la liste d’indice “7” ; soit “3” !!

Question B.6
On exécute le code suivant :

A = [ [ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ] ] 
B = [ [ 0 , 0 , 0 ], [ 0 , 0 , 0 ], [ 0 , 0 , 0 ] ] 
for i in range( 3 ):
	for j in range( 3 ): 
		B[i][j] = A[j][i]

Que vaut B à la fin de l’exécution ?

Correction : Réponse C

Pour l’audace, la E. Nan plus sérieusement, il faut d’abord comprendre ce que fait le programme. On se rend compte que la liste B va être « remplie » des éléments de la liste A mais pas dans l’ordre, seulement, il y a des petits pièges, puisque le programme ne fait pas qu’inverser la liste, mais les indices de la liste. Ainsi pour une valeur de B ; soit B[i][j], on mettra la valeur de A[j][i]. 
Un exemple parle toujours mieux : 
Si on a B[1][2] ; soit la troisième valeur de la deuxième sous-liste de B, on va y mettre comme valeur, celle de A[2][1] ; soit 8 !

Thème C : traitements de données en table

Question C.1
On définit la fonction suivante qui prend en argument un tableau non vide d’entiers :

def f (T) : 
    s = 0
    for k in T: 
        if k == 8 :
            s = s+ 1 
        if s > 1 :
            return True 
        else :
            return False

Dans quel cas cette fonction renvoie-t-elle la valeur True ?

Réponses
A. dans le cas où 8 est présent au moins une fois dans le tableau T
B. dans le cas où 8 est présent au moins deux fois dans le tableau T 
C. dans le cas où 8 est présent exactement une fois dans le tableau T 
D. dans le cas où 8 est présent exactement deux fois dans le tableau T
Correction : Réponse B

Question C.2
Soit le tableau défini de la manière suivante :
tableau = [[​1​,​3​,​4​],[​2​,​7​,​8​],[​9​,​10​,​6​],[​12​,​11​,​5​]]
On souhaite accéder à la valeur 12, on écrit pour cela :
Réponses
A. tableau[4][1]
B. tableau[1][4]
C. tableau[3][0]
D. tableau[0][3]

Correction : Réponse C
Encore une fois on a affaire à ces foutus tableaux de tableaux grrrr, bref simplement de la logique, comme dhab vous avez l’indice 0 en premier, donc pour trouver 12, selon ce raisonnement foncièrement bon, vous allez au tableau 3, indice 0 (pasque on va du plus grand au plus petit, bref si tu comprends pas va voir ton cours loulou).

Question C.3
On définit :

contacts = { 'Toto' : 'toto@nsi.fr' , 'Chloé' : 'chloe@nsi.com' , 'Paul' :'paul@nsi.net' , 
            'Clémence' : 'clemence@nsi.org' }

Parmi les propositions suivantes, laquelle est exacte ?

Réponses
A. ’Chloé’ est une valeur de la variable contacts
B. ’Chloé’ est une clé de la variable contacts
C. ’Chloé’ est un attribut de la variable contacts
D. ’Chloé’ est un champ de la variable contacts
E. ’Chloé’ a été identifiée “cas contact” par le ministère de l’éducation nationale

Correction : Réponse B
Si j’étais vous je m’approcherais pas de Chloé. Bon ça fait une semaine maintenant, vous pouvez aller lui faire plein de poutoux ! Si vous voulez quand même la dm, vous lui envoyez un petit mail 😉 Bref, quesque chloé ? Nan c’est pas une personne débilos, c’est la clé de ton cœur (oof) :)) Donc grâce à la force de l’amour tu as trouvé la réponse !

Question C.4 (Pas Picasso)
Laquelle de ces listes de chaînes de caractères est triée en ordre croissant ?

Réponses
A. [’Chat’, ’Chien’, ’Cheval’, ’Cochon’] 
B. [’Chat’, ’Cheval’, ’Chien’, ’Cochon’] 
C. [’Chien’, ’Cheval’, ’Cochon’, ’Chat’] 
D. [’Cochon’, ’Chien’, ’Cheval’, ’Chat’]

Correction : Réponse B
On ne parle pas d’ordre croissant de préférence, nan nan, mais bien au niveau de la place des lettres dans l’alphabet. Étant tous des non illettrés, nous savons que O est après H, et que E avant I, donc sauf si vous lisez à l’envers, quoique très courant de nos jours, je vous propose la réponse B (en plus le chat est clairement au dessus du cheval, du chien et du cochon, c’est pas pour rien qu’il était adulé en Egypte hein).

Thème D : interactions entre l’Homme et la Machine sur le Web

Question D.1
Par quoi commence l’URL d’une page Web sécurisée ?

Réponses
A. http 
B. https 
C. ftp 
D. smtp

Correction : Réponse B
Regarde l’URL de ton site préféré (nsi.xyz evidemment), il y aura toujours “http” mais si tu veux être sur que ce site est sécurisé il y aura un “s” comme pour “sécurité_juste_pour_toi”. Tu pourras donc livrer tes informations les plus privées à Google comme tes mot de passe, tes codes de carte bleu, etc… (même si il sait déjà tout 🤫).

Question D.2
Quelle méthode d’envoi des paramètres est-il préférable d’utiliser, pour un formulaire d’une page web, destiné à demander à l’utilisateur un mot de passe pour se connecter (le protocole utilisé est HTTPS) ?

Réponses
A. la méthode PASSWORD 
B. la méthode CRYPT
C. la méthode GET 
D. la méthode POST

Correction : Réponse D
Euuuuuu alors, non ca peut pas etre un caveau souterrain servant de sépulcre, ni un mot de passe (oui vous avez vu on parle couramment anglais ici). Plus que 2 possibilités, mais seule la méthode POST vous permet d’entrer un mdp sur un site sécurisé (qui va encore sur ce genre de site mon dieuuuuu).

Question D.3
Parmi les langages suivants, lequel est exécuté sur le serveur lors de la consultation d’une page Web ?

Réponses
A. JavaScript
B. HTML 
C. CSS 
D. PHP

Correction : Réponse D
Le PHP, c’est lourd, complexe ! C’est pour cela que ce langage s’exécute côté serveur. Sinon ça serait trop complexe pour ton ordi qui a fait les 2 guerres mondiales. On laisse tous ces calculs à des supers machines de la mort qui tuent, et comme ça toi, t’es tranquille.

Question D.4
Quelle est la machine qui exécute un programme JavaScript inclus dans une page HTML ?

Réponses
A. le serveur WEB qui contient la page HTML 
B. la machine de l’utilisateur qui consulte la page HTML 
C. un serveur du réseau 
D. un routeur du réseau

Correction : Réponse B
Une fois que tu as reçu les programmes venant du serveur, alors tout se fait sur ta machine, y compris les programmes JavaScript. Au passage, une petite astuce, si sur ton site tu appelles un script JS, appelle le à la fin de ton script HTML, comme ça la page s’affiche et après calcul le Java (ce qui est donc “plus mieux” rapide).

Question D.5
Quelle est la balise HTML utilisée pour indiquer un titre de niveau d’importance maximum ?

Réponses
A. la balise <h0>
B. la balise <h1>
C. la balise <head>
D. la balise <header>

Correction : Réponse B
Bon, j’ai vraiment besoin de développer ça ?! Juste tu veux un titre en HTML, alors tu utilises <h1>.

Question D.6
Dans le code HTML les délimiteurs tels que et s’appellent ?

Réponses
A. des bornes
B. des balises
C. des paragraphes
D. des liens

Correction : Réponse Ø
Bhahahahahah là y a pas de réponse, juste tu marques que le prof a fait une erreur –oui les profs en font-, ducoup t’as un point gratos et ça fait assez plaiz surtout quand tu verras ta note (oof).

Question D.7
Parmi GET et POST, quelle méthode d’envoi de formulaire crypte les informations envoyées au serveur ?

Réponses
A. les deux : GET et POST
B. GET seulement
C. POST seulement
D. aucune des deux

Correction : Réponse D
GET et POST sont fourbes ! Ces deux méthodes sont hyper utiles, MAIS elles ne cryptent rien, ce qui n’est pas vraiment super pour nous… Mais pas le choix d’utiliser autre chose, tant pis 🤷‍♂️ (si on peut utiliser https au moins c’est crypté ! mais si on utilise get alors ça apparaît dans l’url donc pas ouf ! Le nec ++ ultra c’est donc POST + HTTPS mais bon on sait pas pour la NSA (pas encore…)).

Question D.8
Parmi les éléments suivants, lequel est un protocole ?

Réponses
A. GET
B. POST
C. HTTP
D. HTML

Correction : Réponse C
GET et POST étaient précédemment définis comme étant des méthodes, donc pourquoi ça deviendrait un protocole ???? La réponse est vraiment dans les questions précédentes, donc bon, je sais pas quoi vous dire de plus mmmmmm. HTML est un langage de balisage, tout comme LateX, plus qu’une réponse, faites par élimination (même si devant la copie j’avoue qu’on panique).

Question D.9
Pour créer un lien vers la page d’accueil de Wikipédia, que devra-t-on écrire dans une page Web ?

Réponses
A. <​a target="http://fr.wikipedia.org">Wikipédia</a>
B. ​<a href="http://fr.wikipedia.org" />
C. <​a href="http://fr.wikipedia.org">Wikipédia</a>
D. ​<link src="http://fr.wikipedia.org">Wikipédia</link>

Correction : Réponse C
OUIII WIKIPEDIA, on va encore pouvoir faire toutes nos recherches dessus (sans tricher), et c’est les profs qui nous donnent le droit donc, tout est permis !!!! Bon la si vous trouvez pas le bon vous craignez, ça on l’a vu en SNT (vous avez eu la chance de le voir ; nuance), même si oui on a rien fait dans cette matière l’année dernière, je l’admet, ON A QUAND MÊME VU LES LIENS, cherchez pas des excuses.

Thème E : Architectures matérielles et système d’exploitation

Question E.1
Identifier parmi les éléments suivants celui qui n’est pas un capteur.
A. haut-parleur 
B. caméra 
C. accéléromètre 
D. microphone

Correction : Réponse A
Essayez de crier dans un haut-parleur. Bravo vous avez cassé la membrane de la Devialet à 1500 € !! Vous avez plus qu’à prendre des écouteurs de Ryanair en les mettant dans l’enceinte pour pas que vos parents vous défoncent. Tout ça parce que vous êtes pas capables de savoir qu’un haut-parleur n’enregistre pas du son.

Question E.2
Lequel de ces objets n’est pas un périphérique ? 
A. le clavier 
B. une clé USB 
C. la carte graphique 
D. la carte mère

Correction : Réponse D
Un périphérique est un objet que tu rajoutes à ton PC, mais sans cet objet ton PC pourra toujours fonctionner. On peut faire marcher fonctionner un PC sans clavier, sans clé USB, ni carte graphique. Mais sans carte mère… c’est un peu complexe.

Question E.3
L’adresse IP du site www.education.gouv.fr est 185.75.143.24. Quel dispositif permet d’associer l’adresse IP et l’URL www.education.gouv.fr ? 
A. un routeur 
B. un serveur DNS 
C. un serveur de temps 
D. un serveur Web 
E. L’application TousAntiCovid, qui empêche également le virus de rentrer dans les écoles.

Correction : Réponse B
Tu as désormais l’adresse IP du gouvernement !! Trop bien, tu peux maintenant hacker tout le gouvernement en passant par un serveur DNS et ainsi te mettre plein de 20/20 (c fo ils ont pas eu le budget pour avoir un serveur à eux tout seul ; essayez de taper l’I.P. sur internet) ! (tu peu le fer poure moua estépé). Par contre a-t-on des retours sur l’efficacité de TousAntiCovid (aka HadopiCovid) ?!

Question E.4
L’architecture client-serveur : 
A. est un mode de communication entre programmes 
B. est une architecture matérielle de coopération entre machines 
C. est un mode de communication entre routeurs 
D. est un mode de communication entre commutateurs 
E. est le mode de fonctionnement des restaurants avant la crise sanitaire, qui sont actuellement fermés donc je ne peux pas répondre à la question car je dois respecter les gestes barrières.

Correction : Réponse A
Attention à ne pas confondre hardware et software.
L’architecture client-serveur est un mode de communication entre programmes, au même type que l’’architecture P2P. Elle ne dépend pas du hardware, mais bien du logiciel installé, qui peut être un client ou un serveur. (Corrigé par un enseignant)

Thème F : langages et programmation

Question F.1 (Ca va vite)(Attention vous avez pas le permis hein)
On considère le code suivant :
Quelle construction élémentaire peut-on identifier dans le code ci-dessus ?

if x < 4 :
	x = x + 3
else :
	x = x - 3

Réponses
A. une boucle non bornée 
B. une structure conditionnelle 
C. une boucle bornée
D. un appel de fonction
E. Un troll des cavernes
F. La réponse F.

Correction : Réponse B
Vous pouvez répéter la question ??
Fioooooooum ! Est-ce que qu’il y a besoin de tant déblatérer sur celle-là, c’est pourtant évident !

Question F.2 (Après F1 (normalement))
La fonction suivante calcule la racine carrée du double d’un nombre flottant. from math import sqrt Quelle est la précondition sur l’argument de cette fonction ?

def racine_du_double(x):
   return sqrt(2*x)

Réponses
A. x < 0 
B. x >= 0 
C. 2 * x > 0 
D. sqrt(x) >= 0

Correction : Réponse B
Ton prof de maths ne t’a jamais dit qu’une racine carré NE PEUT PAS manger de la soupe et de la pizza en même temps être négative ; une racine carrée, c’est toujours content (on garde ça pour le prochain spot de pub sur les maths) !

Question F.3
On considère le code suivant : Quelles sont les préconditions sur les arguments ?

def puiss(y,x): 
	res = y 
	for i in range(x): 
	    res = res*y 
	return res

Réponses
A. les arguments doivent être obligatoirement de type entier 
B. les arguments peuvent être de type entier ou flottant 
C. le type des arguments n’a pas d’importance 
D. il n’y a pas de préconditions dans ce cas

Correction : Réponse A
T’as déjà essayé de multiplier un nombre décimal en python ? Si oui ça marche ? Si oui dis moi comment tu fais !! Bon t’as bien compris qu’on peut pas… donc on s’assure bien que ce soit un entier avant tout.

Question F.4 (fait Alt+F4 stp)
Quelle est la valeur de la variable x à la fin de l’exécution du script suivant :

def f(x):
   x = x + 1
   return x + 1
x = 0
f(x+1)

Réponses
A. 0 
B. 1 
C. 2 
D. 3 
E. Georges

Correction : Réponse A
La variable x définie par x=0 est une variable globale qui n’a aucun rapport avec la variable locale nommé x de la fonction f. L’appel f(0+1) retourne bien la valeur 3, mais ce n’est pas la question posée. La variable globale n’a pas été modifiée, sa valeur est toujours 0. (Corrigé par un enseignant)

Question F.5(prenez un peu d’air frais)
On exécute le script suivant.

a = 11
for i in range(3):
   a = a * 2
   a = a - 10

Que contient la variable a​ ​à la fin de cette exécution ?

Réponses
A. 0 
B. 14 
C. 18 
D. 26

Correction : Réponse C
Dans le for i in range, ça veut dire que i ira pas jusqu’à 3 mais s’arrêtera à 2. Mais vous me diriez “Mon ptit bonhomme”, mais il part d’où ce A ?
Et bien c’est simple de rien, comme nous dans 3 ans sur le marché du travail. Mais rien c’est pas une valeur ?! 
Si, j’ai un indice le premier nombre arabe, le début de tout, le nombre “presque” suprême.
Et oui c’est le 0 !
Donc i va prendre les valeurs de 0, puis 1, puis 2, en faisant pendant ce temps sa mixture avec a.

Question F.6
On définit la fonction suivante :

def f(x,y):
     x = x +y
     y = x -y
     x = x -y
    return (x,y)

Quel est la valeur renvoyée par l’appel de patrick ​de chez carglass (mais non c’est Olivier de Carglass ) f(2019,2020)​ ?
Réponses
A. (2019,2019)
B. (2019,2020)
C. (2020,2019) 
D. (2020,2020)

Correction : Réponse C
OH MON DIEU DES MATHS J’AI ENVIE DE ME CREVER LES YEUX ET DE BOIRE MON SANG, bref.
La réponse est C, car elle est forcément égale à 2019 : (2020+2019)-2020 = 2019 (un vase peut y arriver, même un spé philo peut le faire).

Question F.7 (Vous avez vérifié nos fautes ?)
Un programme Python commence par la ligne : import​ os

À quoi sert cette ligne ?
Réponses
A. C’est du poulet basquaise
B. c’est la déclaration du système d’exploitation (operating system)
C. Python 3.6 exige cette ligne au début de tout programme
D. c’est la déclaration d’une bibliothèque (ou module) que le programme compte utiliserRetour ligne automatique
Correction : Réponse A
Bon la on se pose même pas la question, la nourriture est prioritaire partout. Juste le poulet c’est pas fou, on aurait pu trouver mieux hein. (os → module déclaré, pas de bouffe, dommage, un jour omega nous livrera à domicile). Donc réponse D, on verra si vous lisez toutes nos réponses de folie comme ça.

Question F.8
La fonction Python suivante ne calcule pas toujours correctement le résultat de 𝑥 𝑦 pour des arguments entiers. Parmi les tests suivants, lequel va permettre de détecter l’erreur ?

def puissance (x,y):
   p = x
   for i in range (y - 1):
      p = p * x
   return p

Réponses
A. puissance(2,0) 
B. puissance(2,1) 
C. puissance(2,2) 
D. puissance(2,10)

Correction : Réponse A
On sait bien que 20 = 1 ! Mais si on regarde le logarithme népérien de 0, on remarque que la réponse A permet avec certitude de déclarer Patrick Balkany comme prochain guest de Just Dance after the covid. (#Lourdeur)

Thème G : algorithmique

Question G.1 (meilleure classe, confirmé par près de π/3*100 de tous les rédacteurs)

Que fait la fonction suivante :

def trouver(L):
   i = 0
   for j in range(1, len(L)):
      if L[j] >= L[i]:
         i = j
   return i

Réponses
A. elle renvoie le maximum de la liste 
B. elle renvoie le minimum de la liste 
C. elle renvoie l’indice de la première occurrence du maximum de la liste 
D. elle renvoie l’indice de la dernière occurrence du maximum de la liste

Correction : Réponse D
Que nous imaginassions nous trouver dans un champ de pommes. On choisit la plus grande (je t’ai vu sourir raph), et si deux font la même taille on prend la deuxième.
Donc voilà vous savez on vire donc la A et la B car ça retourne l’indice tout ça. Ensuite on l’a dit si y en a 2 on prend la deuxième, donc c’est la réponse D. (Bon on avoue, on a un peu triché on a incanté le dieux des 1G1 et du 42 pour trouver la réponse, car c’est l’entier entre les deux extrêmes du deuxième dieu, soustrait au G du dieu de la classe :)).

Question G.2 (ahhhhh les G2 y en a qu’une qui est bien…🥰) (en effet)
On exécute le script suivant :

compt = 0
resultat = 1
while compt != 7 :
   resultat = resultat * compt
   compt = compt + 1

Laquelle de ces affirmations est vraie ?

Réponses
A. Le script ne s’arrête pas
B. Le script entre 7 fois dans la boucle et à la fin de son exécution, r​esultat ​vaut 0 
C. Le script entre 7 fois dans la boucle et à la fin de son exécution, r​esultat ​vaut 720 
D. Le script entre 6 fois dans la boucle et à la fin de son exécution, ​resultat ​vaut 0

Correction : Réponse B
Déjà quelque chose multiplié par 0, tu sais que ça fait 0 (sauf ∞ mais on parle pas de ça maintenant). Donc notre fameux “temp”, il rentre 7 fois dans la boucle parce que “while != 7” veut dire “ca rentre tant que c’est différent du chiffre 7”.
Mais bon c’est une situation temporaire comme ils disent tous au début donc on s’en fiche un peu.

Question G.3
Quelle est la valeur du couple (​ s,i)​ à la fin de l’exécution du script suivant ?

s = 0
i = 1
while i < 5:
   s = s +i
   i = i + 1

Réponses
A. (4, 5) 
B. (10, 4) 
C. (10, 5) 
D. (15, 5) 
E. (42, 5)

Correction : Réponse C
Bah là y’a rien à dire… juste c’est des maths de la logique banane / humour d’arbre !

Question G.4 (G4 Cube)
La fonction suivante doit calculer le produit de tous les éléments de la liste passée en paramètre. Avec quelles expressions doit-on la compléter pour que cette fonction soit correcte ?

def produit (L):
p = …
for elt in L:
     .......
     return p

Réponses
A. 1 puis p​ = p * elt 
B. 0 puis ​p = p * elt 
C. 1 puis p​ = elt
D. 0 puis ​p = elt
Correction : Réponse A

Un produit fois 0 c’est comme si on vous donnait 42 fois 0 PS5 (de toute façon y en a plus ils sont pas foutu d’en produire 2), donc c’est pas bon vu qu’on en veut. Donc c’est forcément 1. Il ne reste que la A et la C (à la fin il n’en restera qu’un 😁). et vu qu’on veut faire le produit de tout c’est forcément la A !

Question G.5 (The last) (but not the least)
Quelle est la valeur de e​lement ​à la fin de l’exécution du code suivant :

L = [ 1 , 2 , 3 , 4 , 1 , 2 , 3 , 4 , 0 , 2 ] 
element = L[ 0 ]
	for k in L:
	    if k > element: 
	        element = k

Réponses
A. 0 
B. 1 
C. 4 
D. 10

Correction : Réponse C
La dernière question, elle nous promet une difficulté intense, une réflexion poussée, un stress à son comble. Non c’est une liste, dur retour à la réalité, de nos actes, nos pensées, nos vies inintéressantes.
En fait on cherche juste la valeur de la liste la plus grande (toujours cette notion de plus grand, pourquoi comparer les gens c’est inutile, on est tous unique, donc comparer des gens ou même des nombres ça revient à les dégrader). Pourquoi, ici 4 serait supérieur aux autres, c’est injuste pour le 0 qui est très beau, pourquoi, pourquoi ?!!

Pour le petit bonus,

bah c’est juste 36 // 42 // 666 // 404 (logique).
On tiendrait quand même à parler de quelques succès des One More Thing :
On peut trouver un Mac que je suis le seul à trouver magnifique le Powerbook G3 aussi nommé Clamshell,

Il est pas magnifique ce PowerBook G3 Clamshell 🥰 ?

Ici vous verrez une magnifique photo de cette beauté colorée

Bon après il y a aussi des ratés commes : 
– Itunes Match (si quelqu’un connait, qu’il lève la main) 
– Face Time

Bref on espère que ça vous aura plus.
42,
Peace,
NSI

One more thing

Ce script ci-dessous est exécuté.

Vous devez déterminer les valeurs des variables quarantedeux , Quarantedeux , quaranteDeux et QuaranteDeux à la fin de l’exécution de ce script.

# déclaration des variables
wan, tu, free, fore, faiv, sɪks, seven = 7, 6, 5, 4, 3, 2, 1
quarantedeux = Quarantedeux = quaranteDeux = QuaranteDeux = 0
 
# déclaration des fonctions
 
def double(x):
    return x ** 2
 
def cube(y):
    return 2 * y
 
def carre(z):
    return z ** 3
 
# déclaration des affectations de variables
 
quaranteDeux = fore + fore * ( double( wan + faiv ) )
 
if carre(sɪks) == cube(fore):
    quarantedeux = 666
else :
    quarantedeux = 42
   
while QuaranteDeux != 42:
    QuaranteDeux += 1
   
for i in range(7):
    Quarantedeux = 6 * i

Le dernier exercice de ce sujet n’est pas corrigé ici mais plus haut hihihi.

Sachez juste que derrière une variable appelée 42 peut se cacher autre chose que 42. 😂

Conclusion

Vous pouvez réagir ici :

En particulier si les élèves auteurs de ce corrigé se sont trompés.

Le précédent corrigé : Correction du sujet n°42 de la BNS des E3C de NSI

contenait lui 2 erreurs fâcheuses 😱

Tutoriels

Découvrir et utiliser le markdown

Si vous souhaitez mettre en forme proprement des messages ou des contenus web, ou bien rédiger des documentations, suivez ce tutoriel, et vous assimilerez un nouveau langage en un rien de temps !

Qu’est-ce que Markdown ?

Tout comme le HTML, conçu pour représenter les pages web, et LaTexMarkdown est un langage de balisage, ayant pour fonction de structurer la mise en page de votre texte, à la différence des langages de programmation, renfermant de nombreuses boucles et variables. Contrairement aux deux autres langages, Markdown est très simple, léger, et facile à comprendre pour les mortels. En effet, réalisé pour les paresseux en ayant assez du formatage sous des logiciels tel Word, ou bien même des balises sous HTML, il permet de rédiger en une syntaxe claire et lisible, sans nécessité d’érudition cyclopéenne. Il sert aussi à convertir directement et sans trop de manipulations un format de texte brut facile à lire et à écrire, en HTML. Il est alors utile pour ceux qui n’ont pas de compétences particulières en informatique, et qui veulent rédiger des documentations, des notes, des textes simples, des messages… sur des forums, notamment sur le fameux Github

Les éditeurs Markdown

Tout d’abord, il vous faut trouver un éditeur à la hauteur de vos attentes et de vos talents, et qui puisse être le plus efficace et convenable selon votre utilisation et vos besoins. Il en existe de nombreux, gratuits ou payants, en ligne ou hors-ligne, open source etc…Mais, lesquels pourront représenter l’élite ?

En ligne 

Les meilleurs éditeurs Markdown utilisables gratuitement et directement dans votre navigateur Web, sans besoin d’installation d’applications encombrantes, et prêts à l’emploi rapidement, sont selon moi :

  • StackEdit, comprenant de nombreuses fonctionnalités très utiles.

  • Dilinger, pour une utilisation simple et intuitive.

Hors-ligne 

Pour des travaux réguliers et de projets importants, il est préférable d’utiliser des éditeurs hors-ligne, comprenant plus de fonctionnalités, et utilisables sans être connecté à internet. Les plus recommandables, tout en étant gratuits, sont :

  • Typora, fonctionnel sous mac OS, Linux, Windows, permettant une concentration maximale grâce à son design simple, minimaliste et épuré, et à sa fonction de saisie semi-automatique. Il est de loin le plus agréable esthétiquement et à proprement parler à mon avis.

  • Laverna, pour mac OS, Linux ou bien Windows, au concept open source, est très attrayant de par son cryptage paramétrable, et son utilité quant aux envois de fichiers importants.

Il reste tout de même possible d’ouvrir et d’éditer des fichiers markdown avec n’importe quel éditeur de code ou éditeur textuel, mais vous serez alors privés de la coloration syntaxique et de la prévisualisation en temps réel de ce que vous êtes en train d’écrire.
De plus, pour écrire vos mail et les formater convenablement (en HTML techniquement), il est préférable d’utiliser une extension disponible sur Chrome, Firefox et Safari ; Mardown Here (qui fonctionne aussi dans les interfaces d’éditions web Evernote et WordPress).

La syntaxe de Markdown

Pour pouvoir utiliser ce langage, développé en 2004 par le programmeur américain John Gruber et Aaron Swartz, il vous faut connaître les bases de la syntaxe, et donc ses fonctions principales. 
Les balises sont très proches de leurs réelles significations, et donc très intuitives.
Pour les exemples en image, j’utiliserai StackEdit, afin de mettre en exergue les deux parties distinctes, sauf indications contraires.

Les paragraphes

Commençons par le plus élémentaire, les paragraphes, insérables grâce à une ligne vierge (saut de deux lignes, un seul correspondant à un retour chariot).

Les en-têtes

Pour faire des titres de partie, il suffit d’utiliser les caractères hash (#), de 1 à 6 en début de ligne. Ceux-ci correspondent aux niveaux des en-têtes, du 1, le plus grand, au 6.

L’emphase

Pour mettre en relief un mot, ou un texte, il vous suffit d’entourer le mot entreRetour ligne automatique
des étoiles (*), une pour l’italique, qui est une emphase faible, et deux pour le gras, étant une emphase forte. Pour combiner les deux, il vous suffit d’encadrer avec cette fois-ci trois étoiles. Retour ligne automatique
Aussi, pour barrer un texte, il vous faudra entourer le mot avec un double tilde.

Les listes

En markdown, il est possible de faire 3 types de listes ; les listes à puces, numérotées et cochées.Retour ligne automatique
Pour établir une liste simple, il suffit de mettre une étoile (*), un tiret (-) ou un plus (+) devant, les trois étant équivalents.

Pour créer une liste numérotée, il vous faut introduire un chiffre suivi d’un point.

Pour éditer une liste de tâches, mettez des éléments [ ] ou [x], incomplets ou complets. N’oubliez pas de laisser un espace entre les crochets vides, auquel cas votre liste ne sera pas identifiée comme telle (selon l’éditeur, il vous faudra rajouter des tirets devant).

Les citations

Pour générer un texte en citation, vous devrez utiliser le chevron supérieur (>). Pour pouvez soit le faire précéder chaque ligne, soit en insérer un au début du paragraphe et un à la fin. Selon l’éditeur, il n’est pas nécessaire d’en rajouter à la fin, les sauts de ligne suffisent.

Les codes

Pour écrire un bloc de code, soit vous indentez de 4 espaces (ou une tabulation), ou vous mettez votre bloc entre trois apostrophes inversées (« `) au début et à la fin.

Sur typora, vous pouvez sélectionner le langage en bas à droite, permettant ainsi d’avoir des couleurs associées aux variables (ce qui est beaucoup plus esthétique).

Si vous voulez écrire un bout de code au milieu d’un paragraphe, entourez le avec une apostrophe inversée.

Les liens

Pour créer un lien, vous devez placer le texte du lien entre crochets suivis de l’URL entre parenthèses.

Les images

Les images s’insèrent de la même manière que des liens, seulement, il faut rajouter un point d’exclamation devant le premier crochet, comme dans l’exemple ci-dessous, édité sur typora.

Il existe encore de nombreux éléments de syntaxe (surligner, tableaux, indice, mathématiques…), si vous voulez plus d’informations et ainsi compléter la documentation, vous pouvez vous rendre directement sur le support de typora.

Conclusion

Le Markdown sert donc à générer du contenu web correctement mis en forme, sans avoir à connaître le HTML. La syntaxe est ainsi d’une simplicité déconcertante, n’étant composée que d’éléments de ponctuation soigneusement choisis afin d’être analogues à ce qu’ils signifient. Ce langage épuré et léger tient son appellation d’un jeu de mot avec markup languages, insistant bien sur le fait que c’est un langage réduit, et un outil complémentaire (html du pauvre).
Voilà, vous pouvez maintenant vous servir du Markdown pour rédiger vos notes proprement, en faire une page web, envoyer des messages ou répondre sur des forums, ou bien même écrire des documentations complètes pour un projet ou un jeu de données.

Tutoriels

Brute force le mot de passe d’un fichier PDF

Mot de passe oublié ? Pas de problème ! Avec ce tutoriel vous saurez comment craquer les mots de passe de vos fichiers PDF en utilisant John The Ripper.

L’auteur de ce tutoriel décline toute responsabilité quant à une utilisation malveillante ou illégale des logiciels présentés. Les informations et liens dans ce tutoriel ont un objectif purement documentaire. Vous n’avez donc pas le droit de pirater la NASA.

Introduction

Dans ce tutoriel nous allons vous montrer comment retrouver le mot de passe d’un de vos fichiers en utilisant le logiciel John The Ripper et la méthode Brute force. Le principe de cette méthode est de trouver le hash du mot de passe pour ensuite tester toutes les possibilités. Nous utiliserons le système d’exploitation Kali Linux pour faciliter l’utilisation du logiciel.

Qu’est-ce qu’une attaque par Brute Force  ?
Une attaque par force brute consiste à trouver un mot de passe en testant toutes les combinaisons possibles. Cette méthode peut être optimisée en utilisant un dictionnaire de mots de passe couramment utilisés.

Qu’est-ce que le hash d’un mot de passe  ?
Le « hachage » des mots de passe est l’approche courante pour stocker les mots de passe en toute sécurité. Un « Hash » est une fonction unidirectionnelle qui génère une représentation brouillée du mot de passe.

Qu’est-ce que John The Ripper  ?

John the Ripper est un outil de craquage de mots de passe initialement produit pour les systèmes UNIX. Il a été conçu pour tester la puissance des mots de passe en les piratant par force brute via des attaques par dictionnaire.

Qu’est-ce que Kali Linux  ?

Kali Linux est une distribution de Linux basée sur Debian qui intègre de nombreux logiciels de sécurité tels que John The Ripper et Crunch.

Avant de commencer

Certaines lignes de commandes utilisées dans ce tutoriel vont être différentes des vôtre car chaque fichier détient un chemin d’accès différent.Retour ligne automatique
Pour trouver le chemin d’accès d’un fichier PDF il faut ouvrir l’invite de commande et copier coller ceci :

find -iname '*.pdf'

Pour un fichier hash :

find -iname '*.hash'

Installer John The Ripper

  • Munissez-vous d’un ordinateur avec le système d’exploitation Linux (préférablement Kali)
  • Ouvrir l’invite de commande (en anglais Terminal emulator) en faisant clic droit sur le bureau
  • Obtenir le code source de JohnTheRipper à partir de GitHub :
git clone https://github.com/magnumripper/JohnTheRipper.git
  • Allez sur le repertoire du code source :
cd ./JohnTheRipper/src
  • Téléchargez les paquets (l’invite de commande demandera votre mot de passe)
sudo apt-get update
  • La bibliothèque nécessite que libssl soit installé sur votre système, donc si vous ne l’avez pas, la commande suivante fera l’affaire. L’invite de commande demandera si vous voulez continuer faite Yet entrer.
sudo apt-get install libssl-dev
  • Créez JohnTheRipper (L’invite de commande va afficher beaucoup de code mais n’ayez pas peur) :
./configure && make
  • À la fin il devrait y avoir ça :
  • Changez de repertoire :
cd ..
cd ./run
  • Pour voir tous les outils à votre disposition
ls
  • Dans ce tutoriel nous allons nous servir de john et de pdf2john.pl

Cracker le mot de passe d’un fichier PDF

Dans cet exemple nous trouverons le mot de passe du fichier secrets_NASA.pdf.
Nous devons donc d’abord créer le fichier où se trouvera notre hash. Pour le faire, nous utiliserons l’outil pdf2john.pl.

  • Pour se servir du script pdf2john.pl il faut changer de répertoire
cd
cd ./JohnTheRipper/run
  • On va maintenant créer le fichier qui contiendra notre hash. Ici nous l’appellerons pdf.hash
./pdf2john.pl /home/kali/Desktop/secrets_NASA.pdf > /home/kali/Desktop/pdf.hash
  • IMPORTANT : Cette ligne de commande dépend de là où se trouve votre fichier pdf et de son nom. Le fichier .hash sera créé sur le bureau.
  • Votre fichier .hash doit contenir du texte qui ressemble à celui-ci :
/home/kali/Desktop/secrets_NASA.pdf:$pdf$5*6*256*-1028*1*16*99c547e71b94ed6627049e59a8e3dc31*127*cf26191dedb165d9e981b1f8791d0cafafa7b6e047e9fc8d21939e2684d7ca26fe974f2b5354a2efc23c47a5eb3fb02100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*127*178bb52b973b98a3521dfb09c0bf4d5246c134a1cd220ca21987b7f27aab03e9386799a8b50486a84c7d872b4bd7f50200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*32*9c313637923dae80aba21d130acb24ba422e678d45796940ba1765ef769f366b*32*b5aaf1f92a18fe49023fe2c7a2c9fb1fe92497514e6b15b9c0f7b44cba9d23e5
  • Maintenant que nous avons le fichier .hash du pdf il suffit d’utiliser le CLIde John The Ripper (dans le répertoire d’exécution) :
cd
cd ./JohnTheRipper/run
./john /home/kali/Desktop/pdf.hash

IMPORTANT : Encore une fois Cette ligne de commande dépend de là où se trouve votre fichier .hash 

Cette méthode utilisera UTF-8 comme encodage d’entrée par défaut et commencera à deviner le mot de passe du fichier PDF en utilisant la liste de mots par défaut de la bibliothèque. S’il est trouvé, il affichera le mot de passe et le chemin d’accès du PDF protégé. 

Le mot de passe affiché est abc123

  • Comme vous pouvez voir dans ce GIF c’est le bon mot de passe
kazam_npyl0z0x.movie.gif
  • Si vous essayez d’exécuter la commande sur le même fichier après avoir deviné le mot de passe, vous verrez les messages suivants :
  • Vous pouvez voir vos mots de passe en faisant :
john --show /root/Desktop/pdf.hash
  • IMPORTANT : Cette ligne de commande dépends de là où se trouve votre fichier hash et de son nom.
  • Ici, notre mot de passe a été cracker en 5 millisecondes. Un mot de passe compliqué et long met beaucoup plus de temps à être déchiffré.

Temps qu’il faut pour déchiffrer un mot de passe 

Nombre de caractères Que des nombres Que des lettres minuscules Que des lettres majuscules Lettres minuscules et majuscules Nombres, lettres minuscules et majuscules 
5instantanéinstantanéinstantanéinstantanéinstantané
6instantanéinstantanéinstantané1 seconde5 secondes
7instantanéinstantané25 secondes1 minute6 minutes
8instantané5 secondes22 minutes1 heure9 heures
9instantané2 minutes19 heures3 jours3 semaines
10instantané58 minutes1 mois7 mois5ans

Utiliser des listes de mots de passe personnalisés

  • Si vous ne souhaitez pas utiliser le fichier password.lst par défaut de JohnTheRipper, spécifiez simplement le chemin d’accès du nouveau fichier à l’aide de l’argument —wordlist. Voici un exemple avec une liste de mot de passe nommé pass.lst
cd
cd ./JohnTheRipper/run
./john --wordlist=pass.lst pdf.hash
  • Vous pouvez générer des listes de mots de passe grâce à des logiciels comme Crunch qui est déjà préinstallé sur Kali Linux et qui se trouve en haut à gauche dans l’onglet password attacks
  • Double cliquez sur Crunch
  • Dans cet exemple nous allons créer toutes les possibilités de mot de passe de longueur 1 – 6 avec les caractères 123abc et les mettre dans un fichier qu’on nomme pass.ls
crunch 0 6 123abc /home/kali/Desktop/pass.ls
  • Beaucoup de mots de passe vont être générés, Il faut donc se méfier de l’espace utilisé pour les stocker. Votre disque dur peut être vite rempli si vous générez trop de permutations.

Conclusion

Ainsi, plus votre mot de passe est complexe, plus il offre de sécurité. N’oubliez pas que les mots de passe sont les clés de vos informations sensibles que vous ne voulez pas vous faire voler. Comme vous le comprenez, les enjeux sont très importants. Retour ligne automatique
Un bon mot de passe ne contient pas :

  • Toute combinaison évidente telle que 12345 ou vos informations personnelles
  • Toute chaîne de caractères avec des chiffres ou des lettres séquentiels
  • Des mots du dictionnaire
Projets

Une brève navigation dans l’espace sur python

Naviguez au cœur du système solaire, et découvrez les caractéristiques de chaque planètes qui le composent, soit, la période de révolution, la distance au soleil, la masse, le rayon et enfin les satellites connus (leur nombre) …

Ce projet est un programme réalisé sur python permettant de naviguer dans l’espace, et plus précisément dans notre système solaire. Il permet de découvrir les caractéristiques des planètes qui le compose, soit, la période de révolution, la distance au soleil, la masse, le rayon et enfin les satellites connus (nombre). Ce programme a été developpé sur omega et peut être téléchargeable sur la calculatrice Numworks via les liens hypertextes en bas de l’article.

Difficultés rencontrées…

À la genèse de notre projet, nous fûmes légèrement idéaliste quant à nos capacités, et à celles de la calculatrice ; nous voulions créer une animation, tel un court-métrage, avec l’histoire du big bang se déroulant sous nos yeux ébahis, puis la galaxie, et enfin atterrir dans notre système solaire, qui aurait été animé… Après un dur retour à la réalité, nous nous sommes accordées pour simplifier notre concept originel. Malgré avoir réalisé une deuxième couche graphique composée d’un trou noir ; Saggitarius A*, au centre de notre galaxie, et du système solaire, nous n’avons pu l’insérer dans le code initial.

Comment tout a commencé…

Notre programme a été conçu en deux grandes phases :

  • la couche graphique
  • l’interaction

La couche graphique

Premièrement, il a fallu tracer des cercles pour retrouver la forme des planètes, et insérer des dégradés afin de s’approcher au plus des couleurs initiales, en adoptant les modules mathkandinsky et random.Retour ligne automatique
Cette image a été le pilier de la création du fond graphique :

Pour ce faire, du à nos faibles connaissances en python, nous sommes allées nous renseigner auprès du célèbre Philippe Moutou.

def cercle(x0,y0,r,c,e):# fonction pour tracer contour du cercle
 for i in range(2*e):
   xd=x0-int((r-i*0.5)/sqrt(2))
   xf=x0+int((r-i*0.5)/sqrt(2))
   for x in range(xd,xf+1):
     x1=x
     y1=y0+int(sqrt((r-i*0.5)**2-(x-x0)**2))
     set_pixel(x,y1,c)
     for j in range(3):
       x2=x0+y1-y0
       y2=y0+x0-x1
       set_pixel(x2,y2,c)
       x1,y1=x2,y2
 
def cercle_plein(x0,y0,r,c1,e,c2): #remplir le cercle
 cercle(x0,y0,r,c1,e)
 cercle(x0,y0,r-e,c2,r-e)
 
def cercle_grade(x0,y0,R,c1,e,c2):#faire un dégradé de couleur
 for i in range(R):
   r=c1[0]+i*(c2[0]-c1[0])//R
   g=c1[1]+i*(c2[1]-c1[1])//R
   b=c1[2]+i*(c2[2]-c1[2])//R
   cercle(x0,y0,i,color(r,g,b),1)

Grâce à son génie, nous n’avons eu qu’à changer couleurs, rayons ou encore coordonnées dans les diverses fonctions, et créer des listes pour regrouper les différents globes, soit neuf au total en comptant l’astre qui nous fournit en énergie. Pour trouver les couleurs appropriées, nous nous sommes servies de code couleur html, afin de concevoir le plus précisément possible les textures.

Voici un exemple d’appel de fonction, qui a été fait pour chaque planète, et mis dans une liste pour simplifier le code :

cExt=[251,136,7]
cInt= [106,73,32]
cercle_grade(197,95,8,cExt,10,cInt)

Ensuite nous sommes passées à la conception du fond étoilé avec toujours l’aide de notre cher Moutou :

def degrade(c1,c2,k):
 dr=c2[0]-c1[0]
 dg=c2[1]-c1[1]
 db=c2[2]-c1[2]
 return color(c1[0]+int(k*dr),c1[1]+int(k*dg),c1[2]+int(k*db))
 
def tirage(n):
 for i in range(n):
   x=randint(0,320)
   y=randint(0,222)
   c=couleur(x,y)
   set_pixel(x,y,c)
   set_pixel(x+1,y,c)
   set_pixel(x,y+1,c)
   set_pixel(x+1,y+1,c)
 
def couleur(x,y):
 d=sqrt((x-160)**2+(y-111)**2)/32.5
 return degrade(c[int(d)],c[(int(d)+1)%6],d-int(d))

Il nous a suffit de changer les couleurs pour faire un magnifique dégradé galactique, et effectuer un tirage non exhaustif afin de révéler des points blancs.

c=[[235,128,0],[13,89,175],[13,89,175],[44,122,211],[207,230,230],[207,230,230]]
tirage(250)

Pour afficher les anneaux blancs qui représentent l’orbite de chaque planète, rien de plus simple, il suffit d’appeler la fonction traçant le contour d’un cercle.

Etant donné qu’il y a 8 planètes on se sert de la variable for in range :

c_blanc=[119,135,135]
r_orb = [22,32,42,52,62,76,92,109]
for i in range(8):
   cercle(160,111,r_orb[i],c_blanc,1)

Bien évidemment cet appel de fonction doit se faire après celui du fond étoilé, mais avant celui des planètes, pour que tout se superpose parfaitement.

Voici le résultat escompté après de maints efforts :

L’interactivité :

Méconnus du grand public, les modules time et ion ont été le support de cette interaction, utilisée pour naviguer entre les diverses planètes, grâce aux flèches du keyboard, numérotées de 0 à 3. En effet, grâce au getkey, disponible sur omega, qui est la capacité de la calculatrice à détecter si une touche est pressée, le déplacement devient envisageable.

Après plusieurs essais désastreux pour cette tâche plus complexe, nous avons chercher de l’aide auprès d’une source externe ; un grand mage.

Nous avons alors pu avoir accès à un fragment d’un de ses sortilèges que nous avons dû comprendre de nous même pour la suite de notre programme.

On définit tout d’abord dans une liste toutes les caractéristiques des planètes étudiées :

systeme = [ ("Soleil",'centre du sytème solaire','dis soleil: 0','masse: 1,989 × 10^30 kg','rayon: 696340 km', 'satellites connus: 0'),
           ("Venus",'periode de revo: 225 jours','dis soleil: 104 millions km','masse: 4,867 × 10^24 kg','rayon: 6051.8 km', 'satellites connus: 0'),
           #etc pour toutes les planètes
           ]
 
coord = [(160,111,16), (185,95,8)#etc...]
couleur1 = [[255,255,0], [190,183,150]#etc...]
couleur2 = [[235,128,0], [121,104,83]#etc...]

Ensuite on crée une fonction qui permet de tracer un rond blanc à la place de l’astre choisi lorsque degrade n’est pas égal à 1 (égal à un de base), sinon les astres restent tel quel.

def solar_systeme_dessine(n, degrade=1):
 # Affiche un corps du sytème solaire, numéro du corps dans systeme[], degradé
 p = 2 + 9 * (n != 0)
 if degrade == 1:
   cercle_grade(coord[n][0], coord[n][1], coord[n][2], couleur1[n], p, couleur2[n])
 else:
   cercle_grade(coord[n][0], coord[n][1], coord[n][2], [255,255,255], p, [255,255,255])

Avec l’ajout d’un code pour définir les touches et leur mouvement, ainsi qu’un autre pour afficher le texte voulu, on peut désormais naviguer entre les différents astres et voir leurs caractéristiques !

Conclusion

Pour pouvoir profiter du système solaire, il vous faudra donc télécharger le code via le lien en bas de page, et manipuler les flèches pour vous déportez sur les diverses planètes. Pour afficher les informations liées à chaque globe, vous manipulerez les flèches du haut et du bas. 
Bon exode planétaire !

La prochaine fois que quelqu’un se plaint que vous avez fait une erreur, dites-lui que c’est peut-être une bonne chose. Parce que sans imperfections, ni toi ni moi n’existerions.
Stephen Hawking

Télécharger et tester

Serveur Workshop de NumWorks tiplanet.org nsi.xyz 
RemarquesPermet un téléchargement rapide sur la calculatriceTéléchargement .pyTéléchargement .zip
Liens hypertexteslienNumWorks > Physique > Lien