Comment copier du code python dans ce forum?

J’ai constaté à plusieurs reprises qu’il est difficile d’échanger du code python entre participant.
Le formatage des messages pour le forum interprète le texte brut du code à la sauce html, en ‹ bousillant › tout notion d’indentation, ce qui rend le code ambigu.
Voici un exemple:

if False:
print(‹ False is True ›)
print(‹ Nevertheless… ›)

Vous vous doutez que j’ai indenté la ligne qui contient le premier print. Vous ne pouvez pas savoir si j’ai fait de même au deuxième print. Du coup impossible de deviner si mon code affiche zéro ou une ligne. J’ai vu plusieurs contributeurs passer des hard-copies d’écran, mais je trouve ça un peu dommage. Ca résout bien sûr le problème de la lecture, mais pour réutiliser le code dans les fichiers images, c’est pas simple (resaisir, convertir…???)

L’invite du mini-editeur de texte pour saisir les messages nous offre peut-être une piste en proposant un formatage html.
Utilisation de la balise ‹ texte préformaté ›: En me souvenant de code python que j’avais écrit pour générer des pages statiques html, je me suis souvenu qu’il existe une balise pour indiquer que le texte est ‹ préformaté › et qu’on ne veut pas laisser le navigateur s’occuper du formatage pour un paragraphe de texte (voir HTML Text Formatting). Il s’agit de la balise ‹ pre › (que l’on fermera avec ‹ /pre ›.
Donc, je prépare mon message en tapant la balise ‹ pre ›, une ligne vide, puis la balise ‹ /pre › (note: les balises ne s’affichent pas dans la visualisation du message tel qu’il sera affiché:


&lt/pre> (là j’ai encore un petit problème à résoudre…)

Pui, j’insère à la place de la ligne vide mon code python (par copier-coller)
Voyons ce que ça donne:

if False:
	print('False is True')
print('Nevertheless...')

Et aussi: avec des commentaires, des simples et doubles quote, le signe ‹ < ›, et des indentations sous forme d’espaces multiples (et non de tabulations):

# voici une fonction :
def ma_ptit_fonction(a,b):
    msg1='message 1'
    msg2="message 2"
    if a<b:
        r=b-a
    else: r=a-b
    return(r)

Il y a peut-être encore des effets de bords (je n’ai pas testé une page html qui cite du code python qui manipule des balises html… ) (je suis à cours d’aspirine :sweat_smile:).
J’ai aussi essayé: la balise ‹ script › (après tout c’est un script dont on parle). Je parie que le code de la page que vous verrez contient mon script (qui a dit ‹ sécurité ›? :smiling_imp:) mais on ne voit rien!! (et c’est normal!)
J’ai aussi essayé la balise ‹ code › qui est faire pour dire au navigateur que ce que vous affichez c’est du ‹ code ›. Malheureusement, ça ne protège en rien le code affiché du formatage par le navigateur (voir HTML Computer Code Elements)

Voilà. A vous de jouer!

salut phi je viens de tester ta balisse <pre>
merci pour l’info, car c’est vrai actuellement on colle brut le code et on demande une capture d’écran , pour etre sur de pas etre embeter avec l’indentation .

Je redirigerais les gens ici pour qu’il puisse voir ces info quand on nous met du code ,excellente trouvaille :+1:

Pour afficher les tags dans une page html il faut exprimer les caractères spéciaux comme des ‹ entités › (voir HTML Entities):

<pre>

</pre>

ce qui s’obtient en tapant:

&lt;pre&gt;

&lt;/pre&gt;

Je vous laisse deviner comment j’ai réussi à vous afficher le caractère '&' pendant que je vais chercher de l’aspirine.

Voici un exemple de code pathologique qui met en défaut la méthode que je vous ai proposée (la chaine de caractères entre guillemets est précisément </pre>.

close_pre_tag="
"

Ce que l’on peut contourner dans le code python lui-même:

close_pre_tag="<"+"/pre>" # la même chose, mais visible dans une page html

A plus, bon python, bon html! :sleeping: