Foire aux questions du Module 3

FAQ générale du Module 3

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

UpyLaB du Module 3

UpyLaB 3.1

ARTHUR

Bonjour,

Dans l’exercice 3.1 je suis bloqué, mon code soumis donne cette erreur :

L’appel à votre programme sur l’input 3↵5↵4 a renvoyé:

Le résultat attendu était : Aucun print

Réponse de l’équipe

Le problème est que print("") ne va rien afficher de visible, mais tout de même ajouter une ligne vide. Ce qui n’est pas ce qui est attendu ici.

Reprends la consigne : il n’y a rien à imprimer dans certains cas, pourquoi vouloir utiliser print alors ?

Réponse d’Arthur

Donc je laisse vide ma section else… mais cette fois j’ai une erreur de syntaxe. Si j’écris continue j’ai aussi des erreurs.

Réponse de l’équipe

As-tu vraiment besoin d’une clause else ici ?

Réponse d’Arthur

Effectivement, j’ai retiré le else et tout va bien. Merci.

OCEANE

Bonjour,

Pour l’exercice 3.1, UpyLaB valide certains tests mais pas d’autres. Par exemple :

L’appel à votre programme sur l’input 3↵3↵3 a renvoyé:

3 3 3

Le résultat attendu était :

3

Réponse de l’équipe

Bonjour Océane,

Dès que ton code affiche une valeur, il doit s’arrêter. Je te conseille de regarder comment fonctionne la partie elif d’une instruction if ; cela pourra sûrement t’aider.

Réponse d’Océane

Ha oui, j’ai compris mon erreur. Merci !

ALI

Bonjour,

Pour l’exercice 3.1, UpyLaB valide certains tests mais pas d’autres. Par exemple :

L’appel à votre programme sur l’input 3↵4↵3 a renvoyé:

Le résultat attendu était :

3

Réponse de l’équipe

Bonjour Ali,

Clairement ton code ne teste pas tous les cas. Pourquoi n’utilises-tu pas Python Tutor pour voir ce qui se passe avec les données 3, 4 et 3?

Réponse Ali

Ok je vais faire cela, merci !

LOUISE

Bonjour,

Lors de la correction de l’exercice UpyLaB 3.1, tous les résultats sont bons sauf celui ci-dessous. Je fais comment ? Mon résultat est celui attendu, mais ce n’est pas validé.

L'appel à votre programme sur l'input ``20`` a renvoyé:

Aucun print

Le résultat attendu était :

Aucun print

Réponse de l’équipe

Bonjour Louise,

Quand UpyLaB écrit qu’il ne faut aucun print, cela signifie que ton code ne doit pas faire de print, alors qu’ici ton code imprime le texte "Aucun print".

UpyLaB 3.2

LOUIS

Bonjour,

Lors de la correction de l’exercice UpyLaB 3.2, tous les résultats sont bons sauf celui ci-dessous. Je fais comment ? Mon résultat est celui attendu, mais ce n’est pas validé.

L'appel à votre programme sur l'input ``20`` a renvoyé:

Aucun résultat

Le résultat attendu était :

Aucun résultat

Réponse de l’équipe

Bonjour Louis,

Quand UpyLaB écrit qu’il ne faut aucun résultat, cela signifie pas de print, alors que ton code imprime le texte "Aucun résultat".

SEVERINE

Bonjour,

Lors de la correction de l’exercice UpyLaB 3.2, tous les résultats sont bons sauf celui ci-dessous.

L'appel à votre programme sur l'input "0" n'a rien renvoyé.

Le résultat attendu était :

Il va faire froid.

Réponse de l’équipe

Bonjour Séverine,

Pour trouver le code qui solutionne un problème, tous les cas doivent être analysés. La plupart des problèmes ont leurs cas limites. L’exemple ici illustre parfaitement cela. Que faut-il faire quand la température est de zéro (0) dégré ?

Bon débogage

UpyLaB 3.3

AGATHE

Bonjour,

Dans Pycharm et UpyLaB, les lignes suivantes de mon code :

