.. |nbsp| unicode:: 0xA0 :trim: ======================================== 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** .. topic:: Bonsoir, Quelle :index:`version de Python` UpyLaB utilise-t-il pour valider les codes ? .. topic:: 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 :index:`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. .. topic:: Réponse de Morgane Merci pour votre réponse Module turtle ------------- **RODRIGUE** .. topic:: Bonsoir, J'essaye d'exécuter un code qui utilise le module :index:`turtle` et j'ai l'erreur suivante : .. code-block:: none /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 turtle.up() AttributeError: module 'turtle' has no attribute 'up' Process finished with exit code 1 .. topic:: 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. .. topic:: Réponse de Rodrigue Effectivement, j'avais nommé un fichier ``turtle.py``, ce qui n'était donc pas une bonne idée. Merci ! **Christophe** .. topic:: 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) : .. code-block:: none 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 .. topic:: 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) : .. code-block:: none ~ 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** .. topic:: Bonjour, J'ai une erreur lorsque j'importe le module turtle sur mon ordinateur tournant sous Linux : .. code-block:: none ModuleNotFoundError: No module named 'tkinter' et : .. code-block:: none name 'turtle' is not defined Que faut-il faire ? Merci, Alain .. topic:: 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** .. topic:: 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`` ? .. topic:: réponse de Steve Bonjour Deda, l'ordre de priorité des opérateurs arithmétiques est |nbsp| : 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. ``_ Explication du Quiz sur la mousse au chocolat --------------------------------------------- **ANTOINE** .. topic:: Bonjour, Je ne comprends pas les calculs présents dans le quizz sur la mousse au chocolat. Merci d'avance pour votre aide. .. topic:: 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** .. topic:: Bonjour, Comment utiliser la fonction “round” prédéfinie dans Python ? Merci. .. topic:: 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** .. topic:: Bonjour, Après avoir défini la variable ``min = 4``, je ne peux plus utiliser la fonction ``min(5, 10)``, pourquoi ? Merci. .. topic:: 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** .. topic:: Bonjour, Je ne comprends pas l'intérêt des "constantes". Merci. .. topic:: 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** .. topic:: Bonjour, La fonction input() (du module 2.5) peut-elle prendre d’autres types que le float ? Merci. .. topic:: 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** .. topic:: Bonjour, PythonTutor ne parvient pas à exécuter mon code alors que celui-ci fonctionne sur ma machine. Merci. .. topic:: Réponse de l'équipe Bonjour, Vérifiez que vous utilisez la bonne version de Python (en l'occurrence la 3.6) dans PythonTutor. .. figure:: ../fig/pythontutor_1.png :alt: PythonTutor - Sélection de la bonne version Python :align: center L'équipe. Import de fonctions ----------------------------------------- **Sévrine** .. topic:: Bonjour, Comment faire pour n’importer que la fonction cosinus du module math par exemple ? Merci. .. topic:: 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** .. topic:: Bonjour, Pourquoi j’obtiens une erreur lorsque je tape “help(math)” ? Merci. .. topic:: 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** .. topic:: Bonjour, J'ai un problème avec turtle : la tortue ne va pas dans la bonne direction. Comment faire ? Merci. .. topic:: 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** .. topic:: Bonjour, La fenêtre avec la tortue s’est directement fermée. Comment faire pour la garder ? Merci. .. topic:: 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** .. topic:: Bonjour, Dans turtle, la forme n’a pas été coloriée. Merci. .. topic:: 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** .. topic:: 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. .. topic:: 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`` |nbsp| ; 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** .. topic:: 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. .. topic:: 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. .. topic:: Réponse de MORGANE Oui même le choix majuscule/minuscule... tout doit être exactement comme demandé. .. topic:: Réponse de JÉRÔME Merci à tous. J'avais effectivement mis ``bonjour`` à la place de ``Bonjour``. **WILLY** .. topic:: 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 .. topic:: 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. .. topic:: Réponse de WILLY Mais dans cet exercice, on nous demande de ne pas utiliser la fonction ``print``. .. topic:: 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 ! .. topic:: Réponse de WILLY Merci pour la réponse. Cela fonctionne. Non-validation par UpyLaB ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **2.1a** .. code-block:: python 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** .. code-block:: python 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** .. code-block:: python 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** .. topic:: Bonjour, J'ai toujours une erreur UpyLaB sur les 4 lignes du genre : .. code-block:: none 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 .. topic:: 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`` : .. code-block:: python a = int(input()) print(a) Et non : .. code-block:: python a = int(input('Valeur de a :')) print('a = ', a) .. topic:: Réponse de RÉJANE Merci beaucoup. **LUC** .. topic:: 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. .. topic:: Réponse de l'équipe Bonsoir Luc, Attention à la priorité des opérateurs. .. topic:: 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** .. code-block:: python 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** .. code-block:: python 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** .. code-block:: python 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** .. code-block:: python a = float(input()) b = float(input()) res = (a + b) / 2 **Explication et conseil** : Ce code n'affiche rien ! **2.2e** .. code-block:: python 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** .. code-block:: python print((a + b) // 2) **Explication et conseil** : Quel opérateur Python permet de calculer une division décimale ? UpyLaB 2.3 ---------------------- **BRUNO** .. topic:: 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. .. topic:: 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 : .. code-block:: python 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 : .. code-block:: python 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**. .. topic:: 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** .. code-block:: python 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 à : .. code-block:: python 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 : .. code-block:: python a = 3.5 **2.3b** .. code-block:: python print((a * b) / c)) **Explication et conseil** : Ceci ne correspond pas au calcul demandé dans l'énoncé UpyLaB 2.3 ! **2.3c** .. code-block:: python print((b * c) // a)) **Explication et conseil** : Quel opérateur Python permet de calculer une division décimale ? UpyLaB 2.4 ---------------------- **LIONEL** .. topic:: Bonjour, Sur l'exercice 2.4 mon code génère l'erreur suivante : .. code-block:: none ImportError: No module named '_tkinter', please install the python3-tk Comment la résoudre ? .. topic:: Réponse de l'équipe Bonjour Lionel, Je dirais simplement que UpyLaB ne demande pas et **n'autorise pas** turtle ni tk. .. topic:: Réponse de LIONEL Effectivement j'ai bien relu l'énoncé et terminé l'exercice. Merci. **ALINE** .. topic:: 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. .. topic:: 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** .. topic:: 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. .. topic:: 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 ! .. topic:: Réponse de KIM, J'ai résolu l'excercice ! Merci pour votre aide !! **ARTHUR** .. topic:: 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? .. topic:: Réponse de l'équipe Bonjour Arthur, Pour cela, écris les deux arguments dans le même appel à la fonction ``print`` : .. code-block:: python print("hello", "world") .. topic:: 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 : .. code-block:: python print(a, b, sep=',') **MORGANE** .. topic:: Bonjour, Je reviens vers vous car ma formule n'arrondit pas de la même façon alors comment faire. .. code-block:: none 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 .. topic:: 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)``. .. topic:: 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** .. topic:: 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 ? .. topic:: 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. .. topic:: Réponse de Léa Merci Fabrice, c'est compris. **KIM** .. topic:: Bonjour, Je suis coincé : .. code-block:: none 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 ? .. topic:: 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 .. code-block:: python 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 .. code-block:: python 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** .. topic:: Bonjour, Bonsoir, je n'arrive pas à comprendre la différence ; L'appel à votre programme a renvoyé: .. code-block:: python Hello World Aujourd'hui C'est "Dommage!" Hum \o/ Le résultat attendu était : .. code-block:: python 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é. .. topic:: Réponse de l'équipe Bonjour Amine, Tu n'as pas laissé d'espace à la fin ? .. topic:: 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** .. topic:: Bonjour, Je n'arrive pas du tout à écrire la 3e ligne : .. code-block:: python 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 ? .. topic:: 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** .. code-block:: python 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** .. topic:: Bonjour, J'obtiens des erreurs dues aux arrondis sur le dernier chiffre. J'ai essayé la fonction ``round`` sans succès. .. topic:: 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()``. .. topic:: 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** .. code-block:: python ... 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``.