Módulos e Obtendo Ajuda

Módulos

Um módulo é um arquivo contendo definições e comandos em Python para serem usados em outros programas em Python. Há diversos módulos do Python que fazem parte da biblioteca padrão. Nós já utilizamos um deles intensamente, o módulo turtle. Lembre-se que uma vez que o módulo é importado, podemos utilizar as coisas que estão definidas dentro dele.

Estamos usando aqui Screen e Turtle, ambos definidos dentro do módulo turtle.

Mas e se ninguém tivesse nos avisado sobre o módulo turtle? Como ficaríamos sabendo da sua existência? Como saberíamos o que ele pode fazer para a gente? A resposta é pedir ajuda e o melhor jeito para isso é consultando a documentação do Python.

A documentação para a versão 3 do Python está disponível (em inglês) no sítio http://docs.python.org/py3k/ (a página é mostrada abaixo). Essa é uma referência muito útil sobre todos os aspectos do Python. Esse sítio contém uma listagem de todos os módulos padrões disponíveis no Python (veja Global Module Index). Observe também que existe um manual de referência à linguagem (Language Reference) e um tutorial (Tutorial), bem como instruções para instalação, dicas de como fazer, e respostas a perguntas frequentes. Recomendamos que você tente se familiarizar com essas informações e se acostume a utilizá-las com frequência.

../_images/pythondocmedium.png

Se você ainda não o fez, dê uma olhada na lista de módulos (Global Module Index). Nessa lista você vai encontrar, em ordem alfabética, todos os módulos disponíveis na biblioteca padrão. Procure pelo módulo turtle.

../_images/moduleindexmedium.png ../_images/turtlemodmedium.png

Observe que todas as funcionalidades de uma tartaruga (turtle) que já falamos anteriormente estão descritas. No entanto, há muitas outras. Aproveite para ler e conhecer melhor essas outras funcionalidades que as tartarugas podem fazer.

Nota: Módulos do Python e limitações do activecode

Em todos os capítulos desse livro, as janelas do activecode permitem que você pratique as partes do Python que você está aprendendo. Nós mencionamos no primeiro capítulo que a atividade de programação é normalmente realizada dentro de um ambiente de desenvolvimento e que o activecode utilizado aqui serve apenas para nos ajudar a aprender. Essa não é a maneira de desenvolver programas reais. Por isso é necessário mencionar que muitos dos módulos da biblioteca padrão do Python não funcionarão no ambiente do activecode. De fato, apenas os módulos turtle, math e random estão funcionando no momento. Se você deseja explorar algum outro módulo, você precisa utilizar um ambiente de desenvolvimento mais poderoso.

Teste seu entendimento

    Q-3: Em Python um módulo é:

  • Um arquivo contendo definições e comandos em Python para serem usados em outros programas em Python
  • Um módulo pode ser reutilizado em programas diferentes.
  • Um bloco separado de código dentro de um programa.program.
  • Um módulo é um bloco separado de código mas ele é separado do programa.
  • Uma linha de código em um programa.
  • A chamada de uma função de um módulo pode ser uma linha de código mas módulos são em geral constituídas de múltiplas linhas de código separadas do programa.
  • Um arquivo que contem documentação sobre funções do Python.
  • Cada módulo possui a sua própria documentação, mas o módulo em si é mais que apenas a documentação.

    Q-4: Para saber mais sobre módulos da biblioteca padrão do Python você deve:

  • Visitar a Documentação do Python disponível online.
  • O sítio online contém a lista com todos os módulos da biblioteca padrão do Python.
  • Ver os comandos import do programa que você está fazendo.
  • Os comandos import informam apenas quais módulos são utilizados pelo programa, não informam como usá-los ou o que eles contém.
  • Perguntar ao professor.
  • Mesmo que o professor conheça uma boa parte dos módulos do Python, o mais provável é que ele vai ter de olhar a documentação dos módulos, assim como você.
  • Procurar nesse livro.
  • Esse livro explica apenas uma parte dos módulos disponíveis. Para a lista completa você deve procurar em outro lugar.

    Q-5: Verdadeiro / Falso: Todos os módulos da biblioteca padrão do Python funcionam no activecode.

  • Verdadeiro
  • Apenas os módulo turtle, math, e random foram implementados até agora no activecode.
  • Falso
  • Apenas os módulo turtle, math, e random foram implementados até agora no activecode.

Mais sobre o uso de módulos

