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.

Image

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.

Image

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º.

Image

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.

Image

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

  • Árvore Binária de Busca em Python
  • Supresas divertidas em Python - Easter Eggs
  • Ordenação de uma lista
  • Conjuntos em Python
  • Colorindo grafos -- ou, como escolher cores para um mapa automaticamente

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
    • Image Python Help
    • Junte-se a 229 outros assinantes
    • Já tem uma conta do WordPress.com? Faça login agora.
    • Image 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
      Advertisement