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.
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
.