2017-06-15 4 views
2

J'essaie de créer un programme qui demande à l'utilisateur de dessiner une forme et combien de cette forme dessiner en tortue Python. Je ne sais pas comment faire la boîte de dialogue pour que l'utilisateur puisse dire combien il faut ajouter et faire fonctionner correctement. Toute aide sera géniale! Voici mon code à ce jour:Demander à l'utilisateur quelle forme dessiner et combien de tortue Python

import turtle 

steps = {"triangle": 3, "square": 4, "pentagon": 5, "hexagon": 6, "octagon": 7} 

#this is the dialogue box for what shape to draw and moving it over a bit so the 
#next shape can be seen 
def onkey_shape(): 
    shape = turtle.textinput("Enter a shape", "Enter a shape: triangle, 
square, pentagon, hexagon, octagon") 
    if shape.lower() in steps: 
     turtle.forward(20) 
     set_shape(shape.lower()) 
    turtle.listen() 

def set_shape(shape): 
    global current_shape 
    turtle.circle(40, None, steps[shape]) 
    current_shape = shape 





turtle.onkey(onkey_shape, "d") 

turtle.listen() 

turtle.mainloop() 

Répondre

0

Tout comme vous avez utilisé textinput() pour obtenir votre forme, vous pouvez utiliser numinput() pour obtenir votre compte de combien de formes:

count = numinput(title, prompt, default=None, minval=None, maxval=None) 

Voici une refonte de votre code , qui à titre d'exemple dessine simplement des formes concentriques - vous les dessinez où vous le souhaitez:

import turtle 

STEPS = {"triangle": 3, "square": 4, "pentagon": 5, "hexagon": 6, "octagon": 7} 

# this is the dialogue box for what shape to draw and 
# moving it over a bit so the next shape can be seen 

def onkey_shape(): 
    shape = turtle.textinput("Which shape?", "Enter a shape: triangle, square, pentagon, hexagon or octagon") 

    if shape.lower() not in STEPS: 
     return 

    count = turtle.numinput("How many?", "How many {}s?".format(shape), default=1, minval=1, maxval=10) 

    turtle.penup() 
    turtle.forward(100) 
    turtle.pendown() 

    set_shape(shape.lower(), int(count)) 

    turtle.listen() 

def set_shape(shape, count): 
    turtle.penup() 
    turtle.sety(turtle.ycor() - 50) 
    turtle.pendown() 

    for radius in range(10, 10 - count, -1): 
     turtle.circle(5 * radius, steps=STEPS[shape]) 
     turtle.penup() 
     turtle.sety(turtle.ycor() + 5) 
     turtle.pendown() 


turtle.onkey(onkey_shape, "d") 
turtle.listen() 

turtle.mainloop() 

La partie la plus délicate, que vous avez compris, est que, normalement, nous appelons seulement turtle.listen() une fois dans un programme de tortue mais en invoquant textinput() ou numinput() bascule l'écouteur dans la boîte de dialogue qui apparaît, nous devons donc appeler de nouveau explicitement turtle.listen() après la fin des boîtes de dialogue.

+0

AWESOME Merci beaucoup! C'est exactement ce dont j'avais besoin! –