Foire aux questions du Module 2

FAQ générale du Module 2

Cette section comprend les questions posées et réponses au sujet de la matière abordée dans le module 2 du cours.

Version de Python utilisée par UpyLaB

MORGANE

Bonsoir,

Quelle version de Python UpyLaB utilise-t-il pour valider les codes ?

Réponse de l’équipe

Bonjour Morgane,

L’interpréteur Python utilisé actuellement dans UpyLaB tourne avec Python 3.5.3.

Ce n’est pas un souci pour tout ce qui est vu ici.

Malheureusement, pour ceux qui utilisent des concepts introduits dans Python 3.6 ou versions ultérieures, cela peut poser problème.

L’utilisation de f-strings, introduits dans la version 3.6, pose problème à UpyLaB qui voit le code comme une erreur de syntaxe.

De même le comportement des dictionnaires diffère légèrement entre les versions Python 3.5 et Python 3.8 au niveau de l’ordre des éléments insérés; cela peut impacter certains exercices qui fonctionneraient dans PyCharm (par exemple avec Python 3.8) mais qui ne seraient pas validés avec UpyLaB.

Nous ne pouvons mettre la dernière version durant cette session, sans risquer une interruption de service majeure. Désolés pour ceci.

Réponse de Morgane

Merci pour votre réponse

Module turtle

RODRIGUE

Bonsoir,

J’essaye d’exécuter un code qui utilise le module turtle et j’ai l’erreur suivante :

/Users/rodrigue/venv/bin/python
/Users/rodrigue/Library/Preferences/PyCharmCE2018.3/scratches/scratch_64.py
Traceback (most recent call last): File
"/Users/rodrigue/Library/Preferences/PyCharmCE2018.3/scratches/scratch_64.py",
line 3, in <module> turtle.up() AttributeError: module
'turtle' has no attribute 'up'

Process finished with exit code 1

Réponse de l’équipe

Bonjour Rodrigue,

Le message d’erreur produit par l’interpréteur Python indique, en bas de message, que le module turtle``n'a pas d'attributs ``up. Je vois que le fichier contenant ton script s’appelle scratch_64.py, ce qui ne devrait pas poser de souci, mais es-tu sûr que tu n’as pas un script que tu as appelé turtle.py ?

Si c’est le cas, c’est ce script qui est importé lors de l’instruction import turtle en lieu et place du module turtle contenant toutes les méthodes désirées.

Renomme ce fichier différemment d’un module que tu utilises (donc non plus math.py, random.py, …) et ton code devrait fonctionner.

Réponse de Rodrigue

Effectivement, j’avais nommé un fichier turtle.py, ce qui n’était donc pas une bonne idée.

Merci !

Christophe

Bonjour,

Je ne parviens pas à utiliser le module turtle sur mon MacBook Pro. Voici l’erreur que j’obtiens (j’utilise la version de Python livrée par défaut, mais l’erreur se produit également avec une version plus récente installée avec pyenv) :

import _tkinter # If this fails your Python may not be configured for Tk

ModuleNotFoundError: No module named '_tkinter'

Que faut-il faire ? Y a-t-il un utilisateur de Mac qui pourrait m’aider à régler ça s’il vous plaît ? :-)

Merci,

Ch

Réponse de l’équipe

Bonjour,

Cette erreur est étrange ; il vaut mieux privilégier l’installation standard de Python plutôt que de passer via pyenv. Néanmoins, si cette erreur survient, vous pouvez la résoudre en réinstallant Python par pyenv après avoir installé le paquet tcl-tk via Homebrew. Il faut alors spécifier ceci lors de l’installation de Python avec Tk (copiez-collez la ligne) :

~ env PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" pyenv install 3.8.1

L’équipe.

Alain

Bonjour,

J’ai une erreur lorsque j’importe le module turtle sur mon ordinateur tournant sous Linux :

ModuleNotFoundError: No module named 'tkinter'

et :

name 'turtle' is not defined

