Python Help

Menu

Pular para o conteúdo
  • Inicial
  • Por que Python?
  • IDEs Python
  • Sobre

Arquivo mensal: julho 2011

Padrão

Publicado por

Valdir Stumm Jr

Postado no

9 de julho de 2011

Publicado em

módulos

comentários

6 Comentários

O módulo turtle

Turtle é um módulo Python que oferece funcionalidades para fazermos desenhos na tela, com comandos muito simples. Esse módulo segue a idéia da linguagem de programação Logo, que é muito utilizada em escolas como apoio ao ensino de disciplinas regulares e também para introdução a programação para crianças. A linguagem Logo segue a ideia de um robô (representado na tela por uma tartaruga) que o usuário pode controlar através de comandos simples de movimentação.

Vou apresentar aqui alguns dos recursos básicos do módulo turtle e mostrar como fazer alguns desenhos simples na tela.

Instalação no Ubuntu

Usando o sistema operacional Ubuntu, é preciso instalar o pacote python-tk, além do python.

sudo apt-get install python-tk

Iniciando

Em primeiro lugar, é necessário importar o módulo turtle.

import turtle

Depois disso, é necessário obter uma caneta (Pen).

pen = turtle.Pen()

Em seguida, teremos uma tela em branco, com um ponteiro posicionado no centro, apontando para o lado direito. OK, agora temos que mandar a caneta ser movimentada. Para isso temos dois comandos principais:

  • turtle.forward(n) → Faz com que a caneta se movimente na tela, para frente, n posições
  • turtle.backward(n) → Faz com que a caneta se movimente na tela, para trás, n posições

Mas e existe algum comando para fazer com que a caneta (ponteiro) vire para os lados? A resposta é sim! São os comandos:

  • turtle.left(ang) → gira o ponteiro em ang graus para a esquerda
  • turtle.right(ang) → gira o ponteiro em ang graus para a direita

OK, mas e na prática? Considere o exemplo a seguir:

import turtle
pen = turtle.Pen()   # Constrói um objeto caneta  (Pen)
pen.forward(100)     # anda 100 posições para a frente
pen.right(45)        # gira o ponteiro em 45 graus para a direita
pen.forward(100)     # anda mais 100 posições para a frente

O resultado de sua execução pode ser visto na Figura 1.

Figura 1. Tela de desenho do turtle

O que o código fez foi mandar a caneta se movimentar 100 posições para a frente, virar o sentido da caneta em 45 graus para a direita e mandar a caneta se movimentar mais 100 posições para a frente.

Algumas Formas Geométricas

Agora que já vimos como desenhar uma linha na tela e como fazer com que o ponteiro gire, podemos usar a criatividade para compor algumas formas geométricas conhecidas.  Vamos começar pela mais simples de todas: o quadrado.

O Quadrado

Considere que você é o ponteiro que aparece no centro da tela e que a tela é uma grande área de areia onde você está (na praia, por exemplo). Se você quiser desenhar um grande quadrado de 4m de lado na areia usando um graveto, o que terá que fazer?

  1. Caminhar em frente por 4m, arrastando um graveto na areia
  2. Girar o corpo 90º para a esquerda
  3. Caminhar em frente por 4m, arrastando o graveto na areia
  4. Girar o corpo 90º para a esquerda
  5. Caminhar em frente por 4m, arrastando o graveto na areia
  6. Girar o corpo 90º para a esquerda
  7. Caminhar em frente por 4m, arrastando o graveto na areia
  8. Nesse momento você volta ao ponto de origem, correto?

Pronto, o quadrado está desenhado no chão. Para desenhar usando o módulo turtle, você deverá usar a mesma lógica.

import turtle
pen = turtle.Pen()
pen.forward(100)
pen.left(90)
pen.forward(100)
pen.left(90)
pen.forward(100)
pen.left(90)
pen.forward(100)

A Figura 2 mostra o resultado da execução do código acima.

Figura 2. Um quadrado

O Triângulo

Imagine o mesmo cenário da areia. Agora você precisa desenhar um triângulo equilátero. Na Figura 3 percebemos que em um triângulo equilátero duas retas sempre são separadas por um ângulo de 60º.

Figura 3. Um triângulo *

Isso quer dizer que, após desenharmos uma reta de tamanho a, devemos girar 120º para um lado e então desenhar outra reta de tamanho a, girar mais 120º para o mesmo lado e desenhar outra reta de tamanho a. Mas por que 120º?
Considere a Figura 4. Nela, vemos uma reta vermelha passando sobre um dos lados e se extendendo para além do fim do triângulo. Nessa reta está identificado um ângulo de 180º, que nada mais é do que meia rotação. Isso significa que, se rotacionarmos o ponteiro em 180º, este irá somente inverter o sentido (experimente isso no turtle). Mas não é isso o que queremos. Queremos posicionar nosso ponteiro em um ângulo de 60º com relação à direção atual. Para isso, temos que rotacionar o ponteiro em 120º (180º-60º), que é o que falta para alcançarmos o ângulo de 60º, como mostra a área vermelha na Figura 4.

Figura 4. Um triângulo equilátero *

import turtle
pen = turtle.Pen()
pen.forward(100)
pen.left(120)
pen.forward(100)
pen.left(120)
pen.forward(100)

Assim sendo, o código abaixo desenha um triângulo equilátero de lado 100 na tela.

O Círculo