print(a.b)
print(a^2+a . b)

provoquent une erreur :

int object has no attribute b

Je ne comprends pas.

Réponse de l’équipe

Attention Agathe, la multiplication et la puissance ne se notent pas comme cela en Python. Peut-être devrais-tu revoir le cours sur les opérateurs arithmétiques.

SAUL

Bonjour,

UpyLaB ne valide pas le cas où c a une valeur négative.

Que puis-je faire ?

Réponse de l’équipe

Bonjour Saul,

Tu dois bien relire l’énoncé et analyser les différents cas possibles. Que doit faire ton code si c a une valeur négative ?

Après avoir bien compris les différents cas possibles, tester ton code sur une valeur correspondant à chacun des cas, en utilisant Python Tutor, pourra t’aider

Bon débogage

UpyLaB 3.4

NASIA

Bonjour à l’équipe,

Pour certaines valeurs, UpyLaB ne valide pas mon code. Pourtant tout semble identique.

L’appel à votre programme sur l’input 37 a renvoyé:

False

Le résultat attendu était :

False

Réponse de l’équipe

Bonjour Nasia,

L’exercice demande d’afficher le résultat d’un test. Mais toi tu affiches le texte « False » probablement suivi d’un ou plusieurs caractères espaces.

Enlève les espaces ou mieux fait le print du résultat du test (dont les valeurs possibles sont True ou False).

UpyLaB 3.5

VINCENT

Bonjour,

Ma vérification fonctionne lorsque les données a et b ne sont pas divisibles entièrement. Mais la réponse est True même si les nombres sont divisibles entièrement. La réponse False n’apparaît jamais. Il semble que les 2 dernières lignes du programme ne sont jamais atteintes. Quelqu’un peut-il me dire pourquoi svp ?

Réponse de Marc

Bonjour Vincent,

La difficulté de cet énoncé est double. D’abord il faut bien comprendre la définition de a est divisible par b. Ensuite bien analyser quels sont les cas possibles et ce qu’il faut faire dans chacun des cas.

UpyLaB 3.6

SOPHIE

Bonjour,

J’ai un problème sous UpyLaB lorsque je teste ma réponse, il me met ce message d’erreur alors que tout est ok sous Python Tutor :

L'appel à votre programme sur l'input ``1.0↵2.0↵`` a été interrompu par une exception:
Ligne 2: invalid literal for int() with base 10: '1.0'

Pourriez-vous m’aider. Bonne journée !

Réponse de l’équipe

Bonjour Sophie,

Dans cet exercice, les données ne sont pas forcément des entiers. Si tu essaies de transformer en int une chaîne comme '1.0' alors il se produit une exception. Il faut donc utiliser la fonction float() ici.

UpyLaB 3.7

SALIM

Bonjour,

Dans cet exercice, on parle de mise, de couleur, de numéro. Je m’embrouille avec toutes ces valeurs et je ne comprends plus le sujet. Déjà que je n’y connais rien en jeu de hasard, alors en plus avec un programme dans un jeu de hasard c’est incompréhensible. Pouvez-vous m’aidez ? Merci.

Réponse de l’équipe

Bonjour Salim,

Ton programme commence par récupérer deux valeurs entières. L’une correspond au pari du joueur : un nombre entre 0 et 12 pour dire que le joueur a parié que ce nombre sortirait au tirage ou alors 13 pour dire que c’est un nombre impair qui sortirait, ou bien 14 pour un nombre pair, ou bien 15 pour dire que c’est un nombre rouge (voir le dessin du tapis dans l’énoncé pour voir quels sont les nombres rouges) ou encore 16 pour un nombre noir. L’autre valeur correspond au tirage : un nombre entre 0 et 12.

Ensuite il te faut faire des tests pour voir combien le joueur va remporter. Les trois possibilités étant : 120 euros si le joueur a parié sur le numéro sorti au tirage, 20 euros s’il a trouvé la couleur ou la parité et 0 dans tous les autres cas.

UpyLaB 3.8

LISE

Bonjour,

