Author: 1ère spé NSI 2019 - 2020

Projets

Convertisseur de distances

Ce projet a été réalisé par des élèves en spécialité NSI du Lycée Louis Pasteur. Ils sont également les auteurs de ce compte rendu. Pour en savoir plus : Les projets en spécialité NSI

Présentation

Ce projet a été réaliser par Chausi Ursuegui T. et Cymbler N. en classe de première G3 dans le cadre de leur enseignement de spécialité NSI (numérique et sciences de l’informatique), au lycée Louis Pasteur à Avignon .
Avec comme matériel un ordinateur équipé du logiciel Thonny.

Descriptif du projet

Ce projet est un programme écrit en Python qui sert dans plusieurs domaine à convertir n’importe quelle distance allant du Pico mètre jusqu’au Téra mètre. Nous avons décider de faire ce programme car de nombreux étudiants de tout âge rencontre ce problème particulièrement en physique chimie .

Notre programme

d = int(input("Indiquez la distance: "))
print("pm / nm / µm / mm / cm / dm / m / dam / km / hm / M / G / T")
u_d = input("Indiquez l'unité de départ: ")
print("pm / nm / µm / mm / cm / dm / m / dam / km / hm / M / G / T")
 
if u_d =="Tm":
    d_Tm = d
    d_Gm = d * 1000
    d_Mm = d *1000000
    d_km = d * 1000000000
    d_hm = d * 10000000000
    d_dam = d * 100000000000
    d_m = d * 1000000000000
    d_dm = d * 10000000000000
    d_cm = d * 100000000000000
    d_mm = d * 1000000000000000
    d_µm = d * 1000000000000000000
    d_nm = d * 1000000000000000000000
    d_pm = d * 1000000000000000000000000
 
if u_d =="Gm":
    d_Tm = d / 1000
    d_Gm = d
    d_Mm = d * 1000
    d_km = d * 1000000
    d_hm = d * 10000000
    d_dam = d * 100000000
    d_m = d * 1000000000
    d_dm = d * 10000000000
    d_cm = d * 100000000000
    d_mm = d * 1000000000000
    d_µm = d * 1000000000000000
    d_nm = d * 1000000000000000000
    d_pm = d * 1000000000000000000000
 
if u_d =="Mm":
    d_Tm = d / 1000000
    d_Gm = d / 1000
    d_Mm = d
    d_km = d * 1000
    d_hm = d * 10000
    d_dam = d * 100000
    d_m = d * 1000000
    d_dm = d * 10000000
    d_cm = d * 100000000
    d_mm = d * 1000000000
    d_µm = d * 1000000000000
    d_nm = d * 1000000000000000
    d_pm = d * 1000000000000000000
 
if u_d =="km":
    d_Tm = d / 1000000000
    d_Gm = d / 1000000
    d_Mm = d / 1000
    d_km = d
    d_hm = d * 10
    d_dam = d * 100
    d_m = d * 1000
    d_dm = d * 10000
    d_cm = d * 100000
    d_mm = d * 1000000
    d_µm = d * 1000000000
    d_nm = d * 1000000000000
    d_pm = d * 1000000000000000
 
if u_d =="hm":
    d_Tm = d / 10000000000
    d_Gm = d / 10000000
    d_Mm = d / 10000
    d_km = d / 10
    d_hm = d
    d_dam = d * 10
    d_m = d * 100
    d_dm = d * 1000
    d_cm = d * 10000
    d_mm = d * 100000
    d_µm = d * 100000000
    d_nm = d * 100000000000
    d_pm = d * 100000000000000
 
if u_d =="dam":
    d_Tm = d / 100000000000
    d_Gm = d / 100000000
    d_Mm = d / 100000
    d_km = d / 100
    d_hm = d / 10
    d_dam = d
    d_m = d * 10
    d_dm = d * 100
    d_cm = d * 1000
    d_mm = d * 10000
    d_µm = d * 10000000
    d_nm = d * 10000000000
    d_pm = d * 10000000000000
 
if u_d =="m":
    d_Tm = d / 1000000000000
    d_Gm = d / 1000000000
    d_Mm = d / 1000000
    d_km = d / 1000
    d_hm = d / 100
    d_dam = d / 10
    d_m = d
    d_dm = d * 10
    d_cm = d * 100
    d_mm = d * 1000
    d_µm = d * 1000000
    d_nm = d * 1000000000
    d_pm = d * 1000000000000
 
if u_d =="dm":
    d_Tm = d / 10000000000000
    d_Gm = d / 10000000000
    d_Mm = d / 10000000
    d_km = d / 10000
    d_hm = d / 1000
    d_dam = d / 100
    d_m = d / 10
    d_dm = d
    d_cm = d * 10
    d_mm = d * 100
    d_µm = d * 100000
    d_nm = d * 100000000
    d_pm = d * 100000000000
 
if u_d =="cm":
    d_Tm = d / 100000000000000
    d_Gm = d / 100000000000
    d_Mm = d / 100000000
    d_km = d / 100000
    d_hm = d / 10000
    d_dam = d / 1000
    d_m = d / 100
    d_dm = d / 10
    d_cm = d
    d_mm = d * 10
    d_µm = d * 10000
    d_nm = d * 10000000
    d_pm = d * 10000000000
 
if u_d =="mm":
    d_Tm = d / 1000000000000000
    d_Gm = d / 1000000000000
    d_Mm = d / 1000000000
    d_km = d / 1000000
    d_hm = d / 100000
    d_dam = d / 10000
    d_m = d / 1000
    d_dm = d / 100
    d_cm = d / 10
    d_mm = d
    d_µm = d * 1000
    d_nm = d * 1000000
    d_pm = d * 1000000000
 
if u_d =="µm":
    d_Tm = d / 1000000000000000000
    d_Gm = d / 1000000000000000
    d_Mm = d / 1000000000000
    d_km = d / 1000000000
    d_hm = d / 100000000
    d_dam = d / 10000000
    d_m = d / 1000000
    d_dm = d / 100000
    d_cm = d / 10000
    d_mm = d / 1000
    d_µm = d
    d_nm = d * 1000
    d_pm = d * 1000000
 
if u_d =="nm":
    d_Tm = d / 1000000000000000000000
    d_Gm = d / 1000000000000000000
    d_Mm = d / 1000000000000000
    d_km = d / 1000000000000
    d_hm = d / 100000000000
    d_dam = d / 10000000000
    d_m = d / 1000000000
    d_dm = d / 100000000
    d_cm = d / 10000000
    d_mm = d / 1000000
    d_µm = d / 1000
    d_nm = d
    d_pm = d * 1000
 
if u_d =="pm":
    d_Tm = d / 1000000000000000000000000
    d_Gm = d / 1000000000000000000000
    d_Mm = d / 1000000000000000000
    d_km = d / 1000000000000000
    d_hm = d / 100000000000000
    d_dam = d / 10000000000000
    d_m = d / 1000000000000
    d_dm = d / 100000000000
    d_cm = d / 10000000000
    d_mm = d / 1000000000
    d_µm = d / 1000000
    d_nm = d / 1000
    d_pm = d
 
u_a = input("Indiquez l'unité d'arrivée: ")
 
if u_a=="Tm":
    print("La distance en Tm est %.2f Tm." % d_Tm)
 
if u_a=="Gm":
    print("La distance en Gm est %.2f Gm." % d_Gm)
 
if u_a=="Mm":
    print("La distance en Mm est %.2f Mm." % d_Mm)
 
if u_a=="km":
    print("La distance en km est %.2f km." % d_km)
 
if u_a=="hm":
    print("La distance en hm est %.2f hm." % d_hm)
 
if u_a=="dam":
    print("La distance en dam est %.2f dam." % d_dam)
 
if u_a=="m":
    print("La distance en m est %.2f m." % d_m)
 
if u_a=="dm":
    print("La distance en dm est %.2f dm." % d_dm)
 
if u_a=="cm":
    print("La distance en cm est %.2f cm." % d_cm)
 
if u_a=="mm":
    print("La distance en mm est %.2f mm." % d_mm)
 
if u_a=="µm":
    print("La distance en µm est %.2f µm." % d_µm)
 
if u_a=="nm":
    print("La distance en nm est %.2f nm." % d_nm)
 
if u_a=="pm":
    print("La distance en pm est %.2f pm." % d_pm)

Description du programme

Voici la première version de notre programme alors nous avons détailler les calcul pour chaque conversions (de m en mm , de km en hm …)et nous avons a la fin écrit une phrases de réponse pour touts les résultats en donnant l’unité donné par l’utilisateur et le résulta demandé .

Fonctionnement du du programme

1-Indiquer le distance a convertir
2-Donner l’unité de départ
3-Donner l’unité d’arrivé
4-Vous avez le résultat

Une version améliorée

Notre programme

d = float(input("Indiquez la distance: "))
print("pm = 0\tnm = 1\tµm = 2\tmm = 3\tcm = 4\tdm = 5\tm = 6\tdam = 7\thm = 8\tkm = 9\tMm = 10\nGm = 11\tTm = 12")
u_d = int(input("Indiquez l'unité de départ: "))
u_a = int(input("Indiquez l'unité d'arrivée: "))
{exposant = [10**-12,10**-9,10**-6,10**-3,10**-2,10**-1,10**0,10**1,10**2,10**3,10**6,10**9,10**12]
prefixe = ["pm","nm","µm","mm","cm","dm","m","dam","hm","km","Mm","Gm","Tm"]}
d_c = d * exposant[u_d] / exposant[u_a]
print(d_c,prefixe[u_a])

Explication du programme

Après avoir fini la version 1 ont a trouvé que c’était beaucoup trop long et nous avons donc voulu le raccourcir .
Ont a donc chercher un moyen et nous avons trouve l’utilité des listes

exposant = [10**-12,10**-9,10**-6,10**-3,10**-2,10**-1,10**0,10**1,10**2,10**3,10**6,10**9,10**12]
prefixe = [« pm », »nm », »µm », »mm », »cm », »dm », »m », »dam », »hm », »km », »Mm », »Gm », »Tm »]

qui regroupe touts les calcul qu’il permette de faire la conversion de distance, et que l’on peut voir dans la version 1. Par contre même si nous sommes passer de 220 lignes a 8 lignes les possibilité sont les même ainsi que le fonctionnement . Nous avons décidé de remplacer int par float pour que vous puissiez convertir des décimaux .

Conclusion

J’espère que notre programme vous aidera pour toute vos conversions.
Si vous voulez vous pouvez le récupéré et rajouter d’autres unités de votre choix si vous vous en sentez capable.

DS

Correction du sujet n°42 de la BNS des E3C…

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. Annulée en 2020, les E3C ont été renommées EC en 2021 et également annulées.

Les sujets des années précédentes sont publics

Parmi ces 51 sujets de 42 questions, nous vous proposons la correction du sujet n°42. 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.
Chaque sujet comporte donc 42 questions. (Pourquoi 42 ? Il faut faire spé NSI pour comprendre )

Modalités pratiques

L’épreuve consiste en 42 questions, rangées en 7 thèmes. Le candidat :

  • gagne 3 points s’il choisit la bonne réponse, 
  • perd 1 point s’il choisit une réponse fausse,
  • ne gagne ni ne perd aucun point s’il ne répond pas ou choisit plusieurs réponses.

Le total sur chacun des 7 thèmes est ramené à 0 s’il est négatif.