Que faut-il faire ?

Merci,

Alain

Réponse de l’équipe

Bonjour,

Il semble que votre système ne contienne pas un module nécessaire pour turtle, à savoir Tkinter. Le souci devrait se régler en installant le paquet python3-tk via : sudo apt install python3-tk (sous Ubuntu) ou via le lien correspondant du paquet python3-tkinter sous les distributions utilisant des paquets de type RPM (Mageia, Fedora, OpenSuSe, …).

L’équipe.

Ordre d’évaluation du modulo

DEDA

Bonjour à toutes et tous,

Je comprends mal la correction de la dernière question de la section 2.2. Celle avec l’ordre d’exécution des opérateurs par rapport au modulo.

Je lis que dans 2 % 2 * 2, le résultat est 0

2 % 2 est évalué avant * 2 (* et % associatifs à gauche et ont la même priorité).

Vu que 2 % 2 est évalué avant la multiplication je serais tenté de dire que modulo a une priorité supérieure à la multiplication. Par ailleurs, je pense mal comprendre la notion d’associativité à gauche. Dois-je comprendre que cela veut dire que a * b * c est équivalent à (a * b) * c ?

réponse de Steve

Bonjour Deda,

l’ordre de priorité des opérateurs arithmétiques est :

1° exponentiations

2° divisions, multiplications et modulo

3° additions et soustractions

dans un même niveau de priorité, l’évaluation va de gauche à droite sauf pour l’exponentiation qui est une exception où 5 ** 2 ** 3 est égal à 5 ** (2 ** 3).

Les parenthèses servent à modifier cet ordre si nécessaire.

https://www.tutorialspoint.com/python/operators_precedence_example.htm

Explication du Quiz sur la mousse au chocolat

ANTOINE

Bonjour,

Je ne comprends pas les calculs présents dans le quizz sur la mousse au chocolat.

Merci d’avance pour votre aide.

réponse de l’équipe

Bonjour Antoine, Quand on a 3 oeufs pour 4 personnes et qu’on veut savoir combien on en a besoin pour 7 personnes, il suffit d’utiliser la règle de trois. Pour cela, on calcule le nombre d’oeufs pour 1 personne d’abord en divisant 3 oeufs par 4 (car 3 oeufs étaient nécessaires pour 4 personnes, il faut donc ¾ d’oeuf pour 1 personne) et ensuite on multiplie cela par 7 (pour 7 personnes). Nous obtenons un chiffre avec une décimale donc il suffit d’arrondir avec la fonction round que nous avons vue. Cela revient à multiplier les 3 oeufs par 7/4 et nous arrondissons : round(3 * 7 / 4).

J’espère que cette explication est assez claire.

L’équipe.

Utiliser une fonction prédéfinie

JOSEPH

Bonjour,

Comment utiliser la fonction “round” prédéfinie dans Python ?

Merci.

Réponse de l’équipe

Bonjour,

Pour savoir comment utiliser une fonction prédéfinie de Python, il suffit de taper “help(nom de la fonction)” dans la console (comme mentionné dans la vidéo de la section 2.5). Pour plus d’information sur le fonctionnement d’une fonction et comment créer les vôtres, rendez-vous au module 4 ou patientez si ce dernier n’est pas encore disponible.

L’équipe.

Nom de variables

SIMON

Bonjour,

Après avoir défini la variable min = 4, je ne peux plus utiliser la fonction min(5, 10), pourquoi ?

Merci.

Réponse de l’équipe

Bonjour,

C’est normal, vous avez redéfini min (qui était une fonction prédéfinie Python) en entier valant 4. Vous ne pouvez donc plus utiliser la fonction.

Pour cela, il est déconseillé d’utiliser des noms de variables ayant déjà une signification dans Python comme min, max, print.

Voici une liste des mots et noms de fonctions réservés de Python : https://fr.wikibooks.org/wiki/Programmation_Python/Tableau_des_mots_r%C3%A9serv%C3%A9s