Je n’arrive pas à réaliser l’exercice 3.8 sur les figures géométriques avec les lettres. En effet, dans les x = float(input()) il est possible de mettre des nombress mais je ne vois pas comment le programme peut lire des lettres majuscules. J’aurais besoin d’un peu d’aide et d’explications. Merci d’avance.

Réponse de l’équipe

Bonjour Lise,

La fonction input va en fait lire une chaîne de caractères depuis l’entrée. Si cette chaîne est un nombre, on a donc besoin de la convertir en nombre en utilisant les fonctions int ou float selon le cas.

Si on veut lire des caractères, il n’y a rien à convertir et on utilise la fonction input seule. Essaie donc avec x = input().

Bon courage !

GASTON

Bonjour,

Dans cet exercice, certaines réponses sont correctes, mais pour certains polygones, les résultats sont différents de ce qu’UpyLaB attend. Pouvez-vous m’aider ?

Réponse de l’équipe

Bonjour Gaston,

Une des difficultés dans cet exercice est d’écrire en Python l’équivalent du calcul de chacune des formules. Attention donc aux priorités des différents opérateurs (en particulier avec des divisions).

Tu dois sans doute aller à la chasse aux parenthèses manquantes qui rendent ton calcul faux.

Par exemple 2 + 5 / 7 ne donne pas 1.0 mais 2.7142857142857144. Par contre (2 + 5) / 7 donne bien 1.0. D’où l’importance des parenthèses suivant ce que l’on veut calculer.

Bon débogage !

UpyLaB 3.9

OCEANE

Bonjour,

Je n’arrive pas à comprendre où se trouve mon problème car lorsque je teste mon code , il me donne les bonnes réponses.

L’appel à votre programme sur l’input "1515↵100↵42↵" a renvoyé:

Combien de plis sont-ils nécessaires pour se rendre sur la Lune ? : Mauvaise réponse.

Le résultat attendu était :

Combien de plis sont-ils nécessaires pour se rendre sur la Lune ? : Mauvaise réponse.
Combien de plis sont-ils nécessaires pour se rendre sur la Lune ? : Mauvaise réponse.
Combien de plis sont-ils nécessaires pour se rendre sur la Lune ? : Bravo !

ok L’appel à votre programme sur l’input 42↵ a renvoyé:

Combien de plis sont-ils nécessaires pour se rendre sur la Lune ? : Bravo !

Bien cordialement

Réponse de l’équipe

Bonjour Océane,

Dans cet exercice, il n’est pas demandé de refaire le calcul effectué dans la vidéo sur la boucle while. Il s’agit juste de poser la question Combien de plis sont-ils nécessaires pour se rendre sur la Lune ? (attention à bien respecter le texte, ne pas hésiter à faire un copier-coller) et à lire avec l’instruction input la réponse de l’utilisateur. Et ce jusqu’à ce qu’il fournisse la bonne réponse à savoir 42.

Bon déboggage !

UpyLaB 3.10

KARIN

Bonjour,

Comment puis-je déterminer le nombre de valeurs totales pour ensuite calculer la moyenne ?

Réponse de l’équipe

On ne connaît pas ce nombre à l’avance, mais on peut compter les valeurs au fur et à mesure qu’on les lit. Utiliser des variables supplémentaires peut être utile du coup.

Bon codage !

JÉRÔME

Bonjour,

En ce qui me concerne j’ai un peu _filouté_ pour enlever de la somme et du nombre d’entreprises la valeur sentinelle. Après la boucle, j’ai écrit une instruction qui dit que si l’input est égal à -1 alors il faut augmenter le nombre d’employés de 1 et réduire le nombre d’entreprises de 1.

Mais il y a certainement une solution beaucoup plus propre à cela pour faire que la valeur sentinelle ne soit pas prise en compte !

Réponse de l’équipe,

Bonjour Jérôme,

Effectivement le canevas suivant pourrait t’aider :

x = int(input())
while _une_condition_sur_x:
  #
  # faire un traitement...
  #
  x = int(input())
