Partage
  • Partager sur Facebook
  • Partager sur Twitter

prédicat récursif

Sujet résolu
Anonyme
11 octobre 2018 à 23:48:12

bonjour

je suis débutante en python,j'essaye d'écrire un prédicat récursif nommé all qui renvoie la valeur True si tous les éléments de la liste passée en paramètre valent True,et renvoie False dans le cas contraire.

exemple:

>>all([])
True
>>>all([True,True])
True
>>>all([True,False,True])
False

enfaite j'ai aucune idée de facon d'écrire l'algo apart que quand la longueur de la liste egal à0 ca renvoit true

qui peut m'aider svp

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:20:52

Bonjour,

Compare juste 1 à 1 le 1er element avec le i-eme element. Si un est différent c'est faux.

Tu peux aussi regarder la somme de la liste... si sum == longueur ou sum == 0 c'est bon.

Bref c'est 1 ligne de code

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 12:55:38

Bonjour.

Il faut itérer sur chaque élément de l'objet passé en paramètre, et dès que l'on en trouve un faux on peut arrêter et renvoyer False. Si on est passé par tous les éléments de la liste sans en rencontrer un faux, on peut renvoyer True. (Que vient faire la récursion dans tout ça ?).

Attention spoilers :

from typing import Iterable


def all(obj: Iterable) -> bool:
    # dédicace à toi IdiotBête_ 

    for i in obj: # pour chaque élément dans obj
        if not i: # si cet élément vaut False
            return False # on arrête de chercher

    return True 
    # on a passé tous les éléments sans en trouver un faux
    # on peut donc renvoyer vrai



  • Partager sur Facebook
  • Partager sur Twitter

typage structurel ftw

20 octobre 2018 à 15:37:11

digammaF a écrit:

Bonjour.

Il faut itérer sur chaque élément de l'objet passé en paramètre, et dès que l'on en trouve un faux on peut arrêter et renvoyer False. Si on est passé par tous les éléments de la liste sans en rencontrer un faux, on peut renvoyer True. (Que vient faire la récursion dans tout ça ?).

Attention spoilers :

from typing import Iterable


def all(obj: Iterable) -> bool:
    # dédicace à toi IdiotBête_ 

    for i in obj: # pour chaque élément dans obj
        if not i: # si cet élément vaut False
            return False # on arrête de chercher

    return True 
    # on a passé tous les éléments sans en trouver un faux
    # on peut donc renvoyer vrai

sauf qu'elle vous demande un algorithme RéCURSIF  si c'était pas récursif ça aurait était simple a réaliser

voila katia

def all(l):
    """
    """
    if len(l) == 0:
        return True
    else :
        return (l[0] == True and all(l[1:]))






-
Edité par Marie20 20 octobre 2018 à 15:54:55

  • Partager sur Facebook
  • Partager sur Twitter