La note finale s’obtient en divisant le total des points par 6,3 et en arrondissant à l’entier supérieur.

Thème A : types de base

Question A.1

Olivier visite son site préféré pour relire le programme de NSI.
Il devrait lire le texte ci-dessous :

L’enseignement de spécialité de numérique et sciences informatiques du cycle terminal de la voieRetour ligne automatique
générale vise l’appropriation des fondements de l’informatique pour préparer les élèves à uneRetour ligne automatique
poursuite d’études dans l’enseignement supérieur, en les formant à la pratique d’une démarcheRetour ligne automatique
scientifique et en développant leur appétence pour des activités de recherche.

Le paramétrage de son navigateur lui donne l’affichage ci-dessous :

L’enseignement de spécialité de numérique et sciences informatiques du cycle terminalRetour ligne automatique
de la voie générale vise l’appropriation des fondements de l’informatique pourRetour ligne automatique
préparer les élèves à une poursuite d’études dans l’enseignement supérieur, enRetour ligne automatique
les formant à la pratique d’une démarche scientifique et en développant leur appétenceRetour ligne automatique
pour des activités de recherche.

Quel type d’encodage Olivier doit-il choisir dans les paramètres de son navigateur pour afficher correctement le texte ?

Réponses

A ANSI
B LATIN-1
C UTF-8
D ASCII

Correction : Réponse C

L’auteur de cette question travaillait peut-être à l’Agence Nationale de la Sécurité des Systèmes d’Information (ANSI), il surement du au préalable étudier le codage ASCII qui date de 1963 et ne concerne donc pas le codage des caractères d’une page web. Seul les standards ISO 8859-1 (autre nom de LATIN-1) ou UTF-8 sont utilisés sur le web. C’est désormais en UTF-8 que sont désormais codés les pages web.

Question A.2

Quel est le nombre maximal de bits du produit de deux entiers positifs codés sur 8 bits ?

Réponses

A 8
B 16
C 32
D 64

Correction : Réponse B

Sachant que sur le maximum codé peut être de 8, 8 x 8 = 64. Ingenious ?
Sur 8 bits, le plus grand entier en base 10 est 2^8-1 = 255.
255 x 255 = 65 025‬
Sur 16 bits, le plus grand entier en base 10 est 2^16-1 = 65 535
Ainsi, 16 bits suffiront.

Question A.3

À quelle affectation sont équivalentes les instructions suivantes, où a, b sont des variables entières et c une
variable booléenne ?

c = False
if a==b:
c = True
if a > b+10:
c = True

Réponses

c = (a==b) or (a > b+10)
c = (a==b) and (a > b+10)
c = not(a==b)
c = not(a > b+10)

Correction : Réponse A

Car si a est égal à b, alors le booléen c devient True et si a est supérieur à b+10, le booléen c devient également True. Or ces deux conditions ne sont pas dépendent l’une de l’autre, de plus la porte or est true si les deux condition sont vrai mais si l’une des deux devient fausse, le booléen aussi.

Question A.4

Quelle est la représentation binaire de l’entier 152 ?

Réponses

A 0001 1001
B 0011 1010
C 0100 0100
D 1001 1000

Correction : Réponse D

Le premier 1 vaut 128, vous enlevez donc 128 à 152, il vous reste donc 24, ensuite il y a 64 et 32 qui sont 0, ensuit un 1 qui vaut 16, 24 – 16 = 8. Pile la valeur du 3ème 1 : magique non ?

Question A.5

Soient P et Q deux formules logiques telles que P est vraie et Q est fausse. Quelle est la valeur de l’expression (P ET Q) OU (NON(P) OU Q) ?

Réponses

A vraie
B fausse
C ni vraie, ni fausse
D vraie et fausse en même temps

Correction : Réponse B

Ici et P est donc True et Q est False, or la premiere porte ET prend le « plus fort », donc False car si l’un des deux est False l’ensemble aussi, pour la troisième porte qui est OU, elle prend le False comme plus fort et comme NON(P) est False, alors l’ensemble aussi. La deuxième porte qui est OU on refait le même raisonnement. CQFD.

Question A.6

On rappelle que le nombre entier 12 s’écrit 1100 en base 2. Quelle est le codage en complément à 2 sur un octet du nombre entier −12 ?

Réponses

A -0000 1100
B 1000 1100
C 1111 0100
D 1111 0011

Correction : Réponse C

Ici nous pouvons déjà supprimer A car l’ordinateur ne comprend pas les -… Pour un nombre négatif, nous devons placer un 1 en première positions (à gauche pour les lecteurs de manga), nous pouvons également supprimer D car le dernier 1 signifie que c’est un nombre impaire. Il nous reste B et C 
Il est d’ailleurs conseillé par vos professeurs de NSI d’apprendre par coeur les entiers compris entre [-127 ; 127] en binaire pour l’examen de fin d’année.
Si vous ne les avez pas appris, il suffit d’appliquer la méthode : 
0000 1100 = 12
1111 0011 On inverse les bits
1111 0100 Plus 1 !

Thème B : types construits

Question B.1

On considère le code suivant :
D = ["a" : "1", "2" : "a", "b" : "a", "c" : "3"]
Que vaut D["a"] à la fin de l’exécution ?

Réponses

"1"
2
["2", "b"]
["1", "3"]

Correction : Réponse A

ici nous faisons une recherche dans le tableau grâce à la clé « a » qui est associé à « 1 ».

Question B.2
Quelle expression Python a pour valeur la liste [1,3,5,7,9,11] ?
Réponses
 
[2*i - 1 for i in range(6)]
[2*i + 1 for i in range(6)]
[2*i + 1 for i in range(5)]
[2*i - 1 for i in range(7)]
 
Correction : Réponse B
 
Question sérieuse ! On génère un tableau contenant 6 valeurs, données par 2*i + 1 avec i un entier entre 0 et 5 ! Oui oui, entre 0 et 5 il y a 6 valeurs.

Question B.3
 
On exécute l’instruction suivante :

T = [ [12,13,14,15], [24,25,26,27],[35,36,49,33], [61,53,55,58] ]

Quelle expression parmi les quatre suivantes a pour valeur 26 ?
 
Réponses
 
T[1][2]
T[2][1]
T[2][3]
T[3][2]
 
Correction : Réponse A
 
En premier temps nous cherchons la valeur 26 dans le tableau. Une fois trouvé, nous constatons qu’il se trouve dans le deuxième « sous tableau », et qu’il est en troisième position, comme la Croatie en 98… Or les tableau indexés commencent par le valeur 0, donc deuxième position devient la première et la troisième position devient 2ème, comme cette fois ci en 2018 pour nos Kockasti… la réponse est donc T[1][2].

Question B.4
 
Quelle expression permet d’accéder à la valeur 'hello' après qu’on a défini L = [['a','b','c'],['bonjour','hello']]
 
Réponses
 
L[5]
L[1][1]
L[2][2]
L['hello']
 
Correction : Réponse B
 
Idem question précédente, le « hello » – à prononcer absolument avec l’accent British sinon vous ne progresserez jamais en NSI – se trouve dans le deuxième tableau en deuxième position, sachant qu’il est indexé à partir de 0, l’expression pour retrouver « hello » est L[1][1].

Question B.5

On exécute le script suivant :

inventaire = {'pommes': 430, 'bananes': 312,
 'oranges' : 274, 'poires' : 137}
stock = 0
for fruit in inventaire.keys():
 if fruit != 'bananes':
 stock = stock + inventaire[fruit]

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

Réponses

{430, 274, 137}
312
841
{ 'pommes', 'oranges', 'poires' }

Correction : Réponse C

Dans le dictionnaire inventaire, le script va récupérer les valeurs, c’est a dire les éléments attitrés aux clés (soit ici 430, 312, 274 et 137). Il va ensuite les « analyser » une par une grâce à la boucle for. Si l’élément pris est différent (par l’opérateur != ) est différent de banane, il est stocké dans stock. Donc, dans les élément pris seul 312 n’et pas compté, en effet il correspond a la valeur banane (la légende dis que l’éducation nationale nous transmet grâce a ce script la véritable longueur de la coupe de cheveux du fameux Elvis Presley). On a donc, dans stock, l’addition de 430 + 274 + 137 = 42 (non je déconne ça fait bien 841 même si 42 est la réponse a tout).

Question B.6

On définit : T = [7*n for n in range(10)].
Quelle est la valeur de l’expression T[7] ?

Réponses

A 42
B 49
C 56
D 70

Correction : Réponse B

T va faire une simple multiplication (7*n) de n=0 à n=9 (for n inrange(10)). Donc quand T = T[7], n = 7 donc on a 7 * 7 = 49, soit le numéro du magnifique département de la Maine-et-Loire. Donc on était a 2 doigt d’avoir 42….Les créateur de ce QCM sont vraiment des tortionnaires !

Thème C : traitement de données en tables

Question C.1

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

Correction : Réponse B

Ici, il faut procéder par élimination. Comme le dirait un grand sage : « Ce soir, il n’en restera qu’un ! ». Donc je pense que nous sommes d’accord pour dire que ’Chloé’ n’est ni un champs (j’ai vu auprès d’agriculteurs pro et aucun ne donne de nom a ses champs, sauf une fois au chalet) ni un attribut. En effet ces 2 éléments ne peuvent pas se retrouver dans le dictionnaire contacts. La variable contacts possède donc des clés et des valeurs, comme tout les dictionnaire. Ça tombe bien, c’est les 2 réponses qu’il reste ! Or on voit ici que ’Chloé’ est bien une clé de la variable contacts, et par conséquent, si c’est un clé, ce n’est pas un valeur. Tout est bien qui finit bien. La réponse B a gagné Koh-Lanta.

Question C.2

Qu’est-ce que le format de fichier CSV ?

Réponses

A un format de fichier mis au point par Microsoft pour Excel
B un format de fichier pour décrire une base de données
C un format de fichier où les données sont séparées par un caractère tel qu’une virgule
D un format de fichier décrivant une page Web

Correction : Réponse C

Un fichier CSV signifie Comma-Separated Values (les bilingues ont déjà la réponse). Il est de type tableur et ses valeurs (pour ceux qui ne l’aurai pas deviné) sont séparés par une virgule.

Question C.3

On définit ainsi une liste t :

t = [ {'id':1, 'age':23, 'sejour':'PEKIN'},
 {'id':2, 'age':27, 'sejour':'ISTANBUL'},
 {'id':3, 'age':53, 'sejour':'LONDRES'},
 {'id':4, 'age':41, 'sejour':'ISTANBUL'},
 {'id':5, 'age':62, 'sejour':'RIO'},
 {'id':6, 'age':28, 'sejour':'ALGER'}]

Quelle expression vaut-elle ’RIO’ parmi les suivantes ?

Réponses

A t[4][’sejour’]
B t[5][’sejour’]
C t(’id’=5)
D t.[’id’=5].[’sejour’]

Correction : Réponse A

Ici nous avons affaire a une « matrice-dictionnaire » (il doit y avoir un nom et je pense que le prof va me le donner quand il va faire un AVC en lisant ceci). Ayant parfaitement suivi les cours de NSI vous saurez effectuer les code ci-dessus. Nous savons donc que si on met l’expression  t[5]['sejour'], cela va nous renvoyer ALGER, si on met  t('id'=5), votre estime envers Spyder va chuter gravement et ce dernier va vous sermonner d’un SyntaxError: keyword can't be an expression, si on rentre t.['id'=5].['sejour'] ,ça sera la même chose mais vous vous prendrez un sale SyntaxError: invalid syntax qui fait toujours plaisir. Seul la réponse a qui ira chercher la valeurs de ’sejour’ dans le « dico numéro » 4 (soit le 5e car on part de 0) vous octroiera le plaisir de voir ce magnifique RIO apparaître.