res = ...

UpyLaB 3.11

SALIM

Bonjour,

une personne pourrait me donner un coup de pouce sur l’exercice 3.11 ? Je n’arrive pas à aller à la ligne pour afficher les XXXX, merci d’avance.

Réponse de l’équipe

Bonjour Salim, Si tu utilises plusieurs appels à la fonction print, les affichages correspondants se feront chacun sur leur propre ligne. Tu peux aussi ajouter \n dans la chaîne de caractères à afficher à l’endroit où tu veux insérer le saut de ligne. Bon courage !

SOPHIE

Bonjour;

je ne vois pas la différence entre mon résultat et le résultat d’UpyLab. Pourtant UpyLab considère mon résultat comme faux. Merci pour votre aide.

Réponse de l’équipe

Bonjour Sophie,

Vérifie que tu n’affiches pas des espaces superflues en fin de ligne, ou une éventuelle dernière ligne vide. Bon courage !

UpyLaB 3.12

CHLOÉ

Bonjour,

J’ai la même figure, mais décalée d’un cran sur la droite, comme si j’avais une espace en trop à chaque ligne.

Réponse de Karin

La fonction print() intercale une espace par défaut entre chaque valeur affichée et un retour à la ligne à la fin. Les premières fois, je te conseille de remplacer les espaces que tu veux insérer devant tes 'X' par un autre caractère pour mieux visualiser les éventuelles espaces superflues.

Réponse de Chloé

Merci à vous. Je ne trouvais pas mon problème. Je me disais que pour afficher n espaces avant mon 'X' je pouvais utiliser

print(' ' * n, 'X')

en me disant que si n vaut 0 j’afficherai zéro espace. Mais cela m’affichait quand même une espace, je viens de comprendre qu’en fait le print met une espace avant ma deuxième valeur. Et j’ai réussi en faisant :

print(' ' * n + 'X')

Une autre façon est d’expliciter que dans le print, le paramètre sep qui donne la chaîne de caractères à mettre entre chaque valeur affichée, est la chaîne vide :

print(' ' * n, 'X', sep='')

JÉRÔME

Bonjour,

UpyLab me dit que les réponses sont fausses alors que celles qu’il me propose sont toutes identiques aux miennes ! Mon programme fonctionne comme il faut dans mon interpréteur Python.

Réponse de l’équipe

Bonjour Jérôme,

Vérifie bien que ton programme n’affiche pas une ligne supplémentaire à la fin. Pour cela, une petite astuce. Ajoute une dernière instruction print("A"). Si ce "A" s’accole à la dernière ligne de "X", pas de problème. Il faut aussi vérifier le nombre d’espaces et vérifier qu’il n’y a pas une espace supplémentaire à chaque ligne. Cette espace superflue pourrait être due à la fonction print. En effet, si on passe plusieurs arguments à cette fonction, ceux-ci seront par défaut séparés par une espace. On peut modifier ce comportement en précisant une valeur pour le paramètre sep de la fonction :

print("Bon", "jour", sep = "")

ou éviter de passer deux arguments à la fonction en concaténant les chaînes de caractères :

print("Bon" + "jour")

Bon courage !

ALINE

Bonjour,

Est-ce qu’il est possible d’être un peu aidée sur la conception de l’exercice 3.12 ?.

J’ai compris qu’il fallait utiliser la concaténation entre les deux signes mais je n’ai pas réussi à voir comment mettre ça forme.

Merci à vous.

Réponse de l’équipe

Bonjour Aline,

L’idée consiste effectivement à concaténer une chaîne formée d’espaces et une chaîne formée de 'X'. Il suffit maintenant de voir combien d’espaces et combien de 'X' par ligne. N’oublie pas que l’on peut utiliser l’opérateur * pour afficher plusieurs fois la même chaîne. " " * 3 va afficher 3 espaces consécutives par exemple.

Bon courage !

UpyLaB 3.13

MORGANE

Bonsoir,

