def lireDroiteGauche(chaine): '''Renvoie les caractères de chaine en commençant à droite''' idx = 0 while idx != len(chaine): print(f"[gen] Je rentre dans mon Yield") valeur = (yield chaine[idx]) print(f"[gen] Je suis sorti du Yield") if valeur != None: print("[gen] Retour non nul, je coroutine !") print(f"[gen] reçu: {valeur}") else: print("[gen] J'ai rien reçu, je génère") idx += 1 class Tree: def __init__(self, label, left=None, right=None): self.label = label self.left = left self.right = right def __repr__(self, level=0, indent=" "): s = level*indent + repr(self.label) if self.left: s = s + "\n" + self.left.__repr__(level+1, indent) if self.right: s = s + "\n" + self.right.__repr__(level+1, indent) return s def __iter__(self): return inorder(self) def inorder(t): if t: for x in inorder(t.left): yield x yield t.label for x in inorder(t.right): yield x def tree(list): n = len(list) if n == 0: return [] i = n // 2 return Tree(list[i], tree(list[:i]), tree(list[i+1:])) if __name__ == "__main__": chaine = "abcdef" stop = "a" print(f"On va lire '{chaine}' à l'envers") print(f"et faire qqch au premier '{stop}' retourné") it_chaine = lireDroiteGauche(chaine) print(f"\n[for] Je demande un NEXT") for lettre in it_chaine: print(f"[for] {lettre}") if lettre == stop: print(f"[for] Je réclame une coro") it_chaine.send("yolo") print(f"[for] Je reprends le travail") print(f"[for] Je demande un NEXT\n")