Question C.4 Picasso, la question explosive (j’assume pas cette blague alors je la cache (edit du migreur : c’est plus caché 😁)

On utilise habituellement un fichier d’extension csv pour quel type de données ?

Réponses

A des données structurées graphiquement
B des données sonores
C des données compressées
D des données structurées en tableau

Correction : Réponse D

On a vu plus haut que le fichier csv est de type tableur. Tableur étant issu du latin tabula (qui signifie planche), il est de la même famille que tableau (je met a contribution mes acquis de français que je ne pourrait malheureusement pas ressortir pour le BAC de Français cette année…). Un fichier csv de type TABLEUR va donc être utilisé pour des données structurées en TABLEAU.

Question C.5

Soit la table de données suivante :

nom prenom date_naissance
Dupont Pierre 17/05/1987
Dupond Catherine 18/07/1981
Haddock Archibald 23/04/1998

Quels sont les descripteurs de ce tableau ?

Réponses

A nom, prenom et date_naissance
B Dupont, Pierre et 17/05/1987
C Dupont, Dupond et Haddock
D il n’y en a pas

Correction : Réponse A

Les proposition A sont des descripteur et les autres propositions sont des valeurs des descripteurs. Je n’ai vraiment pas de quoi argumenter plus, il fallait apprendre sa leçon les loulous.

Question C.6

Qu’est-ce qu’un fichier CSV ?

Réponses

A une librairie Python permettant l’affichage des images
B un utilitaire de traitement d’image
C un format d’image
D un format de données

Correction : Réponse D

Bon la, clairement, si j ai encore des choses a vous apprendre sur le format csv après les réponses précédentes, c’est vraiment que je dois me reconvertir totalement dans le sauvetage des ours polaire… Mai bon reprenons ! Donc un fichier CSV est un fichier qui représente des données sous forme de tableau. Donc pas des images. Vraiment pas. Non.

Thème D : interactions entre l’homme et la machine sur le Web

Question D.1

Un élément form (un formulaire) d’une page HTML contient un élément button de type submit. Un clic sur ce bouton :

Réponses

A envoie les données du formulaire vers la page définie par l’attribut action de l’élément formRetour ligne automatique
B efface les données entrées par l’utilisateur dans le formulaireRetour ligne automatique
C envoie les données du formulaire vers la page définie par l’attribut method de l’élément formRetour ligne automatique
D ne fait rien du tout si un script javascript n’est pas associé au bouton

Correction : Réponse A

Si un bouton possède le type submit, cela veut dire que lorsque le bouton sera sollicité, le formulaire va être soumis au serveur en utilisant l’attribut action (qui sert a indiquer une action a exécuter lors de l’envoi de données). Du coup c’est un peu comme si vous rendiez un devoir sauf qu’il n’y a aucun risque que vos parents sortent de l’ordinateur si ça ne va pas.

Question D.2

Quelle méthode est utilisée via une requête HTTP pour envoyer une image via un formulaire HTML ?

Réponses
 
A HEAD
B PUT
C POST
D GET

Correction : Réponse C

Reprenons chaque requête proposé ici : 

  • HEAD sert notamment a économiser de la bande passant en demandant seulement les en-têtes de la même manière que la méthode GET. C’est comme si vous commandiez seulement le capuchon d’un stylo au lieu du stylo sur Internet pour payer moins. Si c’est le cas vous êtes non seulement radin, mais également très bizarre. 
  • PUT remplace une représentation de la ressource ciblée par le contenu de la requête. Pour imager, on va faire un carré sur le sol et dire « Ici il y aura Thierry Beccaro ». Notre pote PUT va alors nous chercher Thierry Beccaro et le mettre dans le carré (Note : la spécialité NSI de Louis Pasteur rejette toute responsabilité dans le cas ou des élèves tenterai de faire des invocation sataniste de Thierry Beccaro). 
  • POST envoie des données au serveur. Il est important que POST ne soit pas un forceur sinon le serveur peut faire un Burn-Out. 
  • GET demande une représentation de la ressource spécifiée. Ils servent donc a récupérer des données ( Note : aucun serveur n’est maltraité pendant l’interrogatoire de GET).
  • La requête la plus couramment utilisé pour un envoi d’image est donc la requête POST car il effectue un envoi de donnés.

Question D.3

Les pages HTML sont affichées par …

Réponses

A le compilateur 
B le serveur 
C l’interpréteur
D le navigateur Web

Correction : Réponse D

Votre navigateur web, qui est probablement Google Chrome (Safari si vous êtes riche et Yahoo si vous êtes un vieillard), affichera les pages HTML qui sont stocké sur un serveur.

Question D.4

Dans le code HTML les délimiteurs tels que <body> et </body> s’appellent ?

Réponses

A des bornes
B des balises
C des paragraphes
D des liens

Correction : Réponse B

Si vous avez suivi les cours d’NSI vous aurait eu juste à cette question.

Question D.5

Un fichier HTML contient la ligne suivante.
<p>Coucou ! Ca va?</p>
Quelle commande CSS écrire pour que le texte apparaisse en rose sur fond jaune ?

Réponses

A p { couleur: rose ; fond: jaune;}
<p> { color = pink background-color = yellow}
C <p> { color = pink ; background-color: yellow} </p>
p { color: pink ; background-color: yellow ;}

Correction : Réponse D
Si on respecte la syntaxe du css on peut déduire que c’est la réponse D.

Question D.6

Un élève a écrit une fonction javascript qui détermine la moyenne des valeurs entrées par l’utilisateur dans un formulaire de sa page HTML.
Il place sa fonction javascript

Réponses

A entre la balise <js> et la balise </js>
B entre la balise <code> et la balise 
C entre la balise <script> et la balise </script>
D entre la balise <javascript> et la balise </javascript>

Correction : Réponse C
Encore une question en rapport avec la syntaxe d’un language de programmation. Si tu avais répondu autre chose que la C ce n’est pas grave puisque le JavaScript c’est PAS(édit du migreur) nul !

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

Question E.1

Le répertoire personnel de l’utilisateur contient deux répertoires tempo et sauve.
On souhaite déplacer le fichier bac.txt du repertoire tempo vers le répertoire sauve.
Quelle commande permet de réaliser ce déplacement ?

Réponses

A mkdir /tempo/bac.txt /sauve
B mkdir /sauve /tempo/bac.txt
C mv /tempo/bac.txt /sauve
D mv /sauve /tempo/bac.txt

Correction : Réponse C
La commande mv qui veut dire move (« bouger », pour ceux qui sont nul en anglais). On déplace le fichier bac.txt qui était dans le repertoire tempo dans le repertoire sauve.

Question E.2

Dans la console Linux, quelle commande faut-il exécuter pour effacer le fichier test0.csv ?

Réponses

A rm test0.cvs
B cp test0.csv
C ls test0.csv
D mv test0.csv

Correction : Réponse A
rm —>remove
cp —>copy
ls—>list
mv —>move
Si vous etes nul en anglais copier coller ces mots dans Google traduction.

Question E.3

Quel est le rôle de la commande shell ls ?

Réponses

A basculer en mode administrateur
B lister le contenu du répertoire courant
C donner un accès complet à un fichier
D effacer le contenu du répertoire courant

Correction : Réponse B
ls est une abreviation de « lister » en anglais. Vous l’auriez si vous avez eu une bonne note aux EC3.

Question E.4

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 ?

Réponses

A un routeur
B un serveur DNS
C un serveur de temps
D un serveur Web

Correction : Réponse B
Le serveur DNS (Domain Name System, ou Système de noms de domaine en français) est un service dont la principale fonction est de traduire un nom de domaine en adresse IP. Maintenant que vous avez l’adresse IP du serveur du ministère vous pouvez surement le hacker et modifier les notes du BAC !

Question E.5

Que peut-on dire du système de fichiers, suite à l’exécution des commandes suivantes ?
% ls
entier.py flottant.py readme.md
% mkdir foo
% mv *.py foo

Réponses

A les fichiers entier.py, flottant.py, et foo ont été déplacés dans le répertoire de l’utilisateur
B l’utilisateur foo est propriétaire des fichiers entier.py et flottant.py
C le répertoire foo contient le résultat de l’exécution des deux fichiers entier.py et flottant.py
D le répertoire foo contient deux fichiers d’extension .py

Correction : Réponse D
Le *.py représente tous les fichiers python qu’on déplace (commande mv) vers le répertoire foo.

Question E.6

Dans un terminal sous Linux, à quoi sert la commande traceroute ?

Réponses

A à afficher un itinéraire routier entre deux villes
B c’est un synonyme pour la commande ping
C à afficher le chemin suivi par des paquets à travers un protocole IP
D à suivre pas à pas l’exécution d’un programme

Correction : Réponse C
Y’a vraiement trop de mots anglais… Ce QCM est plus un cours d’anglais que d’NSI.
Si vous avez choisi la réponse A je crois que vous devriez retourner en section L.

Thème F : Langages et Programmation

Question F.1
 
La fonction Python suivante ne calcule pas toujours correctement le résultat de 𝑥^y pour des arguments entiers.

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

Parmi les tests suivants, lequel va permettre de détecter l’erreur ?
 
Réponses
 
puissance(2,0)
puissance(2,1)
puissance(2,2)
puissance(2,10)
 
Correction : Réponse A
 
C’est reparti pour du Python ! Ce programme est censé calculer l’exposant d’un nombre : x est le nombre, et y est l’exposant. 
Comme on le sait depuis la quatrième, un nombre exposant 0 est TOUJOURS égal à 1.
Sauf, que il y a un problème, car si on entre puissance(2,0), le programme va nous renvoyer 0. Pourquoi ?

La ligne 4 du programme, p = p * x, revient à faire 2*2, dans le cas de la réponse A.

Et devinez quoi, 2*2 n’est pas égal à 1, mais bien à 4. Il faudrait donc rajouter une ligne à ce programme, permettant de renvoyer automatiquement 1 quand y=0.

Question F.2
 
On considère le code suivant :

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

Quelles sont les préconditions sur les arguments ?
 
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 

Pour répondre à cette question, il faut bien comprendre le programme :

Ce programme est le même que le précédent, sauf que 1 est ajouté à l’exposant (Par exemple, si vous entrez puiss(2,3), le programme ne vous donnera pas 2^3, mais 2^4)

Ce code ne fonctionne donc pas avec du texte, mais marche parfaitement avec des entier.

Question F.3
 
On considère l’instruction suivante :

  1. resultat=[0]*7

Que contient la variable resultat après son exécution ?
 
Réponses
 
0
[0]
[[0],[0],[0],[0],[0],[0],[0]]
[0,0,0,0,0,0,0]
 
Correction : Réponse D

Cette question, toute droit sortie des enfers, est infâme.

Tout d’abord, la réponse A et B sont fausses : La A car ce n’est pas une liste, et la B car il n’y a qu’un seul 0, alors qu’il devrait en avoir sept.

La réponse C est assez bizarre. C’est une liste de liste, mais elle n’a rien a faire là, car on veut juste une liste simple

La réponse D est donc la bonne réponse.

Question F.4
 
On définit une fonction f de la façon suivante :

def f(L,m):
R = []
for i in range(len(L)):
if L[i] > m:
R.append(L[i])
return R

On définit L = [1, 7, 3, 4, 8, 2, 0, 3, 5].
Que vaut f(L,4) ?
 
Réponses
 
[0, 7, 0, 0, 8, 0, 0, 0, 5]
[0, 0, 0, 5]
[7, 8, 5]
[]
 
Correction : Réponse C

Enfin une question simple !

Le programme sert a relever les éléments d’une liste qui sont plus grands que m.
Ici, m=4, donc le programme doit renvoyer tous les éléments de L qui sont plus grands que 4, soit 7,8 et 5.

Question F.5
 
Un programme Python commence par la ligne :

import os

À quoi sert cette ligne ?
 
Réponses
 
A C’est le début du squelette de tout programme Python
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 utiliser
 
Correction : Réponse D

Quand une ligne de code commence par « import », c’est que une bibliothèque va être utilisée.

C’est un peu court comme explication, mais il y a Affaire Conclue sur France 2 qui vient de commencer, et c’est vraiment très IMPORTant pour moi (humour).

Question F.6
 
On exécute le script Python suivant :

def cube(a):
a = a*a*a
return a
a = 2
b = cube(a)

Que vaut le couple (a, b) à la fin de l’exécution
 
Réponses
 
A  (8, 8)
B  (8, 2)
C  (2, 2)
D  (2, 8)


Correction : Réponse D

Dans cette question, l’académie a décidé de nous faire voyager.
Nous avons, dans l’ordre, les Vosges, le Tarn et Garonne, les Cotes d’Armor, et l’Eure-et-Loire, avec son fameux musée du caoutchouc.

Premièrement, on sait que dans tout les cas, a=2.
Pour b, on sait que b=cube(a).
Le nom de la fonction est assez explicite, et il n’y a pas de piège, même la porte parole du gouvernement pourrait y arriver.

2 au cube est égale à 8, c’est donc le couple (2,8) et l’Eure-et-Loire qui remporte cette question.

Thème G : Algorithmique

Question G.1
 
On dispose en quantité illimité de pièces de 1 euro, 2 euros et 5 euros. On veut totaliser une somme de 18 euros.
Quelle est la solution donnée par l’algorithme glouton ?

Réponses
 
A  [5, 5, 5, 2, 1]
B  [5, 5, 5, 2, 2, 1]
C  [5, 5, 2, 2, 2, 1, 1]
D  [5, 2, 2, 2, 2, 1, 1, 1, 1, 1]

Correction : Réponse A

Ah, le tri. Comme dans la vraie vie, le tri c’est dur à faire, mais c’est bien utile.
La solution donnée par l’algorithme glouton doit être la plus optimisée possible :
Ici, la réponse la plus optimisée est celle ou le moins de pièces possible sont utilisées pour former 18€ en tout.Retour ligne automatique
La bonne réponse est donc la A.

Question G.2
 
Quel est l’ordre de grandeur du coût du tri par insertion (dans le pire des cas) ?

Réponses
 
A L’ordre de grandeur du coût dépend de l’ordinateur utilisé
B Linéaire en la taille du tableau à trier
C Quadratique en la taille du tableau à trier
D Indépendant de la taille du tableau à trier

Correction : Réponse C

Dans le meilleur des cas, l’ordre de grandeur sera linéaire, dans le pire des cas quadratiques. Cette question est…. bizarre.
Et surtout, c »est à la frontière du programme de Première …

Décidément, ce sujet 42 nous réserve des surprises.

Question G.3
 
Quelle est la valeur de « element » à 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

Ce type de question, on commence a avoir l’habitude. Ici, element va toujours prendre la valeur de l’élément le plus grand de la liste. C’est du tri par insertion.
La bonne réponse est donc la C, car 4 est le plus grand nombre de la liste.

Question G.4
 
La fonction ci-dessous permet d’effectuer une recherche par dichotomie de l’index m de l’élément x dans un tableau L de valeurs distinctes et triées.

L = [1,2,3,4,1,2,3,4,0,2]
def dicho(x,L):
g = 0
d = len(L)-1
while g <= d:
m = (g+d)//2
if L[m] == x:
return m
elif L[m] < x:
g = m+1
else:
d = m-1
return None

Combien de fois la cinquième ligne du code de la fonction (m = (g+d)//2) sera-t-elle exécutée dans l’appelRetour ligne automatique
dicho(32, [4, 5, 7, 25, 32, 50, 51, 60] ?

Réponses
 
A 1 fois
B 2 fois
C 3 fois
D 4 fois

Correction : Réponse C

Pour répondre à cette question, j’avoue que j’ai du recopier le script, et le modifier un peu, pour trouver le résultat.Retour ligne automatique
Pour trouver la solution, on a qu’a rajouter une variable compteur=0 à la ligne 2, et rajouter compteur=compteur+1 dans la boucle qui nous intéresse. On rajoute un return compteur aprés le return m, et le tour est joué ! Ma variable compteur=3, donc la bonne réponse est la C.

Non, ce n’est pas de la triche. C’est une aide, comme dirait une famille célèbre de 
Levallois Perret.

Question G.5
 
Quelle est la valeur de c à la fin de l’exécution du code suivant :

L = [1,2,3,4,1,2,3,4,0,2]
c = 0
for k in L:
 if k == L[1]:
  c = c+1

Réponses
 
A 0
B 2
C 3
D 10

Correction : Réponse C

Courage, c’est la dernière ligne droite ! Pour souffler un peu, voila une question faisable : ce programme renvoie le nombre de fois qu’un nombre est dans une liste. Ici, il faut trouver le nombre de fois que L[1], ou 2, est dans la liste L.

Je pense que vous l’avez compris, pour répondre à cette question, il va falloir COMPTER.

Si on compte le nombre de fois ou 2 apparait dans la liste L, on trouve le chiffre 666, qui correspond à la réponse… Hein ? 
Oups, je me suis surement trompé dans le compte. En fait, on compte 3 deux, ce qui correspond à la réponse C

Question G.6
 
La fonction suivante doit déterminer la valeur maximale d’un tableau de nombres passé en argument. Avec quelles expressions faut-il remplacer les pointillés du script suivant pour que la fonction soit correcte ?

def maximum(T):
 maxi = T[0]
 n = len(T)
 for i in range(i, .....):
 	if T[i] > maxi:
      maxi = ......
 return maxi

Réponses
 
A n puis T[i]
B n puis T[i-1]
C n-1 puis T[i]
D n-1 puis T[i-1]

Correction : Réponse C

On y est. La question 42. La réponse de la vie. Ce doit surement être une question incroyable, unique, sensationnelle…

Et bien non, c’est encore du Python et des listes. Dommage.

C’est encore un programme qui permet de trouver le maximum d’une liste qu’il faut décortiquer.Retour ligne automatique
Premièrement, le premier blanc se complète obligatoirement par n-1, sinon, la boucle ne s’arrêterait jamais, et ferait planter le logiciel (ça sent le vécu). Ensuite, la variable maxi est égale au plus grand élément de la liste, donc si T[i ]> maxi, alors maxi = T[i]

La bonne réponse est donc la C.

Outro

Voici donc la fin de ce sujet 42. Si vous lisez ses lignes, vous n’êtes peut être pas prêt pour hacker la NASA, ni pour coder Google, mais vous pouvez vous vanter d’avoir compris le sujet 42.

Et ça, c’est inestimable.

Mission accomplished, jeune padawan.

Vous pouvez réagir ici :

Projets

Calcul du volume et de la masse des solides

Ce projet a été réalisé par des élèves en spécialité NSI du Lycée Louis Pasteur. Ils sont également les auteurs de ce compte rendu. Pour en savoir plus : Les projets en spécialité NSI

  • Le CVMS est un programme python créé dans le but de faciliter les calculs mathématiques dont l’obtention du résultat nécessite l’usage d’une calculatrice. Il automatise le calcul du volume et de la masse des solides de manière simple, rapide et pratique.
  • Cet algorithme est sous forme de menu, c’est à dire un menu listant des choix reliés à des fonctions. Chaque choix est relié à une fonction définie par la commande def [nom de la fonction].
  • Sept solides, listés au début du programme, sont disponibles. Pour en choisir un, il faut entrer le nombre lui correspondant. Pour obtenir le volume, certaines dimensions du solide sont demandées à l’utilisateur.
    Le programme utilisera la formule mathématique correspondant à la fonction.
  • Suite à cela, le programme propose de calculer la masse du solide
    sélectionné, si l’utilisateur sélectionne « non », le programme se clos. Si il sélectionne « oui », le programme demande d’entrer la masse volumique du solide, le résultat est donné en fonction de cette valeur.
    En dernier lieu, le programme offre à l’utilisateur la possibilité de choisir un nouveau solide.

Si vous souhaitez essayer ce programme, vous pouvez vous rendre sur ce site : trinket.io

Algorithme :

from math import *
print("Calcul du volume et de la masse des solides :")
print()
print("1. boule")
print("2. cube")
print("3. pyramide à base carrée")
print("4. parallélépipède rectangle")
print("5. cylindre droit")
print("6. cône de révolution")
print("7. prisme droit")
 
def boule():  
    print("Vous avez choisi la boule.")
    print()
    a=int(input("Entrez le rayon de la boule (en cm) :"))
    b=4/3*pi*a**3
    print("Le volume de la boule est de",b,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*b, "g")
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def cube():
    print("Vous avez choisi le cube.")
    print()
    a=int(input("Saisissez la longueur du côté du cube (en cm) : "))
    b= a**3
    print("Le volume du cube est de",b,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*b, "g")
    print()
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def pyramide():
    print("Vous avez choisi la pyramide.")
    print()
    a=int(input("Saisissez la longueur de la base de la pyramide (en cm) : "))
    b=int(input("Saisissez la largeur de la base de la pyramide (en cm) : "))
    c=int(input("Saisissez la hauteur de votre pyramide (en cm) : "))
    d=a*b
    e=d**2*c/3
    print("L'aire de la base de votre solide est de",d,"cm2")
    print()
    print("Le volume de votre pyramide est de",e,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*e, "g")
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def parallélépipèderectangle():
    print("Vous avez choisi le parallélépipède rectangle.")
    print()
    a=int(input("Saisissez sa longueur (en cm) : "))
    b=int(input("Saisissez sa largeur (en cm) : "))
    c=int(input("Saisissez sa hauteur (en cm) : "))
    d=a*b*c
    print("Le volume de votre parallélépipède rectangle est de",d,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*d, "g")
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def cylindredroit():    
    print("Vous avez choisi le cylindre droit.")
    print()
    a=int(input("Entrez le rayon du cylindre (en cm) :"))
    b=int(input("Entrez la hauteur du cylindre (en cm)"))
    d=pi*a**2*b
    print("Le volume de votre solide est de",d,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*d, "g")
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def cônederévolution():    
    print("Vous avez choisi le cône de révolution.")
    print()
    a=int(input("Saisissez la longueur du rayon du cône (en cm) : "))
    b=int(input("Saisissez la hauteur de votre cône (en cm) : "))
    c=pi*a**2
    d=pi*a**2*b/3
    print()
    print("L'aire de la base de votre solide est de",c,"cm2")
    print()
    print("Le volume de votre cône est de",d,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*d, "g")
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def prismedroit():
    print("Vous avez choisi le prisme droit.")
    print()
    a=int(input("Saisissez sa longueur (en cm) : "))
    b=int(input("Saisissez sa largeur (en cm) : "))
    c=int(input("Saisissez sa hauteur (en cm) : "))
    d=1/2*a*b*c
    print("Le volume de votre prisme est de",d,"cm3")
    print()
    print("Voulez vous sa masse ?")
    print("1.Oui")
    print("2.Non")
    a=int(input())
    if a==2:
        print("Non ?, tant pis bonne journée...")
        exit
    elif a==1:
        c=int(input("Entrez la masse volumique (en g/cm3) de votre solide : "))
        print()
        print("La masse de votre solide est de " , c*d, "g")
    print()
    print("Pour choisir un nouveau solide, appuyez sur la touche ENTRER")
    input()
 
def menu():
    print()
    print("Entrez le chiffre correspondant à votre solide : ")  
    choix = 0
    while choix==0:
        choix=int(input())
    if choix==1:
        boule()
    elif choix==2:
        cube()
    elif choix==3:
        pyramide()
    elif choix==4:
        parallélépipèderectangle()
    elif choix==5:
        cylindredroit()
    elif choix==6:
        cônederévolution()
    elif choix==7:
        prismedroit()
    elif choix==9:
        print("Abonnez vous : _kami_pedro_")
        exit
    elif choix==666:
        print("Tu vas avoir des problèmes")
        exit
    elif choix==42:
        print("42 est la réponse à La Grande Question sur la vie, l'univers et le reste dans l'œuvre de Douglas Adams Le Guide du voyageur galactique. Il reste alors à déterminer quelle était, précisément, la question.")
    else:
        menu()
    if choix!=9:
        menu()
 
menu()
  • En conclusion, nous pouvons dire que ce programme fut parfois difficile à réaliser mais nous avons finalement réussi à traverser tous les obstacles.
    Nous espérons que ce programme pourra répondre aux attentes de tous les utilisateurs.
Tutoriels

Les fonctionnalités de Photofiltre 7

Ce tutoriel va vous apprendre les différentes fonctionnalités d’un logiciel gratuit pour faire des montages photos amusants.

Introduction

Pour commencer nous allons nous servir du logiciel PhotoFiltre 7 téléchargeable via internet. Ce logiciel est totalement gratuit et dispose de nombreuses fonctionnalité que nous allons aborder par la suite. Il va vous permettre de créer et modifier a volonté, pour amuser vos proches, faire passer le temps, etc.. Or ce premier tutoriel ne va pas servir a cela, mais plutôt a expliquer chaque option et utilité de celles-ci, du logiciel choisi.Retour ligne automatique
Pour l’installer voici un lien rapide : http://static.infomaniak.ch/photofi…

Les fonctionnalités et leurs utilités

 Créer une feuille blanche 

Pour commencer, il est possible de débuter avec un fichier neutre, blanc, modifiable a volonté. Pour cela on peut utiliser trois méthode.

  • Premièrement en cliquant sur la feuille blanche comme ci-dessous ;

Ensuite, il est possible de le faire en cliquant sur « Fichier » en haut à droite puis sur « nouveau ;

Et enfin, en faisant un clic droit dans la zone grise puis sur « nouveau » ;

Cela va servir a faire apparaître un cadre blanc aux dimensions, couleurs, et unités (cm, pixels, pouces) personnalisables pour ensuite faire ce que l’on veut dessus, comme une feuille de dessins ;

La barre des menus 

La barre des menus qu’est ce que c’est ? C’est la barre du logiciel qui contient l’ensemble des commandes de PhotoFiltre regroupées par catégories. Elle correspond a ce qui est encadré en rose ci-dessous ;

Le menu « Fichier » permet :

  • d’enregistrer, imprimer, importer des images de votre ordinateur, 
  • de tout supprimer,
  • de rétablir ce qui a été annulé ou supprimé,
  • de connaître les propriétés d’une image.

Avant d’expliquer le menu suivant, il est important de préciser qu’un « calque »est un texte, une image collée ou importée, dans l’image de base comme par exemple dans cette capture d’écran, ou le mot « Bonjour », est un texte rajouté sur l’image de base, et donc un calque ;

Le menu « édition » permet :

  • d’annuler ou rétablir une opération,
  • de consulter l’historiques des opérations effectuées, ou le purge,
  • de répéter une opération,
  • de couper, copier, coller, ou fusionner un calque sur le fond.

Le menu « Image » permet de :

  • dupliquer un calque,
  • connaître les dimensions de celui-ci ainsi que celles du fond appelé dans ce menu « zone de travail »,
  • adapter la taille du calque, au fond,
  • les recadrer, automatiquement ou manuellement,
  • ajouter une ombre au calque, comme il a été fait pour l’exemple au dessus avec le mot « bonjour »,
  • de rendre une couleur transparente.

Le menu « Calque » permet de gérer les calques ;

  • en ajouter, dupliquer, supprimer,
  • les renommer, centrer, redimensionner, recadrer et même les transformer, comme par exemple les déformer,
  • les fusionner avec les claques inférieurs ou le fond,
  • les masquer ou afficher, ainsi que gérer l’ombre et l’ordre.

Le menu « sélection » permet de :

  • afficher ce qui à dernièrement été sélectionné que ce soit sur le calque ou le fond,
  • inverser une image,
  •  changer la forme de la sélection, la transformer( -> plutôt que de sélectionner sous forme rectangulaire, il est possible de sélectionner sous forme circulaire),
  • de centrer la sélection sur l’image,
  • de réduire la taille de la sélection (contracter), de l’agrandir (dilater), de créer une sélection a l’intérieur de la première (frange),
  • de copier, coller, enregistrer, uniquement la sélection.

Le menu « réglage » permet de :

  • gérer la teinte, la saturation, le contraste, la luminosité de façon personnalisée, ainsi que la correction gamma,
  • consulter l’histogramme,
  • ajuster le contraste et la luminosité de façon automatique, ou renforcer les tons sombre, ou les tons clairs,
  • remplacer une couleur par une autre,
  • mettre un filtre bichrome sur l’image, ou la mettre en négatif (noir et blanc),

Le menu « filtre » permet de :

  • ajouter un filtre de la couleur souhaitée, la vieillir (avec des couleurs comme noir et blanc, ou sépia),
  • flouter l’image ou la bruiter (donner une impression de rugueux), ou encore lui donner une impression de relief,
  • déformer l’image comme on souhaite, de lui donner un effet d’optique,
  • l’encadrer, lui donner des textures différentes, la quadriller et autres choses diverses.

Le menu « Affichage » permet de :

  • choisir d’afficher ou non les barres d’outils aussi appelées barres de filtres, ainsi que la palette d’outils,
  • choisir d’afficher ou non la miniature des calques (a gauche de l’image travaillée) et choisir leur taille,
  • faire apparaître une grille de repérage et gérer le zoom.

Le menu « outils » permet de :

  • d’afficher l’explorateur d’image, c’est a dire la partie en bas montrant le fichier entier où on a pris une image a modifier,
  • gérer nos images et s’en servir comme fond lorsqu’elles sont des calques,
  • modifier nos préférences d’enregistrement.

Le menu « fenêtre » permet de :

  • réorganiser automatiquement la zone de travail,
  • restaurer tout ce que l’on a supprimé,
  • réduire toute les images dans la zone de travail.

Barres d’outils

La barre d’outils est sur deux étages, le premier va permettre d’accéder rapidement aux fonctionnalités les plus courantes. Le deuxième permet plutôt un accès rapide aux principales fonctionnalités et filtres de réglage.

Chaque fonctionnalité est brièvement expliquée dans l’image ci-dessous

La palette d’outils 

La palette d’outils regroupe les outils permettant de travailler avec photofiltre. C’est-à-dire, les outils de sélection, les outils de dessin et les outils de retouche

Tutoriels

Créer son propre site internet gratuitement

Vous souhaitez créer votre propre site web, mais vous ne pensez pas avoir les compétences nécessaires ? Ce tutoriel est fait pour vous. Vous allez y apprendre à réaliser votre site totalement gratuitement et très facilement avec l’aide de la plateforme webnote.

Comment cela est possible ?

On pourrait croire que cela n’est pas une mince affaire, or c’est plus simple qu’il ne paraît, effectivement de nombreuses plateformes se sont misent à proposer un service comme celui-ci.

Dans ce tutoriel je vais vous présenter l’une des plateformes que j’utilise et avec laquelle j’ai donc familiarisé, son utilisation est très simple et intuitive.

Bien-sûr il en existe des dizaines d’autres.

Lien de cette plateforme : https://www.webnode.fr/

Première partie : Création d’un compte

 1 Dans un premier temps, cliquez sur le lien
Une fois avoir cliqué sur le lien, vous vous retrouverez sur la page d’accueil comme ceci :

2 Ensuite, pour créer votre page vous devrez cliquer sur menu en haut à droite et choisissez le bouton bleu indiqué par la flèche rouge sur la photo :

3 Vous serez donc rediriger vers une page d’inscription dans laquelle vous pouvez choisir le nom que portera votre futur site :

Sur cette page, il vous suffit de renseigner votre adresse mail actuelle et de créer un mot de passe qui vous servira à chaque connexion, si jamais vous possédez un compte Facebook ou Google vous pouvez aussi passez par ceux-ci en cliquant sur l’icône.

 4 Ceci est la dernière étape de la première partie, vous aller devoir choisir le but de votre site, s’il consiste à de la vente vous choisirez le bouton de droite « boutique en ligne » et vous souhaiter créer un blog ou tout autres genre de sites alors choisissez le bouton de gauche « site web ».

Deuxième partie : Conception même du site

La première partie ne concistait qu’à la « paperasse » et vous allez enfin pouvoir passer à la conception propre de votre site, sûrement ce que vous attendiez le plus.

 1 Pour ma part j’ai choisi le bouton gauche soit, le site web, même en choisissant le site commerçant on retrouve la même interface :

Vous voilà devant plusieurs choix, difficile pour moi de vous aider à cet instant mais personnellement mon choix est fait. Ces différentes propositions qui vous sont faites s’appellent des « templates » de l’anglais, qui signifie « modèles ». si vous hésiter vous pouvez passer la souris sur chacun des modèles est obtenir un aperçu de celui-ci en cliquant sur « aperçu ». Une fois que votre choix est fait vous pouvez cliquer sur « sélectionner »

En haut à droite en vers si vous êtes dans l’aperçu sinon, en passant la souris dessus si vous êtes sur la pages de choix.

2 Vous devez normalement avoir ceci qui s’affiche :

Il est donc écrit, l’adresse que portera votre site, comportant le nom que vous lui avait choisi, j’ai choisi le nom « patch » pour l’exemple est l’adresse est : patch2.webnode.fr. Vous pouvez alors appuyer sur éditer mon site pour commencer à personnaliser celui-ci.

3Votre page doit être similaire à celle-ci, de nomreux cadre proposent « Cliquez ici pour modifier votre texte », effectivement cela est faisable par exemple je peut écrir « Patch » dans chacun des cadres.

J’ai modifié le texte, et il est aussi possible de modifier la police de l’écriture, son style, sa taille et sa couleur grâce au paramètres pointés par la flèche rouge dans l’exemple.

4 Sans doute que l’image d’arrière plan ne vous convient pas, aucun soucis, ce site est le votre, tout est modifable. il vos suffit de cliquer sur la roue crantée qui indique les paramètre (en rouge sur l’exemple) :

Imédiatement plusieurs images vous sont proposées, vous pouvez en choisir une en cliquand dessus et si jamais aucune d’elle ne vous convient, vous pouvez en importer une de votre appareil à condition que celle-ci est était préalablement enregistré. Pour cela vous choisirez « Ajouter une image » puis « Télécharger une image », vous n’aurait plus qu’à choisir parmi les votres.

 5 Evidemment les textes ou autres éléments déjà présents ne vous importent peu et vous souhaiter vous en débarrasser, rien de plus simple, vous cliquez sur l’élément et une barre s’affichera comme dans l’exemple :

Cette barre propose de « Changer l’image », « Modifier le texte », « Ajouter un lien » ou une poubelle, vous cliquerez alors sur la poubelle pour suprimmer l’élément.

 6 Nous arrivons sur la fin, maintenant que vous avez modifié ou supprimé les éléments gênants, vous devez pouvoir rajouter de nouveaux éléments, vu avez du apercevoir quand vous passiez la souris sur des zones sans rien, que une ligne avec un + noir s’affichait. Cliquez dessus et voici ce qui apparaît :

Vous avez un menu qui propose plusieurs choix : « Vide », « Texte et images », « Texte en colonnes », « Titre », « Services », « Tarifs », « Commande », « Intitulé cliquable ».
Pour « Vide » vous l’aurez compris vous disposerez d’un espace aéré.
Pour « Texte et image » vous pourrez choir d’écrire quelque chose ou de poser une photo, voir même les deux.
Pour « Texte en colonnes » de même, seulement le texte s’affichera en colonnes.
Pour « Titre » vous pourrez rentrer du texte qui affichera en plus grand et en plus large.
Pour « Services » Vous allez pouvoir proposer des services avec une petite photo ou un logo et un texte explicatif.
Pour « Tarifs » Le principe est le même avec une possibilité de noter des prix visibles 
Pour « Commande » Vous allez pouvoir proposer un moyen de vous joindre par mail, éventuellement pour un service ou quoique ce soit.
Enfin pour « Intitulé cliquable » ceci créera un bouton que vous pourrez renommer de la même manière que le texte et auquel si vous ajouter un lien en cliquant sur « Ajouter un lien », les visiteurs de votre site pourront cliquer sur ce bouton et se retrouver sur le lien que vous aurez choisi.

7 Enfin, n’oubliez pas de signer votre site et vous pouvez ensuite cliquer sur le bouton « Publier » :

Automatiquement le site va vous renvoyer l’adresse de votre site, que vous pourrez copier et partager. L’adresse que vous partagez permet aux visiteurs de voir votre travail et non de le modifier.

Voici donc les bases que je trouvais importantes de connaître.

Tutoriels

Premiers pas vers l’utilisation du Craft Robo à l’aide…

Vous disposez d’un ordinateur Windows ainsi que d’un Craft Robo mais vous ne savez pas l’utiliser… et bien vous êtes au bon endroit ! Ce tutoriel va vous permettre d’en maîtriser les bases.

Introduction

Le logiciel d’édition et de découpe Robo Master vous permet de réaliser vos projets les plus minutieux. Ecrivez, dessinez, il se charge de le transformer en contour et d’envoyer les instructions au Craft Robo qui les découpe avec une infinie précision. Grâce au logiciel, vous donnez facilement vos consignes et le tour est joué ! Si la découpe se réalise sur du papier vinylique (papier recouvert d’une couche de plastique PVC contrecollée le rendant ainsi résistant et imperméable), vous pourrez alors les coller où vous le souhaiterez (sur un tee shirt, un oreiller…). Sinon, à vous les cartes de vœux, le scrapbooking et autres loisirs créatifs !

Matériaux nécessaires

Nous aurons besoin pour la réalisation de ce tutoriel :

  • du logiciel Robo Master
  • d’un Craft Robo
  • d’un ordinateur Windows
  • de papier vinylique ou d’un autre type de papier, selon ce que vous voulez en faire. A votre guise…
  • une aiguille

L’installation du logiciel

Pour commencer, vous devez insérer le CD fourni avec le Craft Robo dans le lecteur CD de votre ordinateur. La fenêtre “Lancer” s’affiche. Cliquez alors sur « Installation du logiciel pour Craft Robo » afin de télécharger le logiciel Robo Master.

L’utilisation de Robo Master

Une fois l’installation réalisée, faîtes un double clic sur l’icône (clic de gauche 2 fois rapidement et successivement) afin d’ouvrir le logiciel.
Tout d’abord, pour créer une nouvelle page, vous devez cliquer sur l’icône en haut à gauche.

Vous pouvez également cliquer sur « Fichier » puis « Nouveau », on obtiendra le même résultat…

Ensuite, sélectionnez l’orientation de la page souhaitée : c’est-à-dire « portrait » ou « paysage ». Puis cliquez sur ok.

Nous obtenons alors une page blanche.

On peut utiliser ce logiciel de diverses façons :

  • Dans un premier temps, en utilisant l’outil texte.

Vous pouvez bien évidemment utiliser les polices d’écriture classiques (déjà présentes sur votre ordinateur comme Arial ou Times New Roman), mais pour rendre votre outil plus original, je vous invite à visiter le site de DaFont et télécharger les polices d’écriture qui vous plaisent : il en existe de très nombreuses, je vous laisse aller les découvrir !

Voici la page qui s’affiche lorsque vous cliquez sur l’outil texte :

Pour utiliser cet outil, il faut sélectionner une police d’écriture, saisir le texte et valider en appuyant sur OK.

Par exemple, ici nous avons sélectionné la police d’écriture « Christmas Tree » et nous avons écrit le mot « NOEL ». On l’a ensuite validé en cliquant sur OK.

Placez-le à l’endroit souhaité en validant avec un clic gauche sur la souris.

Sélectionnez les flèches de redimensionnement pour agrandir à volonté. Attention à ne pas trop déformer le texte.

Faîtes un clic gauche n’importe où sur la page pour désélectionner le texte. Celui-ci change d’ailleurs de couleur. Ici il passe du bleu au noir.

Sélectionnez votre texte, puis à l’aide du clic droit, cliquez sur « miroir horizontal » afin que le texte, une fois découpé, apparaisse à l’endroit.

Sélectionnez l’icône « réglages de sortie ».

Cliquez sur « réglage de la ligne de découpe ».

Dans notre exemple, une seule couleur « noire » est sélectionnée en découpe pleine. Il existe aussi la découpe en pointillés pour faire un pré-découpage (comme par exemple pour les coupons-réponses). Validez sur OK. Enfin, cliquez sur sortie sur craft robo…

Si au cours de votre création, le logiciel utilise plusieurs couleurs, pensez à bien sélectionner toutes les couleurs de lignes à découper de la même façon (traits pleins ou pointillés).

  • Deuxième possibilité d’utilisation : les lignes, la courbe, l’arc, ou bien encore les formes présélectionnées comme les rectangles, le polygone, le cercle, l’ellipse, les modèles. Vous avez aussi la possibilité d’utiliser la main levée qui vous permettra de laisser libre cours à votre créativité.

Ici, nous allons cliquer sur « Modèles » et sélectionner le modèle « snow1 ». Cliquez sur « ouvre ».

Positionnez-le à l’endroit souhaité. Comme précédemment, tirez sur les flèches de redimensionnement pour modifier la taille de l’image.

Puis reprendre à l’étape où vous devez sélectionner votre image (vu précédemment) : à l’aide du clic droit, cliquez sur « miroir horizontal » afin que l’image découpée apparaisse à l’endroit. Poursuivez avec la sélection de l’icône « réglages de sortie ». Cliquez enfin sur « réglage de la ligne de découpe ». Dans notre exemple une seule couleur « noire » est sélectionnée en découpe pleine. Validez sur OK. Pour finir, cliquez sur « sortie sur craft robo ».

  • Pour la troisième possibilité d’utilisation, cliquez sur l’icône « vectorisation contour ».

Le logiciel auto trace s’ouvre automatiquement.

Cliquez sur « fichier », puis « charger image ».

Sélectionnez l’image souhaitée en parcourant vos fichiers présents sur votre ordinateur. Dans notre cas, nous avons sélectionné une image sur internet et sauvegardée sur USB. Nous pouvons d’ailleurs voir, à droite de cet onglet, une prévisualisation de l’image dans la page (si ce n’est pas le cas, il suffit de cocher la case vide présente juste avant le mot « prévisualisation »). Puis cliquez sur « ouvrir ».

À droite de l’écran, un curseur avec un seuil, ici 128, vous permet de régler le contraste si celui-ci ne vous convient pas. 

Cliquez maintenant sur « Convertir en Contour ».

Comme vous pouvez le constater notre papillon se transforme en une succession de points. Cliquez maintenant sur « Coller et Quitter ».

Positionnez votre image et redimensionnez la.

Comme vous le voyez en bas à droite, l’adresse du site internet reste visible. Évidemment nous ne voulons pas découper cette information avec le Craft Robo, elle nous est inutile. Il faut donc la supprimer. Nous allons, pour ceci, sélectionner l’image et cliquer sur l’onglet « dégrouper ».

À partir de maintenant, chaque cercle est indépendant des autres. Si vous en déplacez ou supprimez un cela n’aura aucune incidence sur le reste du dessin. Pour plus de précisions n’hésitez pas à utiliser le zoom avant au maximum.

Sélectionnez à l’aide de la souris, l’ensemble du texte ou la partie de l’image à supprimer. En relâchant le clic gauche la partie sélectionnée devient bleue. Vous n’avez plus qu’à la supprimer à l’aide de la touche “suppr” de votre clavier ou de l’icône représentant une croix rouge. Elle se trouve vers le milieu de la barre des icônes.

Grâce au zoom, nous voyons que la queue du papillon présente une irrégularité. Il est alors possible en mode dégroupé, de sélectionner uniquement cette petite zone ronde et la supprimer. C’est également en mode dégroupé que vous pouvez sélectionner un élément et déplacer les points un à un pour un contour encore plus lisse. Sélectionnez, pour cela, un point et déplacez-le à l’endroit souhaité.

Zoomez en arrière. Resélectionnez maintenant la totalité du papillon et cliquer sur l’icône « grouper ».

Reprendre à l’étape où l’on sélectionne notre texte ou image (vu précédemment), pour réaliser le « miroir horizontal » et poursuivez.

Préparation du Craft Robo

Maintenant que notre image est prête, allumez votre robot de découpe. 
Ôtez la feuille jaune de protection de la feuille de transport et positionnez votre papier vinylique (ou autre) à l’envers.

La feuille de transport étant recouverte de colle repositionnable, c’est un jeu d’enfant. 
Vous devez voir le dos de votre papier à découper. 
Insérer la feuille de transport à l’intérieur du Craft Robo à l’aide de la molette située sur le côté jusqu’à ce que la feuille de transport s’aligne sur le repère.
Lancez la découpe. La feuille s’engage, fait trois aller-retours. 
La découpe commence : patientez.

Une fois que le robot a terminé, éteignez le puis retirer la feuille de transport grâce à la molette. Décollez votre papier et repositionnez la feuille jaune sur la feuille de transport.

L’heure et maintenant venue pour vous d’ébarder c’est-à-dire qu’avec une aiguille vous allez retirer toutes les parties inutiles (dans le cas du papillon il faut retirer toutes les petites bulles). 
Une fois le travail terminé, positionnez votre feuille vinylique sur le vêtement, le recouvrir de papier sulfurisé et passez le fer à repasser chaud pendant 3 secondes. Retirez le papier sulfurisé sans vous brûler et décollez délicatement et très lentement la partie plastique du papier vinylique.

Votre motif est maintenant transféré sur votre t-shirt. 

Félicitations !

Projets

Un générateur de mot de passe

Vous ne trouvez pas un mot de passe adéquat et sécurisé ? Ce site est fait pour vous !
Ici vous pourrez générer aléatoirement et avec certains critères choisis au préalable, un mot de passe totalement sécurisé !

Pour commencer :

Tout d’abord, ce site est composé que d’une seule et unique page où HTML, CSS et JavaScript se mêlent afin de vous offrir un générateur de mot de passe de qualité.

Présentation du script principale :

         
 
function getRandomNum(lbound, ubound) {
return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}
function getRandomChar(number, lower, upper, other, extra) {
var numberChars = "0123456789";
var lowerChars = "abcdefghijklmnopqrstuvwxyz";
var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var otherChars = "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/? ";
var charSet = extra;
if (number == true)
charSet += numberChars;
if (lower == true)
charSet += lowerChars;
if (upper == true)
"Réponse à la vie"
charSet += upperChars;
if (other == true)
charSet += otherChars;
return charSet.charAt(getRandomNum(0, charSet.length));
}
function getPassword(length, extraChars, firstNumber, firstLower, firstUpper, firstOther,
latterNumber, latterLower, latterUpper, latterOther) {
var rc = "";
if (length > 0)
rc = rc + getRandomChar(firstNumber, firstLower, firstUpper, firstOther, extraChars);
for (var idx = 1; idx < length; ++idx) {
rc = rc + getRandomChar(latterNumber, latterLower, latterUpper, latterOther, extraChars);
}
return rc;
}

Ce script permet de choisir plusieurs critères :

•Le type du premier caractère (Chiffres, minuscules, majuscules, autres)
•Le type des autres caractères (Chiffres, minuscules, majuscules, autres)
•Introduire des autres caractères choisis
•Définir la taille du mot de passe

Ces critères vont par la suite permettre la génération aléatoire du mot de passe, comme vu ci-dessous :

De plus, l’utilisateur peut, s’il le souhaite, modifier un ou plusieurs caractères du mot de passe précédemment créer, comme ci-dessous :

Présentation du  :

Pour créer les cases à cocher de tous les critères, un simple  « input » est nécessaire comme ci-dessous :

<div class="option">   
    <input type=checkbox name=firstOther>
    "Critères"
</div>

Puis par la suite, un second « input » qui permet la vérification de tous les critères cochés ou non :

<div class="bouton-submit">
    <input class="bouton" type=button value="Créer le mot de passe" onClick="document.myform.password.value =
        getPassword(document.myform.passwordLength.value, document.myform.extraChars.value,
        document.myform.firstNumber.checked, document.myform.firstLower.checked,
        document.myform.firstUpper.checked, document.myform.firstOther.checked,
        document.myform.latterNumber.checked, document.myform.latterLower.checked,
        document.myform.latterUpper.checked, document.myform.latterOther.checked);">
</div>

Et enfin, un troisième « input »  qui permet la génération du mot de passe :

<div class="option">
    <input class="résultat-mdp" type=text name=password size=20>
</div>

Pour ce qui est du CSS, nous avons pris un template sur un site internet, qu’on a modifié selon nos besoins et nos envies personnels afin de donner un rendu simple et épuré :

Quant au JavaScript, nous l’avons entièrement pris sur internet, sans aucune modification.

Les problèmes rencontrés :

  • •Les problèmes résolus :
    - Le CSS qui ne s’appliquait pas comme on le voulait
    - Le mot de passe qui ne s’affichait pas
    - Ligne 42 ?
  • •Les problèmes non résolus :
    - L’implémentation du menu demandé

Ce fichier zip contient le projet des élèves. Le lien ci-dessous héberge le projet en ligne et quelques bugs ont été corrigés par l’enseignant.

Projets

Entrainement au calcul mental en Python

Ce script génère des additions et multiplications aléatoires et permet de s’entraîner sur le calcul mental.

Projet NSI 1 : Le calcul mental :

Ce projet consiste à créer un programme en python faisant travailler le calcul mental. Nous sommes en 1ère spécialité NSI au lycée Louis Pasteur à l’année 2019/2020.

Introduction : Python :

Python est un langage de programmation interprété. C’est à dire un programme qui exécute les programmes écrits avec un langage informatique. Python est un langage épuré car il possède moins de construction syntaxique que les autres langages. Il est disponible sur tablettes, ordinateurs, ou encore calculatrice.

But et présentation du programme :

Ce programme de calcul mental permet de se perfectionner et de s’entrainer au calcul via différents niveaux adaptés à tout le monde. Il est pratique car il permet d’avoir une correction et un score et de ne pas se préoccuper à trouver des calculs. Ce programme est destiné à tous les niveaux (plus particulièrement aux élèves de seconde qui doivent savoir maîtriser ces notions.).

Ce programme est constitué de 5 niveaux regroupant le calcul d’additions, de soustractions et de multiplication. Chaque niveau est constitué de 20 questions et d’une correction. Ce programme permet aussi à un élève de seconde de s’initier au langage python en l’exécutant et d’essayer de le comprendre grâce à la petite présentation du programme ci-dessous.

Décortication du programme :

Tout d’abord la console nous demande de choisir un niveau dans le menu proposé.

# La fonction menu !
def menu():
    print("Choisis un niveau")
    print("1. Addition niveau 1") 
    print("2. Addition niveau 2")
    print("3. Multiplication niveau 1")
    print("4. Multiplication niveau 2")
    print("5. Final avec toutes les opérations posssibles")
    choix = 0
    while choix==0:
        choix=int(input())
    if choix==1:
        additionniveau1()
    elif choix==2: 
        additionniveau2()
    elif choix==3:
        multiplicationniveau1()
    elif choix==4:
        multiplicationniveau2()
    elif choix==5:
        final()
    elif choix==9:
        print("Au revoir !")
        exit
    else: 
        menu() 
    if choix!=9:
        menu() 

menu()

On peut voir ci-dessus la fonction menu. Grace à « print » un menu va s’afficher. Puis avec la fonction « int(input » l’utilisateur va choisir un niveau grâce à 5 chiffres correspondant aux 5 niveaux. Et avec les conditions « elif et if » notre programme va se reporter au fonction prédéfinies précedemment.

Voici une des fonctions définies :

# Une des 5 fonctions définis !
    print("Niveau1 : Addition avec 1 chiffre")
    nb=1
    score = 0
    while nb<=20:
        aleat1 = random.randint(1, 9)
        aleat2 = random.randint(1, 9)
        print("Combien fait", aleat1, "+",aleat2)
        reponse = int(input("réponse = "))
        nb = nb + 1
        result = (aleat1 + aleat2)
        if reponse==result :
            score = score + 1
        elif reponse!=result :
            score = score + 0
        print("Voici la correction:", result)
    print("Ton score est:", score, "/20")
    if score>=16 :
        print("Bravo tu es experimenté et tu peux passer au niveau 2")
    if score<10 :
        print("C'est pas grave, retente ta chance")
    if score<16 and score>=10:
        print("Tu as un bon niveau mais je te conseille de reessayer. Avant révise un peu.") 

Grace à la fonction random des chiffres et des nombres vont être tirés aléatoirement permettant de générer des calculs aléatoirement.

Ces chiffres et nombres sont 2 variables (aleat1 et aleat2) tirés aléatoirement selon un intervalle de chiffres et nombres selon les niveaux respectifs. Cela va être appliqué au 4 premier niveaux.

Avec « if » qui nous permet d’exécuter le code mais avec des conditions. Si la réponse est juste le +1 va être ajouté au score sinon pas de changement du score. Ce qui fera un résultat final sur 20 grâce à la fonction « while » ; while nous permet de réaliser cette boucle indéfiniment tant que la variable « nb » n’est pas inférieur à 20. Cette boucle va donc se répéter pendant 20 questions.. Aussi à la fin de chaque calcul une correction est proposée encore grâce à « if ». Si le score est supérieur à 16 la compétence est validée, si c’est entre 10 et 15 tu maîtrises moyennement les compétences. Si inférieur à 10 il vaudrait mieux réviser.

# Le script d'une autre fonction !
    print("Niveau5: Final")
    nb=1
    score = 0
    while nb<=20:
        aleat1 = random.randint(1, 15)
        aleat2 = random.randint(1, 15)
        listes = [(aleat1 + aleat2), (aleat1 * aleat2), (aleat1 - aleat2)]
        aleat3 = listes[random.randint(0, 2)]
        if aleat3==(aleat1 + aleat2) :
            print("Combien fait", aleat1, "+", aleat2)
        elif aleat3==(aleat1 * aleat2) :
            print("Combien fait", aleat1, "x", aleat2)
        elif aleat3==(aleat1 - aleat2) :
            print("Combien fait", aleat1, "-", aleat2)
        reponse = int(input("réponse = "))
        nb = nb + 1 
        result = aleat3
        if reponse==result :
            score = score + 1
        elif reponse!=result :
            score = score + 0
        print("Voici la correction:", result)
    print("Ton score est:", score, "/20")
    if score>=16 :
        print("Bravo tu es experimenté et tu maitrise toutes les compétences nécessaires")
    if score<10 :
        print("C'est pas grave, retente ta chance tu vas y arriver. Avant révise un peu.")
    if score<16 and score>=10:
        print("Tu as un bon niveau mais je te conseille de réessayer")

Pour la 5ème fonction nous avons créé une 3ème variable (aleat3) nous permettant de tirer aléatoirement dans une liste prédéfinie (composé des 3 opérations), et grâce encore une fois à la condition « if » pour avoir une opération aléatoire et toujours des chiffres et nombres aléatoires.

Si tu veux t’améliorer en calcul mental clique sur le lien ci-dessous :

Projets

Une Histoire de plus ou moins

Lancez vous dans le jeu du plus ou moins, et tenter de battre l’ordinateur en devinant le nombre entre 0 et 1000 auquel il pense en moins de 10 coups ! Ou alors faites lui deviner votre nombre, saura t’il le trouver en moins de 10 coups et quelle stratégie adoptera t’il ?

Lancez vous dans le jeu du plus ou moins et tentez de battre l’ordinateur en devinant le nombre, entre 0 et 1000, auquel il pense en moins de 10 coups ! 
Ou alors, faites lui deviner votre nombre, saura t’il le trouver en moins de 10 coups et quelle stratégie adoptera t’il ?

Ce projet est un programme réalisé sur python recréant le célèbre jeu du plus ou moins. Il vous permettra une fois téléchargé sur votre calculatrice Numworks ou à l’aide d’un IDE de trouver ou de faire deviner un nombre entre 0 et 1000 à l’ordinateur. Ce programme a été developpé sur Pycharm et peut être téléchargeable sur la calculatrice Numworks via les liens hypertextes en bas de l’article.

La Naissance du projet

Dès l’annonce du projet nous voulions partir sur un jeu et surtout travailler sur l’interaction entre l’homme et la machine.

C’est alors que le jeu du plus ou moins nous est apparu comme une idée ni trop simple ni trop compliquée à coder avec une interaction importante.

Le projet était comme un mini défi puisque nous devions incrémenter une sorte de mini “intelligence artificielle”, car en effet dans ce jeu il existe une stratégie qui garantit la victoire.

Les différents modes de jeu

  • UN PREMIER MODE DE JEU

Dans ce mode de jeu, l’ordinateur doit trouver un nombre auquel l’utilisateur pense.

La stratégie consiste à diviser par deux le nombre de possibilités allant de 0 à 999, il suffit donc de proposer 500 comme premier choix, 250 ou 750 en deuxième choix et ainsi de suite… Grâce à cette méthode, l’ordinateur a la certitude de trouver le nombre en moins de dix coups.

Le but étant d’intégrer la stratégie à l’ordinateur comme une sorte de mini « intelligence artificielle” pour que l’ordinateur l’adopte et soit donc sûr de gagner à tous les coups.

victoire = False
min = 0
max = 1000
 
def recherche(min, max):
   scoreordi = 0
   scorejoueur = 0
   global victoire
   while not victoire:
       print("Ton chiffre est il plus grand que",int((min + max) / 2),"?")
       reponse = input()
       if reponse == "+":
           recherche(int((min + max) / 2), max)
       elif reponse == "-":
           recherche(min, int((min + max) / 2))
       elif reponse == "=":
           print("J'ai donc trouvé ton chiffre qui est",int((min + max) / 2))
           victoire = True
           print("Partie terminee")
recherche(min,max)

Voici le rendu du 1er mode de jeu :

  • UN DEUXIEME MODE DE JEU

Le deuxième mode de jeu fut bien plus simple à coder que l’autre car il suffisait de faire un script qui génère un nombre aléatoirement et le faire deviner à l’utilisateur à l’aide de phrases tels que “c’est plus !” ou “c’est moins !” .Nous avons intégré des boucles “if” et “while” en réponse au nombre entré par le joueur.

choix = randint(0, 999)
    nb = int(input())
    if nb < 0:
        print("Votre réponse n'est pas valide")
        sleep(3)
        questionordi()
    elif nb > 999:
        print("Votre réponse n'est pas valide")
        sleep(3)
        questionordi()
    cpt = 0
    scoreordi = 0
    scorejoueur = 0
    while cpt < 9:
        if nb > choix:
            print("C'est moins !")
            nb = int(input())
            if nb < 0:
                print("Votre réponse n'est pas valide")
                sleep(3)
                questionordi()
            elif nb > 999:
                print("Votre réponse n'est pas valide")
                sleep(3)
                questionordi()
            cpt += 1
        elif nb < choix:
            print("C'est plus !")
            nb = int(input())
            if nb < 0:
                print("Votre réponse n'est pas valide")
                sleep(3)
                questionordi()
            elif nb > 999:
                print("Votre réponse n'est pas valide")
                sleep(3)
                questionordi()
            cpt += 1
        else:
            print("Tu as trouve")
            cpt = 10
            scorejoueur = scorejoueur + 1
            print("Score ordinateur :", scoreordi, "\nScore joueur  :", scorejoueur)

Voici le rendu du 2ème mode de jeu :

Une ergonomie pensée pour la calculatrice

Un des autres défis de ce projet fut de traduire notre script pour qu’il puisse coller à l’interface limitée de la Numworks, en effet dans la calculatrice on ne peut pas se permettre de faire une phrase trop longue ou encore de mettre trop de texte. Nous avons alors utilisé des IDE Python tels que Numworks ou Omega pour corriger les bugs d’affichage et mettre en forme notre jeu textuel.

La création d’un menu nous a permis de créer un semblant d’interface graphique afin d’ajouter un peu d’esthétique à notre code.

Voici un aperçu du menu :

Conclusion

Comme vous le savez, le langage python nécessite comme tous les langages une extrême rigueur sans quoi le script est immédiatement obsolète.

C’est pourquoi nous avons dû braver certains problèmes qui empiétaient sur la justesse du code et donc du jeu.

Notre obstacle majeur étant que la boucle « while » dans la définition recherche (Voir le mode de jeu 1), était interminable ! Aussi mais pas des moindre nous avons eu aussi de nombreux soucis d’indentation et de syntaxe.

Après avoir résolu ces problèmes et optimiser notre jeu, nous avions l’impression qu’une couche graphique aiderait à rendre le jeu plus vivant.

Malheureusement, nos faibles connaissances pour les modules tels que turtlekandinsky et tkinter ont fait que notre tentative d’amélioration a échoué. Dès lors, nous avons abandonné l’idée d’offrir une interface graphique au joueur pour uniquement nous concentrer sur le script et le menu, qui servirait en remplacement.

Voici un lien vers nos essais graphiques

En somme, ce projet nous aura permis d’étendre nos connaissances en python ainsi que de réaliser notre premier “jeu” interactif.

Vous retrouverez les liens de notre script dans le tableau ci-dessous et pourrez le télécharger.

Télécharger et tester

ServeurWorkshop de NumWorkstiplanet.orgnsi.xyz
RemarquePermet un téléchargement rapide sur la calculatriceTéléchargement .pyTéléchargement .zip
Liens hypertexteslienNumWorks > Physique > Lien(Bouton en dessous)
Projets

Un site internet pour tester à la volée des…

Ici nous allons vous montrer un site internet pour essayer les codes HTML ; CSS ; javascript.

Introduction au projet

On ne voulait utiliser un site fait maison pour être sûr de pas se faire attaquer par le DNS du service informatique, qui peut arbitrairement décider de bloquer tel ou tel site web.

On a alors posé un cahier des charges :

  • Un site permettant de charger du HTML, du CSS et du JS.
  • Intuitif.
  • Un retour console pour le JS car c’est mieux que d’aller dans la console du navigateur.

Une fois fait, on s’est mis a coder, on était large, on avait 2 jours pour proposer au prof un outil clé en main.

Interface

L’idée de l’interface est simple :
<emb751|center>
En rouge : le site retour.
En bleu : les zones d’édition.
En noir : le bouton pour envoyer tout ce beau code

L’architecture est un système de div, très pratique pour la mise en page.
Afin de ne pas interférer avec le code éventuel des élèves, on donne des ID aléatoirement générés pour les parties vitales du site (inputs, outputs).

Le JavaScript

C’est la partie la plus importante du site.

Pour le bon fonctionnement du site, il nous faut 3 fonctions :

  • Une fonction de récupération de console.
  • Une fonction d’envoi du code.
  • Une fonction traitant le CSS à envoyer.

Récupération console

On réécrit la fonction console.log et on associe cette fonction à la fonction window.onerror.

<code class="javascript">Retour ligne automatique
console.log = function () Retour ligne automatique
// On recupère le message passé en argumentRetour ligne automatique
var message = [].join.call(arguments, " ") ;

// On crée un nouvel élément <div> qu'on ajoute dans le codeRetour ligne automatique
var div = document.createElement("div") ;Retour ligne automatique
div.appendChild(document.createTextNode(message)) ;Retour ligne automatique
document.getElementById("vfRDiMPLLlGMBuKV").appendChild(div) ;Retour ligne automatique
 ;

// Redéfinition de la fonction d'erreurRetour ligne automatique
window.onerror = console.log ;Retour ligne automatique
</code>

Fonction de traitement du CSS

On commence par convertir le CSS en une seule ligne.
Ensuite on split la chaine obtenue avec le charactère «  », ça nous permet d’avoir un Array contenant des strings commençant toujours par un objet à modifier en CSS ou une string vide.

Comme notre fenêtre visible et modifiable par les élèves porte l’ID « main », on ajoute « #main  » a chaque objet ou on remplace « body » par « #main » afin de n’affecter que la div main.

<code class="javascript">Retour ligne automatique
function convertCSS(code) Retour ligne automatique
code = code.replace("\n", "") ;Retour ligne automatique
code = code.replace("\r", "") ;Retour ligne automatique
var newCode = code.split("") ;Retour ligne automatique
for (var i = newCode.length ; i >= 0 ; i—) Retour ligne automatique
if (newCode[i] !== undefined && newCode[i] !== "") Retour ligne automatique
newCode[i] = newCode[i].replace(/^\s+|\s+$/g, "") ;Retour ligne automatique
if (newCode[i].startsWith("body")) Retour ligne automatique
newCode[i] = "#main " + newCode[i].substring(4) ;Retour ligne automatique
Retour ligne automatique
if (!newCode[i].startsWith("#main")) Retour ligne automatique
newCode[i] = "#main " + newCode[i] ;Retour ligne automatique
Retour ligne automatique
newCode[i] += "" ;Retour ligne automatique
Retour ligne automatique
Retour ligne automatique
return newCode.join("") ;Retour ligne automatique
Retour ligne automatique
</code>

Fonction d’envoi du code

On commence par clear la console.
Puis on envoie un retour console avec un id précis pour changer son style. Ce retour permet de nous assurer que le code a été envoyé.

On actualise les balises du site qui assurent le bon fonctionnement de la fenêtre main en prenant bien soin de traiter le CSS.

Problème principal lors de la réalisation de cette fonction :
Pour pouvoir modifier le JS de la fenêtre, il est indispensable de supprimer la balise < script > qui contient l’ancien JS. On ne peut pas juste réécrire le JS, sinon la cache ne s’actualise pas.

<code class="javascript">Retour ligne automatique
// Fonction d'envoi du codeRetour ligne automatique
var sendCode = function() Retour ligne automatique
document.getElementById("vfRDiMPLLlGMBuKV").innerHTML = "<p>Retour console</p>" ;Retour ligne automatique
// On crée un nouvel élément <div> qu'on ajoute dans le codeRetour ligne automatique
var div = document.createElement("div") ;Retour ligne automatique
div.id = "change" ;Retour ligne automatique
div.appendChild(document.createTextNode("Code envoyé !")) ;Retour ligne automatique
document.getElementById("vfRDiMPLLlGMBuKV").appendChild(div) ;Retour ligne automatique
// Changement HTMLRetour ligne automatique
document.getElementById("main").innerHTML = document.getElementById("html").value ;Retour ligne automatique
// Changement JSRetour ligne automatique
document.getElementById("toAdd").remove() ;Retour ligne automatique
var script = document.createElement("script") ;Retour ligne automatique
script.id = "toAdd" ;Retour ligne automatique
document.body.appendChild(script) ;Retour ligne automatique
document.getElementById("toAdd").innerHTML = document.getElementById("js").value ;Retour ligne automatique
// Changement CSS Retour ligne automatique
document.getElementById("maincss").innerHTML = convertCSS(document.getElementById("css").value) ;Retour ligne automatique
if(document.getElementById("html").value.toString().indexOf("<body onload=") !== -1)Retour ligne automatique
window[Retour ligne automatique
document.getElementById("html").value.substring(Retour ligne automatique
document.getElementById("html").value.toString().indexOf("\""Retour ligne automatique
,document.getElementById("html").value.toString().indexOf("<body onload="))+1Retour ligne automatique
,document.getElementById("html").value.toString().indexOf("("Retour ligne automatique
,document.getElementById("html").value.toString().indexOf("<body onload=")))]() ;Retour ligne automatique
Retour ligne automatique
</code>

Conclusion

Le site fut fini dans les temps et opérationnel !
https://workspace.nsi.xyz/