personnellement, je ne comprends pas l’exemple du nombre négatif. Comment savoir combien de data il doit y avoir ? Dans l’exemple avec -1 , il y a 5 termes de somme. Je ne comprends vraiment pas comment sont générés les data pour ce cas. Quelqu’un a une piste pour m’aiguiller ?

Réponse de l’équipe

Bonjour Morgane,

C’est justement le point de cet exercice, nous ne connaissons pas à l’avance le nombre de données à lire. Ce que tu as pu faire dans l’exercice 3.10 devrait t’aider pour ce cas-là.

Bon courage !

Réponse de Morgane

Merci pour votre aide, cela m’a bien aidé. Maintenant je bute sur le problème de l’erreur à cause du F qui n’est pas un nombre entier !! Je cherche et je vais trouver !! Merci

Réponses de l’équipe

Bonjour Morgane,

L’idée pourrait être de ne chercher à convertir l’entrée en int qu’à partir du moment où on est sûr qu’il ne s’agit pas de la lettre 'F'.

Bon courage !

Réponse de Morgane

J’ai bien fini par trouver. Merci pour votre aide.

AMINE

Bonjour,

Sur le programme, j’ai également une erreur avec la chaine de caractères F, je n’arrive pas à voir comment je peux convertir la chaine de caractères. Voici ci-dessous le message d’erreur d’UpyLaB.

L'appel à votre programme sur l'input ``-1↵8↵F↵`` a été interrompu par une exception:
Ligne 13: ValueError: invalid literal for int() with base 10: 'F'

Merci pour votre aide.

Réponse de l’équipe

Bonjour Amine,

En fait, il suffit de ne pas le convertir en int

Lorsqu’on appelle la fonction input, celle-ci retourne ce qui est lu sous la forme d’une chaîne de caractères quel que soit le type d’entrée, numérique ou non. Ici, puisque l’entrée peut ne pas être un nombre, il faut utiliser input seule, puis tester si la valeur lue est différente de 'F' avant d’effectuer la conversion en entier avec int.

J’espère que c’est assez clair. Bon courage !

XAVIER

Bonjour a tous,

Je rencontre un problème avec cet exercice dans le cas où la valeur est négative. Ce qui me pose un gros problème est la lettre F, je n’arrive pas à faire de tests avec ; j’ai essayé avec input() comme conseillé (ex : data = input()), ensuite tester si data == 'F' mais à chaque fois j’ai un problème de type de data. Quelqu’un pourrait-il me mettre sur la voie?

Merci d’avance !!

Réponses de l’équipe

Bonjour Xavier,

Vérifie ton code au niveau de la conversion des valeurs que tu reçois. N’oublie pas le fait que input() renvoie une valeur de type str, et qu’une conversion de ce type vers un entier dans les fonctions int() ou float() ne peut aboutir que si la valeur entrée en paramètre correspond à celle du type vers laquelle on effectue la conversion. Par exemple : data = int("F"), produira une erreur.

Réponse de Xavier

Merci à vous !

Grâce à vos commentaires j’ai compris ; en fait ce qu’il me manquait c’était la bonne syntaxe pour transformer mon data = input() en int pour pouvoir additionner ensuite. data = int(data) était la solution pour moi !

Merci!

KIM

Bonjour,

Je rencontre des difficultés, notamment la partie avec la fin de commande "F". J’ai l’erreur :

TypeError: can only concatenate str (not "int") to str

Lorsque je fais data = input() dans la boucle, il prend bien les valeurs numériques et la lettre F mais je n’arrive pas à additionner les nombres rentrés pour obtenir leur somme sans obtenir le message. Et inversement si je fais un int(input).

Merci d’avance pour vos lumières, en espérant avoir été clair sur mon problème sans divulguer mon code.

Réponse de l’équipe

Bonjour Kim,

L’opérateur + va opérer différemment selon le type des opérandes. Si tu « ajoutes » deux chaînes de caractères, il va les concaténer.

Si tu « ajoutes » deux nombres, il va retourner leur somme.

