Fonction

Signaler
-
Messages postés
14855
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
-
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 :
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

4 réponses

Messages postés
29734
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
2 836
Bonjour,

 if est_octet(n) == "true" and str(n)[0] == 1:

Messages postés
14855
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
589
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
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
false
aurait 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


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
12582
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 octobre 2020
700
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?
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
Messages postés
12582
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 octobre 2020
700 > test-test
si tu veux apprendre et progresser, il vaut mieux commencer par des exercices plus simples, et continuer ton cours ensuite. te faire aider pour un exercice est, je pense une fausse piste.
Messages postés
153
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
12 octobre 2020
7
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.
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]