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.