Antes de prosseguir com a exploração dos outros módulos, nós vamos falar um pouco mais sobre o que são módulos e como são tipicamente usados. Uma das coisas mais importantes a saber sobre módulos é o fato de que eles são objetos de dados, assim como qualquer outro tipo de dado em Python. Objetos do tipo module simplesmente contém outros elementos do Python.

A primeira coisa que precisamos fazer quando queremos usar um módulo é fazer um import. No exemplo acima, a instrução import turtle cria um novo nome, turtle, que faz referência a um objeto module. Isso se parece muito com os diagramas de referência que vimos anteriormente para as variáveis simples.

../_images/modreference.png

A fim de utilizar algo contido em um módulo, usamos a notação de ponto, fornecendo o nome de módulo e o item específico unidos por um “ponto”. Por exemplo, para usar a classe Turtle, escrevemos turtle.Turtle. Você deve ler isso como: “No módulo turtle, acesse o elemento Python chamado Turtle”.

Agora vamos mostrar alguns outros módulos que você pode achar útil.

O módulo math

O módulo math contém funções matemáticas que você costuma encontrar em calculadoras e algumas constantes matemáticas como pi e e. Como vimos acima, ao importar o módulo math, obtemos uma referência para um objeto module que contém esses elementos.

../_images/mathmod.png

Mostramos a seguir como usar alguns itens do módulo math. Se você quiser saber mais detalhes, dê uma olhada na documentação do módulo em Math Module.

Observe outra diferença entre este módulo e nosso uso de turtle. Em turtle criamos objetos (tanto Turtle quanto Screen) e chamamos métodos desses objetos. Lembre-se que um turtle é um objeto de dados (lembre-se do alex e da tess). Precisamos criar um objeto antes de usá-lo. Quando dizemos alex = turtle.Turtle(), estamos chamando o construtor da classe Turtle que retorna um objeto turtle.

Funções matemáticas não precisam ser construídas. Elas simplesmente executam uma tarefa. Elas ficam todas alojadas no módulo chamado math. Uma vez que o módulo math tenha sido importado, qualquer coisa definida lá pode ser usada no nosso programa. Observe que usamos sempre o nome do módulo seguido de um ponto seguido pelo item específico do módulo (math.sqrt). Você pode pensar nisso como sobrenome.nome onde o sobrenome é o módulo (família) e o nome indica o item individual no módulo.

Se você não tiver feito isso ainda, dê uma olhada na documentação do módulo math.

Teste seu entendimento

    Q-8: Que comando permite que você utilize o módulo math em seu programa?

  • import math
  • O módulo deve ser importado antes que você possa usar qualquer coisa declarada dentro do módulo.
  • include math
  • O termo correto não é include, mas é parecido.
  • use math
  • Você quer usar partes do módulo, mas esse não é o termo correto.
  • Nenhum comando é necessário, você pode usar as funções sempre.
  • Você não pode usar um módulo do Python sem um comando no início do seu programa que diga ao Python explicitamente que você quer usar o módulo.

O módulo random

Muitas vezes queremos usar números aleatórios em programas. Aqui estão alguns usos típicos:

  • Para jogar um jogo de azar em que o computador precisa jogar alguns dados, escolher um número, ou jogar uma moeda,

  • Para embaralhar um baralho de cartas aleatoriamente,

  • Para permitir que uma nova nave inimiga apareça aleatoriamente e atire em você,

  • Para simular a precipitação de chuva em um modelo computacional para estimar o impacto ambiental da construção de uma barragem,

  • Para criptografar sua sessão bancária na Internet.

O Python fornece um módulo random que ajuda com tarefas como esta. Você pode dar uma olhada na documentação. Aqui estão as principais coisas que podemos fazer com esse módulo.

Pressione o botão Run algumas vezes. Note que os valores se modificam a cada vez. Esses números são aleatórios.

A função randrange gera um inteiro no intervalo definido pelo menor e maior argumento, usando a mesma semântica do range — ou seja, o valor inicial é incluído mas o final é excluído. Todos os valores tem a mesma probabilidade de ocorrência (ou seja, os resultados são uniformemente distribuídos).

A função random() retorna um número em ponto flutuante no intervalo [0.0, 1.0) – o colchete significa “intervalo fechado à esquerda” e o parênteses significa “intervalo aberto à direita”. Em outras palavras, 0.0 é possível, mas todos os números retornados serão estritamente menores que 1.0. É comum escalar os resultados após chamar esse método para transformá-los para dentro de um intervalo apropriado para a sua aplicação.

Nesse caso, nós convertemos o resultado da chamada do método em um número no intervalo [0.0, 5.0). Novamente, esses números são uniformemente distribuídos — números perto do 0 são tão prováveis de aparecer quanto o 0.5, ou números perto de 1.0. Se você continuar a pressionar o botão Run, você verá valores aleatórios de 0.0 até o limite de, mas sem incluir o valor, 5.0.