Le problème, c’est que tu ne peux pas mélanger. Ajouter une chaîne de caractères et un nombre n’a pas de sens. La difficulté ici, c’est qu’on manipule deux types d’entrées, des nombres et un caractère. C’est pourquoi l’indice propose d’utiliser la fonction int() dans le cas où l’entrée est différente de 'F'.

Bon courage !

Réponse de Kim

Merci pour votre réponse. Cela m’a permis de débloquer cet exercice. Grâce à vos conseils et en utilisant Python Tutor, j’ai remarqué que je n’arrive pas à passer les data en int. Tout simplement parce que j’écrivais dans mon code int(data) au lieu de data = int(data).

Erreur de débutant.

ARTHUR

Bonjour,

Cet exercice me donne aussi du fil à retordre. Avec l’instruction while data == 'F' : je n’arrive pas à rentrer dans la boucle et je ne vois pas trop comment faire autrement . Merci d’avance pour votre aide :o)

Réponse de l’équipe

Bonjour Arthur,

Avec la condition data == 'F', le programme n’entrera dans la boucle que si data contient la valeur 'F'. Ne serait-ce pas plutôt le contraire que tu voudrais faire, étant donné que 'F' est la dernière valeur à lire ?

Réponse d’Arthur

Merci je vais essayer ça parce que pour le moment je n’ai réussi qu’en utilisant while True : et break

KARIN

Bonjour,

Je bloque sur la condition data=='F' pour terminer le calcul. Mon programme fait bien la somme de tous les nombres que je saisis mais pour terminer la boucle, si j’écris simplement F, il me retourne un message d’erreur. Si j’écris 'F' le programme fonctionne mais ce n’est pas ce qui demandé. Le problème doit se situer au niveau du type de la variable data, mais je ne comprends pas (j’ai essayé d’ajouter data = str(input()) par exemple) . Je comprends d’autant moins que dans Python Tutor mon programme se termine sans problème en écrivant F directement. Si vous avez des pistes.

Merci

Réponse de l’équipe

Bonjour Karin,

votre programme doit lire une donnée n et tester si elle vaut 'F' ou sinon traduire en int et faire des calculs et recommencer

Réponse de Karin

Oui, c’est bien ce que j’essaye de faire. Cependant le programme doit utiliser la même variable n aussi bien pour les nombres à saisir que pour le 'F'. J’utilise n = input(), ça fonctionne bien pour tous les nombres mais lorsque je saisis F (sans guillemets) le programme plante, il ne semble pas reconnaitre le type string de la variable.

Réponse de l’équipe

Bonjour Karin,

n = input() va fonctionner aussi bien pour des entrées numériques que des lettres. Dans tous les cas, cette fonction retourne un objet chaîne de caractères. Le souci doit plutôt provenir au moment où tu souhaites convertir cette valeur en int, c’est-à-dire au moment où tu utilises la fonction int(). Cela ne sera pas possible si n est égal à la lettre 'F' et c’est pour cela qu’il faut d’abord tester ceci avant de convertir la chaîne lue en nombre et l’ajouter à la somme.

Bon courage !

JÉRÔME

Bonjour,

Dans l’exercice, j’aimerais tester si la valeur entrée correspond à la lettre F. J’essaie, en vain : if x = "F" if x = F Et ça bloque. Quelqu’un peut-il m’indiquer la syntaxe exacte ? Merci.

Réponse de l’équipe

Bonjour Jérôme,

Le test est if x == 'F':

ALBERT

Bonjour,

Sur l’exercice, je bloque avec l’histoire du F. Voici mon erreur : Je ne saisis pas les types de données. Comment faire comprendre à la machine que soudainement je n’ai plus de nombre mais une lettre ? Doit-on jouer avec int() et str() en input ? Comment dire tant que je n’ai pas une lettre en input, j’additionne ? Merci.

Réponse de l’équipe

Bonjour, tu as parfaitement raison Albert. La plupart du temps, nous changeons le type au moment de lire la donnée (ie dès l” input) mais ce n’est pas obligatoire et nous pouvons très bien changer le type du texte lu plus tard :

