print('Hello, World!')Hello, World!
Criado em 1989 por Guido van Rossum no Centro de Matemática e Tecnológia da Informação na Holanda, o Python é uma linguagem de programação amplamente utilizada em ciência de dados, estatística e desenvolvimento científico em geral. Ao longo desta disciplina, Python será utilizado como ferramenta central para manipular dados, realizar cálculos numéricos, produzir gráficos e implementar rotinas que aparecem com frequência em trabalhos empíricos em economia.
Neste momento inicial do curso, o objetivo não é compreender toda a linguagem nem escrever programas complexos. O foco desta aula é muito mais operacional: aprender a executar comandos simples, entender como o ambiente de programação funciona e desenvolver familiaridade com a lógica básica de interação com o computador por meio de código. É importante destacar que programar não é memorizar comandos, mas aprender a ler, testar e corrigir código. Erros farão parte do processo desde o início. Isso não indica falta de habilidade nem desconhecimento do conteúdo; pelo contrário, erros são a principal fonte de informação sobre como o programa está sendo interpretado pelo computador.
Ao final deste capítulo, espera-se que você seja capaz de:
Essas competências serão usadas continuamente ao longo do curso e são essenciais para o desenvolvimento em tópicos futuros, como construção de funções, manipulação de objetos, análise de dados e visualização. Antes de aprender novos comandos, no entanto, é fundamental compreender o ambiente no qual o programa roda e como ocorre a interação entre o usuário e o interpretador.
Este foi escrito para que o aluno que acompanhou e absorveu o conteúdo do capítulo anterior, sobre fundamentos de computação, seja plenamente capaz de acompanhar. Não há outros pré-requisitos.
Assim como tudo na vida, o Python é uma linguagem de programação com muitas qualidades mas que também possui seus defeitos (em geral ligados à velocidade de execução dos programas). Em sendo uma linguagem de alto nível, é uma linguagem bastante indicada, por exemplo, para aplicações que demandam replicabilidade, dada a facilidade de escrever e interpretar o código. Por outro lado, aplicações que demandam uma interação mais eficiente entre o código e o gerenciamento de memória da máquina, por exemplo, podem se beneficiar de outras linguagens.
No entanto, o conjunto de qualidades do Python e as inúmeras bibliotecas que foram desenvolvidas nos últimos anos parecem ter mais do que compensado as falhas da linguagem. Hoje o Python é uma das principais linguagens de programação (senão a principal) quando o assunto é ciência dos dados e aprendizado de máquina (data science e machine learning, respectivamente). É também uma das principais linguagens de programação por trás de vários dos sistemas de grandes empresas, como Uber, GoldmanSachs, Netflix e Google (fonte: link).
Por todos esses fatores, Python é uma das linguagens com a comunidade mais ativa em fóruns online voltados à programação e é a linguagem que mais cresce no mundo. As figuras abaixo ilustram bem esse crescimento da linguagem nos últimos anos:
Existe mais de uma forma de instalar o Python no seu sistema e ainda mais formas de interagir com a linguagem. Você pode baixar o Python puro (https://www.python.org/downloads/) e instalá-lo diretamente em sua máquina, porém, essa distribuição vem com poucos pacotes já instalados e instalá-los um a um requer paciência. Além disso, a instalação do Python puro pode demandar algumas alterações em configurações do sistema via prompt de comando do Windows, por exemplo, para que seja possível dialogar com a linguagem.
Uma forma mais simples de instalar o Python em seu computador é através da distribuição Anaconda. Além de ser gratuita e já conter vários dos pacotes que iremos utilizar, ela nos fornece diversas ferramentas que facilitam nossa interação com a linguagem. É hoje uma das distribuições do Python mais populares no mundo! Recomendo fortemente utilizar esse caminho.
O passo a passo a seguir foi feito para o sistema Windows 10. Embora o caminho seja parecido, podem haver algumas divergências em relação ao passo a passo para sistemas Linux e MacOS.
Como dito acima, Anaconda é uma distribuição do Python para computação científica (e.g, ciência de dados e aprendizado de máquina), que visa simplificar o gerenciamento e a implantação de pacotes. As versões de pacotes no Anaconda são gerenciadas pelo sistema de gerenciamento de pacotes conda. Através do conda é possível criar ambientes e instalar pacotes distintos de forma a evitar incompatibilidades entre versões de pacotes já instalados.
Além disso, o Anaconda traz consigo o Anaconda Navigator, um ambiente user-friendly para a gestão de pacotes e aplicativos necessários para a utilização do Python sem que seja preciso ter qualquer conhecimento acerca da utilização correta de terminais. Ao abrir o Anaconda Navigator no Windows, você deve ver algo assim:
É possível instalar pacotes e fazer muito mais coisa diretamente pelo Anaconda Navigator. Para os que tiverem interesse em saber um pouco mais, esse link é um bom começo.
Com Anaconda ou sem Anaconda, interagir diretamente com a linguagem ainda depende do uso de um ambiente próprio para esse fim, como no caso das chamadas IDEs. IDE é um acrônimo para Integrated Development Environment, em português, Ambiente de Desenvolvimento Integrado. Ele é um programa que reúne ferramentas necessárias para a construção de outros softwares. A utilização de um IDE ajuda muito os programadores e empresas, pois torna mais rápido o desenvolvimento de aplicações, aumentando a produtividade e reduzindo custos. Existem IDE’s específicas para plataformas, e outras que são mais flexíveis. As mais famosas são o Sublime Text e o Visual Studio Code.
Quais são os componentes típicos de uma IDE?
Editor de código-fonte: Permite edição do código nas linguagens de programação suportadas pelo IDE.
Preenchimento inteligente: Esse é um recurso trazido pelos IDEs que agiliza o desenvolvimento, pois escreve automaticamente trechos do código como, por exemplo, comandos de função.
Compilador: O compilador que você escreveu em uma determinada linguagem de programação para a linguagem de máquina, de modo que os computadores o entendam.
Debugger: É outra ferramenta que contribui para no código-fonte, melhorando o desempenho do programa.
Geração de código: Com esse recurso, é possível predefinir trechos de códigos para serem usados de modelo em outros projetos, agilizando o desenvolvimento de trabalhos futuros.
Como podemos ver, os IDEs reúnem diversas ferramentas que tornam mais simples a vida dos programadores. Dentre todos os benefícios que a utilização desses programas pode trazer para seus projetos, podemos citar alguns:
O Spyder é uma ferramenta leve, simples e ao mesmo tempo poderosa. É um IDE Python de código aberto que conta com elementos avançados de edição, depuração e testes interativos. Ele é bastante utilizado para o aprendizado de Data Science, apesar de não fornecer ferramentas tão avançadas nesse sentido como outras disponíveis. Mas ele é prático e seu depurador destaca bem funções, variáveis e erros. Conta também com um recurso de exploração de variáveis, que exibe os conteúdos armazenados dentro de cada uma. Isso poupa a escrita de comandos de impressão de variáveis na tela.
Disponível com a instalação do Anaconda, uma das maiores e mais utilizadas plataformas de distribuição do Python.
É um IDE Python gratuito, utilizado principalmente na análise e ciência de dados. Ele é fácil e intuitivo, proporcionando um bom ambiente para iniciantes em Python. Também conta com muitos materiais de referência, tornando-se um dos IDEs mais utilizados pela comunidade. Ele trabalha muito bem com grandes conjuntos de dados. Além disso, é ótimo para a estética do código e atua como uma. É possível visualizar e editar facilmente seu código para deixá-lo mais atraente e apresentável.
Além de tudo isso, a estrutura do Jupyter serve muito ao propósito de tornar o código mais facilmente replicável, já que é possível intercalar células de comentários e explicações em linguagem Markdown com células de código propriamente dito, seguidas do resultado (ou erros) das instruções. Ele possui ainda integrações com HTML, por exemplo, que fazem a diferença principalmente na hora de apresentar projetos ou utilizá-los para o aprendizado. O material aula a aula do nosso curso, por exemplo, foi inteiramente desenvolvido e criado no Jupyter!
O Google Colaboratory, carinhosamente chamado de Colab, é um serviço de nuvem gratuito hospedado pelo próprio Google para incentivar a pesquisa de Aprendizado de Máquina e Inteligência Artificial.
É uma ferramenta que permite que você misture código fonte (geralmente em python) e texto rico (geralmente em markdown) com imagens e o resultado desse código, assim como o próprio Jupyter e sua estrutura de notebooks (“cadernos” em inglês). Uma diferença importante é que no caso do Colab os recursos computacionais utilizados para a execução do código são os da Google e não do seu computador. Apesar da versão gratuita disponibilizar apenas algo como 12GB de RAM, é possível ampliar essa capacidade de processamento da máquina virtual por uma conta paga que começa em $5 mensais.
Uma vez entendido o papel do ambiente de programação, o próximo passo é escrever e executar instruções simples. Isso permite observar diretamente como o Python interpreta o código e produz resultados, estabelecendo a base para todo o restante do curso. Tradicionalmente, o primeiro programa que se escreve em uma nova linguagem chama-se “Hello, World!”, porque tudo o que faz é exibir as palavras “Hello, World!” na tela. No Python, ele se parece com isto:
print('Hello, World!')Hello, World!
Este é um exemplo de uma instrução print (instrução de impressão), embora na realidade ela não imprima nada em papel. Ela exibe um resultado na tela. As aspas apenas marcam o começo e o fim do texto a ser exibido; elas não aparecem no resultado. Os parênteses indicam que o print é uma função.
Depois do “Hello, World”, o próximo passo natural é a aritmética. O Python tem operadores, que são símbolos especiais representando operações de computação, como adição e multiplicação. Os operadores \(+\), \(-\) e \(*\) executam a adição, a subtração e a multiplicação, Finalmente, o operador \(**\) executa a exponenciação; isto é, eleva um número a uma potência, como nos seguintes exemplos:
40 + 242
43 - 142
6 * 742
84 / 242.0
6 ** 2 + 642
Em algumas outras linguagens, o \(^\) é usado para a exponenciação, mas no Python é um operador bitwise, chamado XOR. Se não tiver familiaridade com operadores bitwise, o resultado o surpreenderá. Não abordaremos operadores bitwise neste curso, mas você pode ler sobre eles em http://wiki.python.org/moin/BitwiseOperators.
6 ^ 24
Uma instrução é uma unidade básica de código que produz algum efeito, como criar uma variável ou exibir um valor na tela. Entre os recursos mais importantes de uma linguagem de programação está a possibilidade de trabalhar com variáveis, que permitem armazenar e reutilizar informações ao longo do código. Uma variável pode ser entendida como um nome que faz referência a um valor. No Python, uma variável é criada por meio de uma instrução de atribuição, feita a partir de um sinal de igual.
message = 'And now for something completely different'
n = 17
pi = 3.141592653589793Esse exemplo faz três atribuições. A primeira atribui uma string a uma nova variável chamada message; a segunda dá o número inteiro \(17\) a n; a terceira atribui o valor (aproximado) de \(\pi\) a pi. Uma vez definida, você pode chamar a variável e fazer operações com o valor a ela atribuído apenas referenciando o seu nome.
n + 2542
z = n*2 + 16
print(z)50
Os programadores geralmente escolhem nomes significativos para as suas variáveis – eles documentam o uso da variável. Nomes de variáveis podem ser tão longos quanto você queira. Podem conter tanto letras como números, mas não podem começar com um número. O caractere de sublinhar (_) pode aparecer em um nome. Muitas vezes é usado em nomes com várias palavras, como full_name.
Se você der um nome ilegal a uma variável, recebe um erro de sintaxe:
76trombones = 'big parade'Cell In[11], line 1 76trombones = 'big parade' ^ SyntaxError: invalid decimal literal
class = 'Advanced Theoretical Zymurgy'Cell In[12], line 1 class = 'Advanced Theoretical Zymurgy' ^ SyntaxError: invalid syntax
76trombones é ilegal porque começa com um número. Mas o que há de errado com class?
A questão é que class é uma das palavras-chave do Python. O interpretador usa palavras-chave para reconhecer a estrutura do programa e elas não podem ser usadas como nomes de variável. O Python 3 tem estas palavras-chave:
and del from None True
as elif global nonlocal try
assert else if not while
break except import or with
class False in pass yield
continue finally is raise
def for lambda returnVocê não precisa memorizar essa lista. Na maior parte dos ambientes de desenvolvimento, as palavras-chave são exibidas em uma cor diferente; se você tentar usar uma como nome de variável, vai perceber.
Você viu anteriormente que quando o Python se depara com algum erro no código ele interrompe a execução e exibe uma mensagem de erro. Essa mensagem não é aleatória: ela segue uma estrutura relativamente padronizada e contém informações úteis para diagnosticar o que aconteceu. De forma geral, uma mensagem de erro em Python possui três componentes principais:
SyntaxError, NameError, TypeError). Esse é o ponto de partida para entender que tipo de falha ocorreu.Considere o seguinte exemplo:
print("Olá mundo"Cell In[13], line 1 print("Olá mundo" ^ _IncompleteInputError: incomplete input
Ao executar esse código, o Python retorna um erro do tipo _IncompleteInputError. Logo após o tipo há uma breve descrição do erro, que nesse caso é incomplete input. Isso ocorre porque o parêntese de fechamento está ausente, tornando o código inválido do ponto de vista da linguagem. A própria mensagem de erro replica a linha de código com problema e indica a posição em que há o problema de sintaxe. Com o tempo, esse processo de indentificar o tipo, entender o erro para além do tipo e a provável localização no código torna-se quase automático. A habilidade de interpretar mensagens de erro é uma das competências mais importantes em programação e será exercitada continuamente ao longo do curso.
Para instalar novos pacotes para o Python precisamos fazê-lo via prompt de comando. O Anaconda nos fornece um prompt de comando próprio, o Anaconda Prompt que facilita a instalação desses pacotes através dos comandos conda ou pip. Vamos instalar como exemplo o pacote tqdm, que nos permite criar barras de progresso em atividades repetidas.
conda list.conda install tqdm ou pip install tqdm.Note também que alguns dos principais pacotes sobre os quais falarei ao longo do curso, NumPy, SciPy, Matplotlib e Pandas, já vem instalados com o Anaconda, o que não é verdade no Python puro. Mais do que mostrar o que temos instalado na nossa máquina local, o comando conda list nos mostra as versões de cada uma das bibliotecas disponíveis e qual o ambiente utilizado em sua instalação.
Diferença entre conda e pip: falar mais sobre a diferença entre esses dois comandos populares para instalação de pacotes vai um pouco além do escopo desse curso. De forma bastante resumida, podemos dizer que o pip é um gerenciador de pacotes que nos permite instalar qualquer biblioteca escrita em Python e disponível no Python Package Index (PyPI), o principal repositório de pacotes para a linguagem. O conda, no entanto, é mais do que um simples gerenciador de pacotes já que é possível fazer diferentes instalações em diferentes ambientes de modo a reduzir problemas de incompatibilidade entre versões. Além disso, através do conda podemos instalar pacotes escritos em outras linguagens também, como R e C++. Por outro lado, é possível que você demore mais e tenha problemas para instalar alguns pacotes utilizando o conda. Aos que quiserem saber um pouco mais sobre a diferença entre esses dois métodos para instalação, esses links (1 e 2) podem ser um bom começo.
Sempre que quisermos trazer algo “de fora”, devemos carregar as bibliotecas específicas, seja por completo ou apenas um subconjunto de suas funções. Fazemos isso por meio do comando import. Vamos utilizar como exemplo a biblioteca NumPy, uma das principais bibliotecas de comando do Python em se tratando de operações algébricas e matriciais.
Dedicaremos uma aula inteira para trabalhar com o NumPy daqui algumas semanas, mas por hora trabalharemos apenas com as funções geradoras de números aleatórios, em especial a função geradora de números aleatórios distribuídos de acordo com uma Distribuição Uniforme padrão (vocês devem se lembrar das características dessa distribuição das aulas de estatística, mas caso ainda restem dúvidas sempre existe o Wikipedia).
Há 3 formas de trabalhar com essa função específica, contida no NumPy:
import numpyimport numpy as npfrom numpy.random import uniformQual a diferença entre esses métodos? No Python, sempre que formos utilizar uma função de algum pacote “de fora” é preciso dizer ao Python de onde que essa função está vindo. Se quisermos usar a função uniform() através do 1º método, por exemplo, é preciso chamá-la utilizando o nome do pacote, nesse caso numpy.random.uniform(). O 2º método encurta esse nome de tal forma que é possível chamar a mesma função usando np.random.uniform(). Por fim, no 3º caso basta chamar a função diretamente, isto é, uniform().
Mas se o 3º caso é mais direto, porque não usá-lo sempre? Por duas razões bem simples: (i) usar a sintaxe dos 2 primeiros casos torna o código mais compreensível e depurável, já que no caso de algum problema de execução sabemos onde procurar a resposta, e (ii) é comum pacotes distintos usarem o mesmo nome para funções que fazem operações distintas, o que pode gerar problemas de incompatibilidade e/ou de executarmos algo diferente daquilo que gostaríamos de executar.
Na maioria das vezes, acabamos utilizando o 2º método, já que isso permite reduzir linhas desnecessárias de código ao mesmo tempo que facilita a replicabilidade e a atividade de depuração do código.
Neste capítulo, você aprendeu a executar seus primeiros comandos em Python, a interagir com o ambiente de programação e a interpretar mensagens básicas de erro. Mais importante do que os comandos específicos é o desenvolvimento de uma postura adequada frente ao código: testar, observar, errar, corrigir e testar novamente. Nos próximos capítulos, introduziremos objetos básicos da linguagem, como números, textos e listas, sempre construindo sobre as habilidades operacionais estabelecidas aqui.
Utilize o Python para responder as seguintes perguntas:
Crie uma variável chamada salario_mensal com valor igual a \(3500\).
rendimento_anual que seja construída a partir de salario_mensal e considere o recebimento do 13º salário no mês de dezembro. Utilize uma instrução para exibir rendimento_anual na tela.Explique, com suas próprias palavras, a diferença entre escrever código em um editor de texto simples e escrever código em uma IDE ou ambiente interativo. Sua resposta deve mencionar pelo menos dois recursos que facilitam o aprendizado em IDEs.
Considere o código abaixo:
print("Resultado:"
resultado == 10 + 5