L’équipe.

Intérêt des constantes

Léon

Bonjour,

Je ne comprends pas l’intérêt des « constantes ».

Merci.

Réponse de l’équipe

Bonjour,

Une constante est une variable dont la valeur ne change pas durant l’exécution du code. L’intérêt d’une constante peut vous paraître assez limité pour l’instant mais elle se révèle très pratique pour définir une valeur fixée telle que la valeur de la TVA, la taille maximale d’une fenêtre, le nombre pi, etc. Ainsi, on peut très facilement réutiliser ces variables. Si on utilise la variable TVA à plusieurs endroits de notre programme et qu’un jour on souhaite augmenter la TVA de 21 à 22%, il suffira de modifier une seule variable plutôt que de changer la valeur 21 qu’on utilise partout et de relancer notre code. C’est également plus clair que d’avoir des “nombres magiques” un peu partout dans le code : 21 pour la TVA, 1080 pour la définition de l’écran, …

Ceci est expliqué dans la section 4.4 que vous pourrez lire plus tard

L’équipe.

La fonction input()

Sarah

Bonjour,

La fonction input() (du module 2.5) peut-elle prendre d’autres types que le float ?

Merci.

Réponse de l’équipe

Bonjour,

Oui, vous pouvez entrer du texte (“string” ou “chaîne de caractères”) également. Dans tous les cas, que vous entriez des nombres (entiers ou à virgule) ou du texte, la fonction input() convertira votre input vers un string, il sera donc nécessaire de transformer votre input en entier ou flottant si vous voulez effectuer des actions dessus. N’hésitez pas à tester par vous même ! Exemple : que se passe-t-il si vous faites int(input(“Nombre : “)) et que vous donnez un string à l’input ? Est-ce logique ?

L’équipe.

PythonTutor

Emile

Bonjour,

PythonTutor ne parvient pas à exécuter mon code alors que celui-ci fonctionne sur ma machine.

Merci.

Réponse de l’équipe

Bonjour,

Vérifiez que vous utilisez la bonne version de Python (en l’occurrence la 3.6) dans PythonTutor.
PythonTutor - Sélection de la bonne version Python

L’équipe.

Import de fonctions

Sévrine

Bonjour,

Comment faire pour n’importer que la fonction cosinus du module math par exemple ?

Merci.

Réponse de l’équipe

Bonjour,

Il suffit d’écrire : from math import cos (Comme indiqué dans la première vidéo de la section 2.6.)

L’équipe.

Aide de la fonction « help() »

Elinne

Bonjour,

Pourquoi j’obtiens une erreur lorsque je tape “help(math)” ?

Merci.

Réponse de l’équipe

Bonjour,

Car “math” est un module, une librairie de Python. Il faut d’abord l’importer avec l’instruction “import math” puis taper “help(math)”. (Comme indiqué dans la première vidéo de la section 2.6.)

L’équipe.

Aide sur Turtle

Anthony

Bonjour,

J’ai un problème avec turtle : la tortue ne va pas dans la bonne direction. Comment faire ?

Merci.

Réponse de l’équipe

Bonjour,

Faites attention à la direction de la tortue en regardant vers où la flèche pointe. Au début, la tortue va regarder vers la droite (0°). Si vous la faites tourner de 90° vers la droite, elle regardera vers le bas, si vous la faites tourner de 90° vers le haut, elle regardera vers le haut. Mais attention, si elle regarde déjà vers le haut, tourner la tortue à gauche de 90° va la faire regarder vers la gauche. Lorsqu’on lui dit de tourner à gauche/droite, c’est par rapport à sa direction actuelle.

L’équipe.

Alexandre

Bonjour,

La fenêtre avec la tortue s’est directement fermée. Comment faire pour la garder ?

Merci.

Réponse de l’équipe

Bonjour,

N’oubliez pas l’instruction finale “turtle.done()“ dans le cas d’un script afin de garder la fenêtre ouverte. (Comme indiqué dans la deuxième vidéo du module 2.6.)