data = int(data) est possible.

Réponse d’Albert

Rhaaa ! je pensais que la nuit m’aiderait à trouver la solution. Et bien non, je bloque toujours ! J’y suis presque, mais je m’embrouille, avec le while, le if, le not et ce fichu F ! Un indice supplémentaire ?

Réponse de l’équipe

Bonjour Albert,

Ne cherche pas à convertir la valeur lue en int avant d’avoir vérifié que ce n’est pas la lettre 'F'. En gros, lis l’entrée avec input(), teste si c’est différent de 'F' et alors seulement convertis en int.

Bon courage !

Réponse d’Albert

Je crois que mon souci vient du fait que je n’arrivais pas à tester juste ce F. Subitement ça a fonctionné.

Des fois, la chance. Merci !

ALINE

Bonsoir,

Je suis revenue sur l’exercice et je suppose que les données d’entrée ne sont pas une liste. Dommage ce serait plus facile. Je bute sur la déclaration du 'F' en donnée d’entrée. J’ai mis une entrée data = input() sans déclarer le type de données. Mais dans la suite je dois déclarer la condition complémentaire du type de data. Or Python ne comprend pas type(data) = int() ou data = int() ou input = int(). J’ai à peu près tout essayé mais il y a un truc qui m’échappe ou que j’ai raté dans la déclaration du type de donnée. Comment puis-je ajouter une condition d’être ou ne pas être int ou str. Je suis bloquée.

Merci

Réponse de l’équipe

Il ne s’agit pas de déclarer quoi que ce soit. Il s’agit de simplement récupérer une donnée. si cette donnée est un 'F' c’est qu’on a terminé sinon c’est que c’est quelque chose qui peut se transformer en entier et s’additionner avec ce qu’on a déjà ;-)

Réponse d’Aline

Merci, j’ai compris.

UpyLaB 3.14

AMINE

Bonjour,

J’ai ça comme message d’erreur :

L'appel à votre programme sur l'input ``50↵24↵11↵17↵20↵18↵`` avec les arguments ``100`` a renvoyé:

Trop grand
Trop grand
Trop petit
Trop petit
Trop grand
Perdu !
Le secret était 18.

Le résultat attendu était :

Trop grand
Trop grand
Trop petit
Trop petit
Trop grand
Gagné en 6 essais !

Comment se fait-il que le programme fasse la vérification sur 100 et en même temps que le résultat attendu soit 18 ? Merci d’avance.

Réponse de l’équipe

Bonjour Amine,

L’argument avec lequel UpyLaB teste notre code n’est pas le nombre secret à deviner. C’est la valeur qu’il passe à la fonction random.seed() et qui fait que les fonctions du module random vont générer la même suite de nombres « aléatoires » à chaque fois.

SABINE

Bonjour,

J’ai un peu de mal avec cet exercice. Il semblerait que l’initialisation de la valeur aléatoire pose problème. Le résultat obtenu n’est jamais celui attendu.

Comment fait-on pour intégrer argument dans notre code ?

Réponse de l’équipe

Bonjour Sabine,

Nous n’avons pas à intégrer argument dans notre code, c’est UpyLaB qui utilise cette variable pour initialiser différents tests qu’il fait subir à notre programme.

Si tu veux tester ton programme dans ton IDE dans les mêmes conditions, ajoute l’instruction random.seed(argument) en remplaçant argument par les valeurs utilisées par UpyLaB soit 5 puis 32 puis 27…

Mais n’oublie pas de retirer cette instruction avant de soumettre ton code à UpyLaB.

XAVIER

Bonsoir,

Pour réaliser l’exercice j’ai été « obligé » d’utiliser un BREAK dans un de mes if ; est-ce une mauvaise pratique ?

Réponse de l’équipe

Bonsoir Xavier,

Dans l’absolu utiliser un break n’est pas forcément mauvais. Toutefois, dans le cadre d’une initiation, il est préférable de s’en passer. La boucle for n’est peut-être pas la plus adaptée ici. Pourquoi ne pas essayer le canevas suivant :

