File avec une liste chaînée

On veut écrire une classe pour gérer une file à l'aide d'une liste chainée. On dispose d'une classe Maillon permettant la création d'un maillon de la chaine, celui-ci étant constitué d'une valeur et d'une référence au maillon suivant de la chaine (à sa création le maillon ne connait pas son suivant, d'où l'utilisation de l'objet None) :

🐍 Script Python
class Maillon:
    def __init__(self, valeur) :
        self.valeur = valeur
        self.suivant = None

La file non vide est constituée de maillons avec un maillon de tete, celui qu'on va enlever lors de l'action defile et un maillon de fin qui est le dernier à être arrivé par l'action enfile. S'il n'y a qu'un seul élément dans la file, le maillon de tete est le même que celui de fin.

Compléter la classe File et vérifier votre travail sur les exemples. On vous donne l'initialiseur, la méthode est_vide qui renvoie True si la file est vide et False sinon, ainsi que la méthode affiche qui permet de voir l'état de la file manipulée.

Exemples
>>> file = File()
>>> file.est_vide()
True
>>> file.enfile(2)
>>> file.affiche()
← 2 ←
>>> file.est_vide()
False
>>> file.enfile(5)
>>> file.enfile(7)
>>> file.affiche()
← 2 5 7 ←
>>> file.defile()
2
>>> file.defile()
5
>>> file.affiche()
← 7 ←
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.8592.1280133Sytbi,IqF6)Nf4_d7Mugj:khe8 sPar(5.lRvow21/mn0ép;=cD9050s0B0f0G0h0L0E0D0!0L0G0E0E0Z010f0h0X010406050E0v0T0T0G0H0e040d0O0L0v0`0O0U0D020G0T0X0Y0D0M0B140H0k0v0B0E050S111315170 0X041v1C051F0S1F1H1C0 0s0h0N0/0;0?0^0A0h0w0A0L1V0A0f0}050*0g0L0B1Q0=0@011U1W1Y1W0f1(1*1$0f0g0O0s171%0H1D0f0A0/1a0E0X0G0U0^0Q011,1S010p0,0B0U1i0B1$27292e1.2h1*2k0T2m040b0D0F0H0O0X0O0E0h1d1f0(250H0H0B0!2H1v2o0U1D0S232T0f2120220s2q0^1Y0U2j2E1$1N1P0:1-2%0h2)0U1}1O1$0X2M1D2R2T2~10281f2/2f2@0H140L0}0D0R2Q320~312p341.36383a0Q3d293f2R2$013k0G39040D0c3o2S0 3r3i0^3u3w0D0q3A3q323s3G3a0J3K3C3M3E3t0O373v3a0m3R3g331R3j3W3l3x0t3#3D3(3F3*3Y3x0C3.3T3:3V3X3H0$3_3h3{3O040R0V403%2:3|3+0R3c1w3e3S4149430R3n4e3p4g48353=3w0R3z4m3B3$3N4r0}0R3J4v3L4h4q3}4A3Q4D4o4y4H443!4K4x3U4j3-4Q3/4i4z443^4V3`4X4N0R3 4#4F3)4N0Q464+4p4-3+0Q4d2~4L4S4Y0Q4l4`4R424}4u504W4G4@4C554$573?0Q4J5a4,3;4.4P5g4=5i4@4U5l4M4@4!5q4|4.4*5u524N0c4:5y4%3+0c4_4f515E3?0c4 5I564?5L545O5b5Q3w0c595T5h4a5L5f5Z5m5#5W5k5(5r5L5p5-5v5F5t5;5z5F5x3e1E2|1v2-2W0s2!3s0!1}2w0%1O1D2{0B2}5|4D05650(6d5!0z0}3i3K5J2f0P3a6o5P3F0!0}0u0+0L0L1e6t5U0^0|040y3R0D6K0D6p1.6l040(0p6D5!6r3x6T5)0p0T0}0r0r2=2G6$6X3s6G0I6+3U0g6G0E0B0L6S6f6u016G0i3K6M6{0U0}0N3v0B0v0H6/3{6G0n6I4K6L7f706E016;0}6?6^79490O0}0K7o357375776 6N0^7q040Z7y717v1*7x7e7g6K7z7j6=6@6_306{7B7s6`7i7204111O290f7E7i7B7D4D7h6k6w040o1e0B3R064{3{6P6n7V6U6s7|5)0U7.0l2i7t1.6G7d4`7f7M6P6R850^6V6M7 3s6Z6#6%0U6)0r8e6|0}6.8i6:7O7n8u7a0}7c6J7K7,5)7k7Y7P8q7T8q7X0f0)7=7+7M7)7%7-0}7:2)8C7K7M8G7m7Q5|7S7r8L0}2h0U8T5)8S8Q6{0z7.8W8P4`068a8?0}8d8y498g8L0p0}1t0f0r0N0h0(8q6-8q8#8I912f7b884f8D8E3s6P2M0f778.8=7i9g8x7R7(8*9i3j8,2=8/3s0O6V0h1u9v8U7/7;7?8}7i8c0B8%3p7M939C3F95040G0p2h0!0A8`8(7i9e9Z7N7l9h9z5!9k8Y7g7M7X140,6B9u2~9o3U8;a28!8w9V2S8R9B9@800}8N8N9`9R5!0U0g0}2{2=7$9:9/ad3s0E2c04010a019d0}6~9Mae042j0s8J0}7*at3Uav0}2daAar8Aai6L8b0}0P1U1*9G4S0}9~6A6CaE9H9J9La67S6V2@aqa/9S8^9PaS6HaU8Z71am04ao0Ua?9-9^8s8+04a(a0aJ047UaM427G7678a{aDa@ak960UaI9:a5b55)aOax0DaRbf497ba}9{7Fb96zbba+a4aKa#bgbF9 a*bz2f8K9:7X7Z74b3bC9|b0b2b49W6{asbtauawaybyb*3UbB4K8|aV8~6Q9U8q9YbQ3j9#2j2s9,b%9.b79:9xa96j5)6}bL4i961*2vbXa{8B7Ja~7W0}2@0v0N0B0G0v0rbabP3ea33{bs3pcycd046ybOa1b/8z048tb}3Fce1o2jb$aab(aTckbD9S0}0hc8cC2fc7bcbecIcD97999bc2cSc4cKcj899nb@9wa8c(b8agc/6W8)7Ccc7u04cocqcscubGcw4n9naWaG0-c 7M87bCaj8Fc{bracc*d48-c|bT7l0v7!chbm8:bKbIbMd6crctcvcHdc8Da79=9ydq1.bScM3t9EdI2Sc#dPdBdz3Ncn0OcpdFd9cG9Qc_6k8 b`9:b|dO9!d.c1aBcK9fdndR9_cVdl9pcYc!8Ra;0OcRd0c`dMc8abbdb8c,9a9ca{0Ic?9mc^7LbE2M110L0*e7dW7AdYcxdL8HdNc35!dQd=dS04c~dtdR7X747Hbjc@emey8$eIeE8M8Od3dXd2dC49c%doeddueGeVe$c)eBaFbV7#dkd,5)6PcZeW0^e#dReDe-d!e)aheZbRa-e_018@8Va`d}0}9ldJeme08veaeSe~a$04dsf2eXaLex8?a_8Xd dKb^9r9tf57Xep0ver0Ge7b?cld-df6?d_fc3Bfeeuf60}fx0HdUe89N8_3#0S6h6c5}f#0S601v0f62f*2Y2U1|1~2W0G1)f%601Bc93s2M0T0r0p0G0z0B0r0A0c0}1n1p1r1t0DfM2T1L1G040j0L0D970Dcs0?0h0D2Dgof@0D0s001c0,9K0B0H0D0v2)0D1Y0E8N0/0A0+0U0W1+3i0hga0igk1f0U000G0e7#06gD1+0H0W0p0W2M811+1rgW0vgqf}0hgA0DdHgS9~0.0s290.0!gO0=gS0,0Dg01cgq1565770h0H060fd$gI0;gF9KgI2D77gFgb0G0xhg0.d$ho0.9r0H0+0f0EgS7m1eho0D6?0U0E06gv2=6?0H2H7Ugf1C0#g~gF0Gg^0W23666Mf!b_d^fZ6604gS1*h#h*6@6?0y0DfS1ffXh)6igkgH0D2=gxh-0Xdw0Ega062FgC1f0G0X0X6@gu1+0p1e2O0hhEgE6?0D8N372=1+280.28gBgDh.6ih@1vh$h,hWeLbi0 h$h_h$h|0fgm1c0O140`gacgiLg+0N0O0egNhQ3ff(0)6z0E04.