0

Avant que je ne sois alésé pour cela, je sais qu'il y a des messages détaillant comment effacer TOUT le résultat d'une cellule, mais je ne souhaite en effacer qu'une partie.Effacer une partie de la sortie d'une cellule IPython

Permettez-moi de fournir quelques informations de base. Je crée un jeu de devinettes comme LINGO où l'utilisateur est invité à deviner un mot de cinq lettres, puis en utilisant CSS pour fournir un feedback visuel sur les lettres qui sont dans la bonne position, et quelles lettres sont dans le mot mais dans la mauvaise position. La façon dont mon programme est structuré, il affiche les commentaires après chaque supposition, puis invite à nouveau l'utilisateur et affiche la conjecture. Donc, quelque chose comme ceci:

Devinez un mot: mot

COMMENTAIRES

détrompez: mot

COMMENTAIRES ...

Vous obtenez l'image. Mon objectif est de parvenir à reproduire le plus possible LINGO, ce qui impliquerait de supprimer l'entrée de l'utilisateur sur l'écran une fois qu'il a été soumis et de lui montrer une séquence de commentaires. Cela signifie pour moi l'une des trois choses:

1) Trouver un moyen d'effacer une partie de la sortie

2) Trouver un moyen d'inviter l'utilisateur à la saisie de texte sans l'afficher sur l'écran

3) Cachez l'entrée de l'utilisateur, supprimez toutes les sorties après chaque itération et affichez les estimations en cache.

J'ai fait des recherches 1 et 2 et je n'ai rien trouvé. 3 serait une PITA donc avant que j'aille à la peine je pensais que je demanderais.

Répondre

0

1 pense que ce n'est pas possible ou très difficile - c'est dur en python régulier, sans parler de Jupyter. En python normal, vous utiliseriez probablement quelque chose comme curses mais je l'ai essayé dans Jupyter et cela affecte la console à partir de laquelle Jupyter fonctionne - pas la stdout dans le cahier. Si vous en voulez vraiment 2, vous pouvez probablement écrire votre propre version de input qui utilise le retour chariot \r après avoir supprimé le retour à la ligne précédent en écrivant une fonction qui boucle en écoutant les frappes et en soumettant une nouvelle ligne. Le retour chariot devrait signifier que la ligne suivante écrase la ligne précédente.

3 La mise en cache de l'entrée ne devrait pas être trop difficile bien que je présume? Il suffit de les stocker dans un tableau ou quelque chose, puis vous pouvez les afficher à l'utilisateur après avoir utilisé IPython.display.clear_output.