on_continue = True
while on_continue:
if ...
  on_continue = False
...

UpyLaB 3.15

JO

Alors, je ne comprends pas pourquoi dans cet énoncé :

il y est décrit le comportement de 3 autres écureuils. Le programme doit vérifier si l’un des 3 autres écureuils arrive à la position de la noisette avant l’écureuil dont on peut choisir la valeur de déplacement ?

Bonjour Jo,

Ce ne sont que des exemples d’écureuils.

Il ne s’agit de s’intéresser ici qu’à un seul écureuil pour lequel on va lire le saut qu’il fait pour se déplacer, et voir si cet écureuil-là peut ou non atteindre la noisette. Bien entendu, UpyLaB testera notre programme pour différentes valeurs de saut et différents emplacements de la noisette, mais à chaque exécution du programme, il n’y a qu’un seul écureuil concerné.

Bon courage !

Isa

MARINE

Bonjour,

J’ai un problème avec l’exercice de l’écureuil. Quand ce dernier atteint la cible, le programme affiche la dernière valeur alors que la règle veut que le programme imprime « Cible atteinte » à la place.

Réponse de Lise

Bonjour MARINE,

Tu pourrais peut-être envisager de tester la valeur courante avant de procéder à son affichage.

Réponse de Marine

Ca marche ! Merci beaucoup.

TOM

Bonjour,

J’ai quelques problèmes concernant cet exercice. Mon programme fonctionne pour saut = 9 ; position_cible = 7 et pour saut = 8 ; position_cible = 7.

Mais pour (10, 20), (50, 66), (14,4), (20, 6) et (24,6) mon programme ne marche pas. Ne sommes nous pas censé arrêter le programme dans tous les cas si on dépasse au maximum deux fois le barreau 0 ?

Réponse de l’équipe

L’idée est que l’écureuil peut faire autant de tours qu’il veut, mais s’arrêtera quand il revient en 0 ou atteint la cible.

Réponse de Tom

Ah d’accord, je n’avais pas compris cela. C’est validé maintenant.

ARTHUR

Bonsoir,

J’ai des impressions au-dessus de 100 alors que j’utilise modulo.

Réponse de Luc

Bonsoir Arthur. Le modulo étant prioritaire sur l’addition, il faut penser à utiliser des parenthèses :

(valeur + increment) % 100

Réponse de Arthur

Merci. Ça fonctionne.

UpyLaB 3.16

MARIE

Bonjour,

Je n’arrive pas à gérer les espaces.

Réponse de l’équipe

Bonjour Marie,

Le souci ne vient pas de l’espacement entre les nombres ; celui-ci n’est pas pris en compte par UpyLaB. Il faut toutefois veiller à ne pas afficher de ligne blanche supplémentaire, en particulier au début. L’affichage doit commencer avec la première ligne de la table de multiplication. Il faut donc réfléchir à l’emplacement de l’instruction qui permet d’aller à la ligne suivante.

Bon courage !

UpyLaB 3.17

LUCIE

Bonjour,

Dans cet exercice, je ne comprends pas le calcul à faire effectuer par Python. Je comprends qu’il faut récupérer avec une boucle les valeurs impaires des factorielles et leur calcul. Mais je ne comprends pas cette notion de constante epsilon. Merci.

Réponse de l’équipe

On pourrait continuer indéfiniment le calcul des différents termes de la série. Ici, on nous demande de les arrêter, et de donner une approximation de la valeur de sin(x) lorsque le terme à ajouter a une valeur suffisamment petite (il doit être inférieur en valeur absolue à cette constante donnée dans l’énoncé).

Réponse de Lucie

D’accord merci pour cette précision.

UpyLaB 3.18

MARC

Bonjour,

Je suis totalement coincé sur cet exercice : je ne sais pas du tout comment l’aborder.

Réponse de l’équipe

Bonjour Marc

Une idée, possible est de décomposer la construction d’une ligne, numéro i : un certain nombre d’espaces puis des chiffres en miroir autour d’un chiffre.