Erreur terminator turtle

Résolu/Fermé
Azer - Modifié le 29 oct. 2021 à 18:18
mamiemando Messages postés 33390 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 29 oct. 2021 à 18:43
Bonjour,
Voici mon programme:
from turtle import *

def triangleEqui(cote):
    shape('turtle')
    for loop in range(3):
        forward (cote)
        left(120)
    exitonclick()

def carre(cote):
    shape('turtle')
    for loop in range(4):
        forward(cote)
        left(90)
    exitonclick()
    
def hexagone(cote):
    shape('turtle')
    for loop in range(6):
        forward(cote)
        left(60)
    exitonclick()

def etoile(cote):
    shape('turtle')
    for loop in range(30):
        forward(cote)
        left(170)
    exitonclick()

def lignetrig(cote):
    shape('turtle')
    for loop in range(5):
        for loop in range (3):
             forward(cote)
             left(120)
        forward(cote)
    exitonclick()

def lignecarre(cote):
    shape('turtle')
    for loop in range(5):
        for loop in range (4):
             forward(cote)
             left(90)
        forward(cote)
    exitonclick()

i=1
while i==1:
    nbForme = int(input("Entrez un nombre\n1 pour un triangle\n2 pour une ligne triangle\n3 pour un carré\n4 pour une ligne de carré\n5 pour une etoile\n6 si vous voulez quitter le programme\n"))
    
    if nbForme == 1:
        triangleEqui(100)
    elif nbForme == 2:
        lignetrig(70)
    elif nbForme == 3:
        carre(100)
    elif nbForme == 4:
        lignecarre(50)    
    elif nbForme == 5:
        etoile(200)    
    elif nbForme == 6:
        i=2


Je ne comprends pas pourquoi mais la console me met un message disant:

Traceback (most recent call last):

File "<string>", line 8, in forward

File "C:\Users\Elève\AppData\Local\Programs\Spyder\pkgs\turtle.py", line 1637, in forward
self._go(distance)

File "C:\Users\Elève\AppData\Local\Programs\Spyder\pkgs\turtle.py", line 1605, in _go
self._goto(ende)

File "C:\Users\Elève\AppData\Local\Programs\Spyder\pkgs\turtle.py", line 3178, in _goto
self._pencolor, self._pensize, top)

File "C:\Users\Elève\AppData\Local\Programs\Spyder\pkgs\turtle.py", line 545, in _drawline
self.cv.coords(lineitem, *cl)

File "<string>", line 1, in coords

File "C:\Users\Elève\AppData\Local\Programs\Spyder\pkgs\tkinter\__init__.py", line 2469, in coords
self.tk.call((self._w, 'coords') + args))]

TclError: invalid command name ".!canvas"


During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "C:\Users\Elève\nbForme.py", line 86, in <module>
lignecarre(50)

File "C:\Users\Elève\nbForme.py", line 57, in lignecarre
forward(cote)

File "<string>", line 12, in forward

Terminator




Merci de bien vouloir m'aidé


Configuration: Windows / Firefox 93.0

2 réponses

yg_be Messages postés 23355 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 554
27 oct. 2021 à 12:23
bonjour,
peux-tu tenir compte de ceci quand tu partages du code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
mamiemando Messages postés 33390 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 803
Modifié le 29 oct. 2021 à 18:56
Bonjour,

C'est parce qu'avec
exitonclick()
tu fermes ta fenêtre et il n'y en a plus ou dessiner. Tu peux remplacer tes
exitonclick()
par
clear()
. Le plus propre serait d'ailleurs de le supprimer complètement de toutes tes fonction et d'insérer
clear()
au bon endroit (voir ci-dessous) -- idem pour les fonctions.

On peut au passage améliorer un peu la boucle : pas besoin de deux variables.

Par ailleurs, les conventions python (voir PEP8) recommandent de nommer les variables sous cette forme :
nom_de_variable
. Il en va de même pour les fonction (même si
turtle
ne la respecte pas).

Ensuite je te recommande d'ajouter en début de fichier l'en-tête suivante :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


(la première ligne permet, sous linux, de définir l'interpréteur à utiliser quand le script est lancé ; la seconde permet d'avoir des caractères spéciaux dans le script)

Enfin on peut améliorer un peu la fabrication du menu pour la rendre plus lisible :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from turtle import *

def triangle_equilateral(cote):
    for loop in range(3):
        forward(cote)
        left(120)

def carre(cote):
    for loop in range(4):
        forward(cote)
        left(90)

def hexagone(cote):
    for loop in range(6):
        forward(cote)
        left(60)

def etoile(cote):
    for loop in range(30):
        forward(cote)
        left(170)

def ligne_triangles(cote):
    for loop in range(5):
        for loop in range (3):
             forward(cote)
             left(120)
        forward(cote)

def ligne_carres(cote):
    for loop in range(5):
        for loop in range (4):
             forward(cote)
             left(90)
        forward(cote)

choix_menu = None
while choix_menu != 6:
    choix_menu = int(input("\n".join([
        "Entrez un nombre",
        "1 pour un triangle",
        "2 pour une ligne de triangles",
        "3 pour un carré",
        "4 pour une ligne de carrés",
        "5 pour une étoile",
        "6 si vous voulez quitter le programme",
        ""
    ])))

    clear()
    shape('turtle')
    if choix_menu == 1:
        triangle_equilateral(100)
    elif choix_menu == 2:
        ligne_triangles(70)
    elif choix_menu == 3:
        carre(100)
    elif choix_menu == 4:
        ligne_carres(50)
    elif choix_menu == 5:
        etoile(200)


Bonne chance
0