L’équipe.

Roger

Bonjour,

Dans turtle, la forme n’a pas été coloriée.

Merci.

Réponse de l’équipe

Bonjour,

N’oubliez pas de commencer par turtle.begin_fill() et de finir par turtle.end_fill()

L’équipe.

FAQ UpyLaB du Module 2

Cette section comprend les questions posées et réponses au sujet des exercices UpyLaB proposés dans le module 2 du cours.

Erreurs d’arrondis

ALINE

Bonjour,

Plusieurs exercices UpyLaB du module 2 (et certains de modules ultérieurs) demandent de calculer et parfois d’afficher des valeurs fractionnaires (float). Les calculs ne sont pas totalement précis et donc UpyLaB renvoie des résultats avec des erreurs d’arrondi. Par exemple avec a = 100, a * cos(pi / 3) donne 50.000000000000014 et -a * cos(5 * pi / 3) donne -49.99999999999998 à la place respectivement de 50.0 et -50.0. Est-ce un souci ?

J’ai utilisé round(res, 3) avec res valant -77.94228634059945 (ce qui donne 77.942, et UpyLaB ne valide pas mon exercice.

Réponse de l’équipe

Bonjour ALINE,

L’exerciseur UpyLaB tient compte dans les calculs des erreurs de troncature et d’arrondi, généralement avec une tolérance de l’ordre de 1.0e-5 ; donc 50.0 ou 50.000000000000014 ou encore -49.99999999999998 seront jugés égaux par l’outil.

Par contre entre -77.942 et -77.94228634059945 la différence est trop importante et due à des calculs différents. L’utilisation de round( , 3) dans votre code est donc à proscrire ici.

Bonne continuation.

UpyLaB 2.1

JÉRÔME

Bonjour,

Lorsque je fais le premier exercice d’assignation, le code fonctionne dans Python Tutor sans signalement d’erreurs mais ne fonctionne pas pour la chaine de caractères dans upylab. Je l’ai testé dans spyder sous anaconda. Merci de votre aide.

Réponse de l’équipe

Bonjour JÉRÔME,

Les détails ont de l’importance. Ici le nom des variables, le texte précis, …

Bon travail.

Réponse de MORGANE

Oui même le choix majuscule/minuscule… tout doit être exactement comme demandé.

Réponse de JÉRÔME

Merci à tous. J’avais effectivement mis bonjour à la place de Bonjour.

WILLY

Bonjour,

J’ai du mal à utiliser input. En effet quand j’écris input sans paramètre rien ne s’affiche le programme attend. Tandis que si je mets input("produit = "+str(x*x)) ça répond à la question mais il s’arrête encore et rien ne se passe. Merci

Réponse de l’équipe

La fonction input est utilisée pour lire des valeurs saisies au clavier par l’utilisateur. Il est donc normal que ton programme se fige : il attend tout simplement que tu saisisses quelque chose. Si tu veux afficher quelque chose, c’est la fonction print qu’il faut utiliser.

Réponse de WILLY

Mais dans cet exercice, on nous demande de ne pas utiliser la fonction print.

Réponse de l’équipe

Effectivement. Dans cette activité, il s’agit simplement d’affecter des valeurs à des variables. Il ne doit donc y avoir ni appel à print, ni appel à input dans le code que l’on soumet à UpyLaB.

Cependant, si tu veux exécuter ton code dans PyCharm et visualiser le résultat, il te faudra là ajouter des appels à print.

Bon courage !

Réponse de WILLY

Merci pour la réponse. Cela fonctionne.

Non-validation par UpyLaB

2.1a

div_entiere = 36 / 5

Explication et conseil :

En Python 3, 36 / 5 donne la valeur 7.2 et la division entière utilise l’opérateur // (36 // 5 donne 7). Notez que si 36 / 5 donne la valeur 7 dans votre environnement PyCharm ou l’environnement de développement (IDE) que vous utilisez (IDLE, Thonny, Spyder, Eclipse, Pydev, …) cela signifie que vous utilisez un mauvais interpréteur (Python 2.7 par exemple). Dans ce cas, vous devez modifier l’interpréteur que vous utilisez (interpréteur Python 3.8 par exemple) car dans ce cours nous apprenons Python 3 et pas Python 2 !

2.1b

pi = 3,14159
      ^

Explication et conseil :

En Python, la partie fractionnaires des nombres float (fractionnaires) est précédée par un point . et pas une vigule ,. Nous verrons que la virgule est utilisée pour définir des tuples. Ainsi, on peut voir qu’après avoir fait pi = 3,14159, l’instruction print(pi) imprime le tuple (ici le couple) d’entiers (3, 14159)

2.1c

print('x = 36')
...
print ('mon_texte = "Bonjour"')

Ne passe pas le test UpyLaB !

Explication et conseil :

L’exercice demande de faire des assignations à des variables et non des print.

UpyLaB 2.2

RÉJANE

Bonjour,

J’ai toujours une erreur UpyLaB sur les 4 lignes du genre :

L'appel à votre programme sur l'input ``1.0↵2.0↵`` a renvoyé:
taper la valeur de a : taper la valeur de b : la moyenne est :

Le résultat attendu était : 1.5

Réponse de l’équipe

Bonjour Réjane,

Lisez bien les consignes de l’énoncé : il ne faut pas mettre de texte supplémentaire dans les input et dans les print :

a = int(input())
print(a)

Et non :

a = int(input('Valeur de a :'))
print('a = ', a)

Réponse de RÉJANE

Merci beaucoup.

LUC

Bonsoir,

J’ai bien deux variables a et b lues par input et qui sont des float. Puis je calcule la moyenne par a + b / 2 mais UpyLaB refuse de valider.

Réponse de l’équipe

Bonsoir Luc,

Attention à la priorité des opérateurs.

Réponse de LUC

Effectivement la division est plus prioritaire que l’addition : il me fallait des parenthèses. Merci.

Erreurs de syntaxe

2.2a

a = float(input())
b = float(input())
(a + b) / 2
print(res)
      ^

Explication et conseil : La variable res n’a pas été définie et Python ne sait donc pas quoi imprimer à la ligne 4. À la ligne 3, Python fait le calcul demandé, mais le résultat n’est assigné à aucune variable et est donc inaccessible dans la suite du programme.

2.2b

float(input(a))
^

Explication et conseil : Ceci n’est pas une erreur de syntaxe à proprement parler, à condition que la variable a ait été définie en amont, mais ce n’est pas comme cela que s’utilise la fonction input. Cette fonction retourne un résultat qui doit être affecté, à l’aide de l’opérateur d’affectation =, à une variable si on veut conserver cette valeur.

2.2c

a = float((input())
          ^

Explication et conseil : Cette instruction contient 3 parenthèses ouvrantes et 2 parenthèses fermantes. De ce fait, elle est syntaxiquement incorrecte et il faut supprimer la seconde parenthèse ouvrante.

De façon générale, il vous faudra toujours vérifier, quand vous utilisez des fonctions, que chaque parenthèse ouvrante est bien contrebalancée par une parenthèse fermante correspondante.

Non validation par UpyLaB

Voici quelques exemples de réponses non validées par UpyLaB pour l’exercice UpyLaB 2.2.

2.2d

a = float(input())
b = float(input())
res = (a + b) / 2

Explication et conseil : Ce code n’affiche rien !

2.2e

a = 2.0
b = 3.0
print((a + b) / 2)

Explication et conseil : Il est attendu de calculer la moyenne arithmétique de deux nombres saisis par l’utilisateur. Ces valeurs doivent être lues, grâce à des appels à la fonction input. Les valeurs 2.0 et 3.0 ne sont que des exemples.

2.2f

print((a + b) // 2)

Explication et conseil : Quel opérateur Python permet de calculer une division décimale ?

UpyLaB 2.3

BRUNO

Bonjour,

Je me mélange un peu les pinceaux entre console et scratch. Quand on fait print('Bonjour') dans la console ou dans un fichier scratch on obtient la même chose. Par contre, on ne peut pas faire d’opération (par exemple 2 + 2) dans le fichier scratch.

Réponse de l’équipe

Bonjour Bruno,

2+2 est une expression arithmétique, qu’un interprète Python comprend… quand on la tape dans une console, l’interprète pour nous montrer qu’il sait faire ce calcul, nous affiche en retour la valeur de cette expression.

Quand on écrit un script, on va écrire une succession d’instructions. Si on tape juste une expression mais sans préciser ce qu’on veut en faire, Python n’en fait rien.

Ainsi,

avec un script qui contient :

2+2

Je peux l’exécuter, il n’y aura pas d’erreur mais il ne se passera rien. Je n’ai pas dit à l’interprète quoi faire avec ce 2+2… Si je fais :

print(2+2)

Cette fois j’ai une instruction (l’appel à la fonction print) qui utilise cette expression 2+2… et Python va m’afficher 4. J’espère que cela clarifie les choses pour vous, la différence entre expression et instruction.

Réponse de BRUNO

Merci beaucoup. Je comprends mieux oui.

Non validation par UpyLaB

Voici quelques exemples de codes parmi les réponses non validées par UpyLaB pour l’exercice UpyLaB 2.3.

2.3a

a = float(input(3.5))

Explication et conseil : Mauvaise utilisation de l’input. Ce code affiche 3.5 avant de demander une valeur en entrée. Donc soit le code soumis à UpylaB demande d’entrer une valeur que l’on veut affecter à la variable a ce qui correspond à :

a = float(input())

soit le code veut simplement assigner à a une valeur fractionnaire valant 3.5 mais alors il s’agit d’une simple assignation :

a = 3.5

2.3b

print((a * b) / c))

Explication et conseil : Ceci ne correspond pas au calcul demandé dans l’énoncé UpyLaB 2.3 !

2.3c

print((b * c) // a))

Explication et conseil : Quel opérateur Python permet de calculer une division décimale ?

UpyLaB 2.4

LIONEL

Bonjour,

Sur l’exercice 2.4 mon code génère l’erreur suivante :

ImportError: No module named '_tkinter', please install the python3-tk

Comment la résoudre ?

Réponse de l’équipe

Bonjour Lionel,

Je dirais simplement que UpyLaB ne demande pas et n’autorise pas turtle ni tk.

Réponse de LIONEL

Effectivement j’ai bien relu l’énoncé et terminé l’exercice. Merci.

ALINE

Bonjour,

Est-ce qu’il y a une différence de précision de calcul sous unix et sous windows ? Je ne comprends pas comment vous arrivez avec une précision différente entre a*cos(60) qui vaut 45.00000000000001 et -a*cos(60) qui vaut -44.99999999999998. Le résultat aurait été plus facile si vous aviez demandé un arrondi à n décimales.

Réponse de l’équipe

Bonjour ALINE,

Que vous écriviez votre code dans Upylab sous Windows ou sous Linux ne change pas le résultat, car le code est exécuté sur un serveur différent de votre ordinateur. L’exerciseur UpyLaB tient compte dans les calculs des erreurs de troncature et d’arrondi (donc 45.0 ou 45.00000000000001 seront jugés égaux par l’outil).

Par contre entre -77.942 et -77.94228634059945 la différence est trop importante et due à des calculs différents. Ici probablement l’utilisation de round( , 3) dans votre code.

Bonne continuation.

KIM

Bonsoir,

Je suis complètement bloqué à l’exercice UpyLaB 2.5. Je serai capable de créer un petit programme sans problème, mais je suis nul en géométrie. Je ne vois pas quelles formules permettent de donner les coordonnées des points par rapport à la longueur du rayon.

Réponse de XAVIER

Bonjour Kim,

Il faut effectivement se replonger dans le cercle trigonométrique… Vous pouvez aller sur Wikipédia (ou autre) et chercher « cercle trigonométrique ». On vous donne les valeurs remarquables en fonction de pi (avec l’équivalence en degré). Par exemple, 60° correspond à pi/3 (puisque 180° c’est pi !). Pour trouver les coordonnées d’un point : pour x, c’est le rayon * cos de l’angle et pour y, le rayon * sin de l’angle…

Bon courage !

Réponse de KIM,

J’ai résolu l’excercice ! Merci pour votre aide !!

ARTHUR

Bonsoir,

Je n’arrive pas à afficher les deux coordonnées x, y sur une même ligne et séparées par une espace comme dans le résultat. Les miennes s’affichent les unes en dessous des autres. Y a-t-il une fonction particulière pour cela?

Réponse de l’équipe

Bonjour Arthur,

Pour cela, écris les deux arguments dans le même appel à la fonction print :

print("hello", "world")

Réponse d’AMINE,

Il est mentionné dans la doc de la fonction print accessible depuis un interprète Python par help(print) qu’un séparateur qui est l’espace par défaut est intercalé entre les valeurs. On peut changer ce séparateur. Par exemple pour une virgule :

print(a, b, sep=',')

MORGANE

Bonjour,

Je reviens vers vous car ma formule n’arrondit pas de la même façon alors comment faire.

L'appel à votre programme sur l'input ``90↵`` a renvoyé:
(90.0, 0.0) (45.00000000000001, 77.94228634059948) (-44.99999999999998, 77.94228634059948)
(-90.0, 0.0) (-45.00000000000001, -77.94228634059948) (-44.99999999999998, -77.94228634059948)

Le résultat attendu était :
90.0 0.0 45.00000000000001 77.94228634059948 -44.99999999999998 77.94228634059948
-90.0 0.0 -45.00000000000004 -77.94228634059945 45.00000000000001 -77.94228634059948

Réponse de l’équipe,

Le problème ne provient pas des arrondis, puisqu’UpyLaB est assez tolérant à leur égard. Mais ton programme affiche des parenthèses qui ne sont pas attendues. Essaie sans elles. Regarde la différence entre print((1, 2)) et print(1, 2).

Astuce de l’équipe

Pensez à donner à vos fonctions sinus et cosinus des angles en radian. Utilisez donc math.cos(math.pi/3) plutôt que math.cos(60).

Par ailleurs, 180° = 1*pi radian, donc 240° = 4/3*pi radian. Donc 300° = ?

Attention, les valeurs finales demandées doivent toutes être des float. Donc si vous devez afficher la valeur 0, il faut écrire 0.0 !

UpyLaB 2.5

LÉA

Bonjour,

On demande d’écrire un programme, qui lit deux valeurs entières x et y strictement positives. J’arrive à faire tout le programme sauf avoir des nombres strictements positifs. Quelqu’un aurait-il une idée ?

Réponse de FABRICE

Bonjour Léa,

À ce stade du cours, il ne nous est pas demandé de vérifier la validité des entrées. Nous devons simplement récupérer deux entiers grâce aux fonctions input et int en sachant qu’UpyLaB, au moment de tester notre programme, ne fournira que des entiers positifs.

Réponse de Léa

Merci Fabrice, c’est compris.

KIM

Bonjour,

Je suis coincé :

L'appel à votre programme sur l'input ``2↵7↵1.5↵25.0↵`` a renvoyé:

-5.0 3.5 26.5 3.0 1.0 0.25 1.6875 0.7071067811865476

Le résultat attendu était :

-5 3.5 26.5 3.0 1.0 0.25 1.6875 0.7071067811865476

Je ne comprends pas d’où peut venir l’erreur. Pourquoi dans le résultat attendu n’y a t’il aucun chiffre après la virgule contrairement aux autres ?

Réponse de l’équipe

Bonjour,

Le type des résultats est important aussi. -5 et -5.0 ne sont pas de même type. Éventuellement revois la matière (int, float).

Non validation par UpyLaB

Voici quelques exemples de codes parmi les réponses non validées par UpyLaB pour l’exercice UpyLaB 2.5.

2.5a Pour l’avant-dernière expression à imprimer

print((x+y)*z/4*x)

Explication et conseil : Qu’affiche l’instruction print(8 / 4 * 2) d’après vous ? Testez-le si vous pensez que le résultat est 1 et revoyez la notion d’associativité des opérateurs.

2.5b Pour la première expression à imprimer

x = float(input())
y = float(input())
print(x - y)

Explication et conseil : Lisez toujours bien les consignes. En particulier, quel type doivent avoir les variables x et y ? De façon générale, quel type doit avoir chacun des résultats (int, float, …) ?

UpyLaB 2.6

AMINE

Bonjour,

Bonsoir, je n’arrive pas à comprendre la différence ; L’appel à votre programme a renvoyé:

Hello World
Aujourd'hui
C'est "Dommage!"
Hum \o/

Le résultat attendu était :

Hello World
Aujourd'hui
C'est "Dommage!"
Hum \o/

Il ne me semble pas y avoir de problème d’espace… pourtant mon programme n’est pas validé.

Réponse de l’équipe

Bonjour Amine,

Tu n’as pas laissé d’espace à la fin ?

Réponse d’Amine

Merci, c’est un classique mais je ne le voyais pas : à la ligne 3 entre les deux " " finaux. Cette fois cela fonctionne.

XAVIER

Bonjour,

Je n’arrive pas du tout à écrire la 3e ligne :

C'est "Dommage!"

Cela doit être avec les " " mais si je remplace par des ' ' ça bloque aussi puisqu’il apparait dans "c'est". J’ai bien vérifié les espaces, je ne vois vraiment pas ce qui ne va pas ! Comment faire ?

Réponse de l’équipe

Bonjour Xavier,

La difficulté vient bien du fait qu’il faut afficher à la fois une apostrophe et des guillemets. Comment peut-on faire pour afficher un caractère spécial sans que Python l’interprète comme un élément de la syntaxe ?

Bon débogage.

Non validation par UpyLaB

Voici quelques exemples de morceaux de codes parmi les réponses non validées par UpyLaB pour l’exercice UpyLaB 2.6.

2.6a

print('Hello World ')
print(" Aujourd'hui")
print(" C'est \"Dommage !\"  ")
print(" Hum \o/ ")

Explication et conseil : Une espace en trop ou en moins peut facilement apparaître dans de tels textes. Il faut être méticuleux, ou si possible faire des copier / coller à partir de l’énoncé pour éviter les erreurs de recopiage. Par ailleurs, les éléments nécessaires pour résoudre ce problème (ici afficher du texte avec des caractères particuliers) peuvent souvent être trouvés dans les explications du cours. Ici, en section 2.7.1, des explications sur les caractères d’échappement aident à la réalisation de l’exercice.

UpyLaB 2.7

JULIE

Bonjour,

J’obtiens des erreurs dues aux arrondis sur le dernier chiffre. J’ai essayé la fonction round sans succès.

Réponse de l’équipe

Bonjour Julie,

Dans cet exercice, il ne faut pas utiliser la fonction round. D’autre part n’oublie pas de bien utiliser la fonction float() avec le input().

Réponse de JULIE

Merci beaucoup.

Non validation par UpyLaB

Voici un exemple de morceau de code parmi les réponses non validées par UpyLaB pour l’exercice UpyLaB 2.7.

2.7a

...
print(4/3*3.14*rayon**3)

Explication et conseil : Même si ce n’est pas explicitement indiqué dans les consignes, utilisez toujours la valeur de pi la plus précise. Importez cette valeur du module math.