É importante notar que geradores de números aleatórios são baseados em um algoritmo determinístico — reproduzível e previsível. Por isso eles são chamados de geradores pseudo-aleatórios — pois eles não são verdadeiramente aleatórios. Eles começam com um valor de semente. Cada vez que você pedir um outro número aleatório, você vai receber um com base no valor atual da semente, e o estado da semente (que é um dos atributos do gerador) é atualizado. A boa notícia é que cada vez que você executar o seu programa, o valor da semente é provavelmente diferente, significando que apesar dos números aleatórios estarem sendo criados usando algoritmos determinísticos, você vai obter um comportamento aleatório cada vez que você executar.

Lab

  • Sine Wave Nesse exercício dirigido de laboratório você vai fazer a tartaruga desenhar uma onda senoidal.

Teste seu entendimento

    Q-11: Qual das seguintes alternativas corresponde à forma correta de referenciar o valor de pi dentro do módulo math. Assuma que você já importou o módulo.

  • math.pi
  • Para chamar ou referenciar algo contido em um módulo use a notação com ponto (.).
  • math(pi)
  • Essa sintaxe é usada para chamar um função e não para referenciar um item em um módulo.
  • pi.math
  • O nome do módulo deve vir na frente para acessar valores ou funções do módulo.
  • math->pi
  • A notação -> não é usada em Python.

    Q-12: Qual módulo você provavelmente deve utilizar para escrever uma função para simular o lançamento de um dado?

  • o módulo math
  • Embora você possa desejar usar o módulo math para realizar outras computações numéricas em seu programa, ele não contém funções que possam ajudar você a simular o lançamento de um dado.
  • o módulo random
  • Você provavelmente chamaria a função random.randrange.
  • o módulo turtle
  • O módulo turtle produz gráficos interessantes mas provavelmente não te ajudaria nessa questão.
  • o módulo game
  • O Python não possui um módulo game.

    Q-13: O código correto para gerar um número aleatório entre 1 e 100 (incluindo o 1 e o 100) é:

  • prob = random.randrange(1, 101)
  • Este código gera um número entre 1 e 101, mas sem incluir o 101.
  • prob = random.randrange(1, 100)
  • Este código gera um número entre 1 e 100, mas sem incluir o 100. O maior número gerado seria 99.
  • prob = random.randrange(0, 101)
  • Este código gera um número entre 0 e 100. O menor número gerado seria 0 e o maior 100.
  • prob = random.randrange(0, 100)
  • Este código gera um número entre 0 e 100, mas sem incluir o 100. O menor número gerado seria 0 e o maior 99.

    Q-14: Uma razão que loterias não utilizam computadores para sortear os números aleatórios é:

  • Não há computadores no palco na hora do sorteio.
  • Eles poderiam facilmente colocar um computador no palco.
  • Pois computadores não geram números realmente aleatórios, eles geram números pseudo-aleatórios.
  • Computadores geram números aleatórios usando um algoritmo determinístico. Isso significa que se alguém descobrisse o algoritmo utilizado essa pessoa poderia prever os próximos valores a serem gerados e ganharia a loteria sempre.
  • Eles gerariam o mesmo número repetidamente.
  • Isso poderia acontecer se o mesmo valor de semente for utilizado repetidamente, mas eles poderiam se certificar que isso nunca ocorresse.
  • O computador não é capaz de dizer quais os números já foram sorteados, de forma que ele pode gerar 5 números idênticos ao invés de 5 números distintos.
  • O programador deve criar um programa capaz de garantir que cada novo número sorteado seja distinto de todos os anteriores, o que é fácil de fazer em Python.

Glossário

biblioteca padrão

Uma coleção de módulos que faz parte de uma instalação padrão do Python.

determinístico

Um processo que é reproduzível e previsível.

documentação

Um lugar onde você pode pegar informação detalhada sobre aspectos da linguagem de programação.

gerador de números aleatórios

Uma função que te fornece números aleatórios, geralmente entre 0.0 e 1.0.

módulo

Um arquivo contendo definições e comandos em Python para serem usados em outros programas em Python. Os conteúdos de um módulo são disponibilizados para outro programa pelo uso do comando import.

número aleatório

Um número que é gerado de forma a exibir aleatoriedade estatística.

número pseudo-aleatório

Um número que não é genuinamente aleatório mas criado a partir de um algoritmo.

Exercícios

You have attempted of activities on this page