Fonction
test-test
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour, j'ai ca et je n'y arrive pas:
3) Écrire une fonction est_negatif() qui prend en argument une chaine de caractères correspondant à un octet et renvoie
True si la chaîne est l’encodage d’un entier négatif et False sinon.
Votre fonction devra contenir une spécification et vous écrirez ces trois asserts pour tester votre fonction :
_________________________________________________________________________________________________________________________________
assert est_negatif("00000110")==False
assert est_negatif("11000001")==True
assert est_negatif("1000110101000001")==True
Pour l'instant j'ai ca :
3) Écrire une fonction est_negatif() qui prend en argument une chaine de caractères correspondant à un octet et renvoie
True si la chaîne est l’encodage d’un entier négatif et False sinon.
Votre fonction devra contenir une spécification et vous écrirez ces trois asserts pour tester votre fonction :
_________________________________________________________________________________________________________________________________
assert est_negatif("00000110")==False
assert est_negatif("11000001")==True
assert est_negatif("1000110101000001")==True
Pour l'instant j'ai ca :
def est_octet(x): if len(str(x)) == 8: for (x) in [0, 1]: return "true" else: return "false" def est_negtaif(n): if est_octet(n) == "true" and n[0] == 1: return "true" else: return "false" print(est_octet(10010011)) print(est_negtaif(10101011))
Configuration: Windows / Chrome 85.0.4183.121
A voir également:
- Fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
4 réponses
Bonjour à tous
@Test test et Dachiasse, sur CCM comme tout les forums de code qui se respectent, il existe un outil qui permet de garder la mise en forme du code quand il est posté.
Notamment, il préserve l'indentation, ce qui est primordial en Python, et ajoute de la couleur.
Test test, on voit que Baladur a édité ton premier message hier soir, je pense que c'était pour pour les ajouter.
Et grâce à ces balises, on vois dans cette partie
Que le "else" est dans le for et non pas "à la suite" du if, car il n'a pas la bonne indentation.
Dachiasse
Donc
Du coup, est_octet devrait plutôt ressembler à ça
Je dis ressembler car il y a un problème ton for dans cette fonction.....
En l'état, il créé une seconde variable x, qui n'est pas celle d'entrée, je vais l'appeler x' pour ne pas se mélanger.
En théorie ça ferait : au premier "tour" de for, x' vaut 0 et tu retournes true, au second "tour" de for x' vaut 1 et tu retournes à nouveau true....
En vrai, ça s'arrête au premier "return", donc dès que la longueur de x est 8, ça retourne vrai, "AZERTYUI" retourne vrai.
Pour vérifier que tous les caractères d'une chaine sont 0 ou 1, d'abord c'est cette chaine qu'il faut tester et pas un tableau [0,1], et surtout pour que ce soit vrai, il faut que ce soit vrai pour tous les caractères, alors que pour que ce soit faux, il suffit d'un faux.
Je te montre en pseudo code
@Test test et Dachiasse, sur CCM comme tout les forums de code qui se respectent, il existe un outil qui permet de garder la mise en forme du code quand il est posté.
Notamment, il préserve l'indentation, ce qui est primordial en Python, et ajoute de la couleur.
Test test, on voit que Baladur a édité ton premier message hier soir, je pense que c'était pour pour les ajouter.
Et grâce à ces balises, on vois dans cette partie
def est_octet(x): if len(str(x)) == 8: for (x) in [0, 1]: return "true" else: return "false"
Que le "else" est dans le for et non pas "à la suite" du if, car il n'a pas la bonne indentation.
Dachiasse
"false"n'est pas la même chose que
falseaurait sans doute été plus parlant que,
"false" est différent de False, puisque la réponse de test test montre qu'il n'a pas compris
une différence entre False et false...
Donc
"false", c'est une chaine de caractère => du texte, c'est écrit entre guillemets et ça apparait rouge ou vert selon ton éditeur, alors que
false(sans guillemet et en bleu) c'est la valeur binaire faux.
Du coup, est_octet devrait plutôt ressembler à ça
def est_octet(x): if len(str(x)) == 8: for (x) in [0, 1]: return true else: return false
Je dis ressembler car il y a un problème ton for dans cette fonction.....
En l'état, il créé une seconde variable x, qui n'est pas celle d'entrée, je vais l'appeler x' pour ne pas se mélanger.
En théorie ça ferait : au premier "tour" de for, x' vaut 0 et tu retournes true, au second "tour" de for x' vaut 1 et tu retournes à nouveau true....
En vrai, ça s'arrête au premier "return", donc dès que la longueur de x est 8, ça retourne vrai, "AZERTYUI" retourne vrai.
Pour vérifier que tous les caractères d'une chaine sont 0 ou 1, d'abord c'est cette chaine qu'il faut tester et pas un tableau [0,1], et surtout pour que ce soit vrai, il faut que ce soit vrai pour tous les caractères, alors que pour que ce soit faux, il suffit d'un faux.
Je te montre en pseudo code
est_octect(x) si longueur de x vaut 8 alors pour chaque y dans x alors si y ne vaut pas 0 et y ne vaut pas 1 alors retourner faux 'au premier faux on sort fin pour retourner vrai 'si on arrive là c'est que tout est vrai fin si retourner faux 'si on arrive là c'est que x n'a pas la bonne taille
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, dans quel contexte fais-tu cet exercice?
"je n'y arrive pas": que se passe-t-il?
peut-être devrais-tu commencer par des exercices plus simples, qu'en penses-tu?
"je n'y arrive pas": que se passe-t-il?
peut-être devrais-tu commencer par des exercices plus simples, qu'en penses-tu?
Bonjour, cet exercice est imposé en cours, je pense aussi qu'il est compliqué pour un début de programmation.
Ce que je comprends pas c'est dans la ligne :
if est_octet(n) == True and n[0] == 1:
j'ai une erreur dans cette ligne quoique je fasse, mob but étant de savoir si n est un octet et si le nombre" tout a gauche" de n est un 1 ou un 0 . Je pense donc utiliser l'indice [0]
Merci de votre réponse
Ce que je comprends pas c'est dans la ligne :
if est_octet(n) == True and n[0] == 1:
j'ai une erreur dans cette ligne quoique je fasse, mob but étant de savoir si n est un octet et si le nombre" tout a gauche" de n est un 1 ou un 0 . Je pense donc utiliser l'indice [0]
Merci de votre réponse
Salut,
Si tu veux vérifier au-delà d'1 octet, à la ligne 2, j'aurais plutôt mis un "% 8 == 0" au lieu de "== 8".
Dans ton cas, le premier assert ne donnera pas le résultat voulu (False) mais True, parce que dans la définition de ta fonction tu retournes la chaîne de caractères "false" et "false" est différent de False.
Si tu veux vérifier au-delà d'1 octet, à la ligne 2, j'aurais plutôt mis un "% 8 == 0" au lieu de "== 8".
Dans ton cas, le premier assert ne donnera pas le résultat voulu (False) mais True, parce que dans la définition de ta fonction tu retournes la chaîne de caractères "false" et "false" est différent de False.
Bonjour,
merci pour vos conseils, je ne savais meme pas qu'il existait une différence entre False et false...
Apres pour la suite mon problème est à cette ligne
if est_octet(n) == True and n[0] == 1:
j'ai une erreur dans cette ligne quoique je fasse, mon but étant de savoir si n est un octet et si le nombre" tout a gauche" de n est un 1 ou un 0 . Je pense donc utiliser l'indice [0]
merci pour vos conseils, je ne savais meme pas qu'il existait une différence entre False et false...
Apres pour la suite mon problème est à cette ligne
if est_octet(n) == True and n[0] == 1:
j'ai une erreur dans cette ligne quoique je fasse, mon but étant de savoir si n est un octet et si le nombre" tout a gauche" de n est un 1 ou un 0 . Je pense donc utiliser l'indice [0]