Fonction

test-test -  
 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 :
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

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

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

    1
  2. Utilisateur anonyme
     
    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
    


    1
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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?
    0
    1. test-test
       
      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
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > 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.
        0
  4. dachiasse Messages postés 1932 Statut Membre 153
     
    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.
    0
    1. test-test
       
      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]
      0