O módulo turtle já oferece um método pronto para o desenho de círculos. O método circle, disponível em objetos do tipo Pen, desenha um círculo de acordo com o valor do raio, passado a ele como entrada.

import turtle
pen = turtle.Pen()
pen.circle(100)

O exemplo acima desenha um círculo de raio 100.

Métodos Adicionais

Além dos já conhecidos métodos para movimentação e rotação do ponteiro, também contamos com alguns métodos que mudam características do turtle. A seguir, temos alguns deles:

  • turtle.speed(): modifica a velocidade do ponteiro. Possui as seguintes opções de velocidade: ‘fastest’, ‘fast’, ‘normal’, ‘slow’, ‘slowest’ (do mais veloz para o menos veloz)
  • Pen.color(): modifica cor dos desenhos a serem feitos.
import turtle
pen = turtle.Pen()
turtle.speed('fastest')
pen.color('red')
pen.circle(100)

Exemplos Interessantes

Um círculo sem utilizar o método circle():

import turtle
pen = turtle.Pen()
turtle.speed('fastest')
for i in range(0, 360):
    pen.forward(1)
    pen.right(1)

Vários círculos, usando o método circle():

import turtle
pen = turtle.Pen()
turtle.speed('fastest')
for i in range(0, 180):
    pen.circle(40)
    pen.right(5)

É isso, agora basta praticar, usando bastante a criatividade para fazer alguns desenhos legais usando o turtle. 🙂

 
* As Figuras 3 e 4 são derivadas de http://pt.wikipedia.org/wiki/Ficheiro:Triangolo-Equilatero.png e são distribuídas sob a mesma licença do original.
Follow @stummjr

Compartilhar:

  • Clique para compartilhar no X(abre em nova janela) 18+
  • Clique para compartilhar no Telegram(abre em nova janela) Telegram
  • Clique para compartilhar no Pocket(abre em nova janela) Pocket
  • Clique para enviar um link por e-mail para um amigo(abre em nova janela) E-mail
  • Clique para imprimir(abre em nova janela) Imprimir
Curtir Carregando...

Buscar

Últimos posts

  • Preservando a ordem de sequências ao remover duplicatas
  • Como autenticar um spider Scrapy em um website
  • Esquisitices (ou não) no arredondamento em Python 3
  • Gerando amostras aleatórias com Reservoir Sampling em Python
  • Web scraping em páginas baseadas em JavaScript com Scrapy
  • Usando comando with para evitar acoplamento temporal
  • Customizando o prompt do IPython 5+
  • O estranho caso do else em loops
  • Tente outra vez
  • Funções anônimas em Python

Top 10

  • Supresas divertidas em Python - Easter Eggs
  • Comandos de ajuda no shell Python

Categorias

algoritmos banco de dados dicas rápidas documentação estruturas listas misc módulos oo Python3 scrapy shell strings Uncategorized web web scraping

Posts por autor

  • Avatar de Elias Dorneles Elias Dorneles
  • Avatar de Valdir Stumm Jr Valdir Stumm Jr

Arquivos

  • fevereiro 2018 (1)
  • outubro 2017 (1)
  • setembro 2017 (1)
  • junho 2017 (1)
  • outubro 2016 (2)
  • setembro 2016 (1)
  • abril 2016 (1)
  • agosto 2015 (1)
  • fevereiro 2015 (1)
  • janeiro 2015 (3)
  • setembro 2014 (1)
  • agosto 2014 (1)
  • julho 2014 (1)
  • junho 2014 (1)
  • maio 2014 (1)
  • abril 2014 (2)
  • fevereiro 2014 (1)
  • janeiro 2014 (1)
  • dezembro 2013 (2)
  • novembro 2013 (1)
  • outubro 2013 (3)
  • setembro 2013 (4)
  • agosto 2013 (1)
  • julho 2013 (2)
  • junho 2013 (5)
  • maio 2013 (2)
  • abril 2013 (4)
  • março 2013 (6)
  • fevereiro 2013 (1)
  • janeiro 2013 (2)
  • dezembro 2012 (1)
  • novembro 2012 (2)
  • outubro 2012 (1)
  • setembro 2012 (4)
  • agosto 2012 (2)
  • julho 2012 (4)
  • junho 2012 (7)
  • maio 2012 (5)
  • abril 2012 (1)
  • março 2012 (1)
  • fevereiro 2012 (1)
  • janeiro 2012 (1)
  • dezembro 2011 (2)
  • novembro 2011 (7)
  • outubro 2011 (3)
  • setembro 2011 (2)
  • agosto 2011 (5)
  • julho 2011 (1)
  • março 2011 (4)
  • fevereiro 2011 (3)
  • janeiro 2011 (2)

Licença

Creative Commons License

RSS

RSS Feed RSS - Posts

Blog no WordPress.com.
Privacidade e cookies: Esse site utiliza cookies. Ao continuar a usar este site, você concorda com seu uso.
Para saber mais, inclusive sobre como controlar os cookies, consulte aqui: Política de cookies
  • Assinar Assinado
    • Python Help
    • Junte-se a 229 outros assinantes
    • Já tem uma conta do WordPress.com? Faça login agora.
    • Python Help
    • Assinar Assinado
    • Registre-se
    • Fazer login
    • Denunciar este conteúdo
    • Visualizar site no Leitor
    • Gerenciar assinaturas
    • Esconder esta barra
 

Carregando comentários...
 

Você precisa fazer login para comentar.

    %d
      Crie um site como este com o WordPress.com
      Comece agora