Pular para o conteúdo principal

Aprendendo a Programar com Python #01

# Números e Matemática Básica Se você chegou neste tutorial, é porque ficou sabendo do Python, uma linguagem de programação bem interessante pra quem deseja aprender a programar. Mas que tipo de programas podemos criar com Python? A lista é grande mas vou citar alguns exemplos: gerenciadores de arquivos, editores de texto, jogos, programas para controlar robôs, programas para fazer buscas em bancos de dados, sites de comércio eletrônico e programas que usam aprendizado de máquina e inteligência artificial. E o mais interessante: o Python está disponível em vários sistemas e é de uso livre e gratuito! ## Primeiros passos Antes de mais nada, você precisa baixa e instalar o Python. ### Instalação do Python 1. Vá no endereço https://www.python.org/downloads/. Logo em cima da página aparece "Download the latest version for Windows" e um botão abaixo. Clique no botão "Download Python" para baixar a última versão estável para o seu sistema operacional (enquanto escrevo este tutorial, é o 3.11). 2. Execute o arquivo de instalação e marque as duas opções "Use admin privileges when installing py.exe" e "Add python.exe to PATH". Clique depois em "Install Now". Aparece uma outra caixa onde é necessário clicar "Sim" para fornecer privilégios de administrador ao instalador. 3. Quando aparecer "Setup was successful", clique em "Close". Já podemos usar o Python. Molezinha né? ### Conhecendo o IDLE Junto com o Python, foi instalado um ambiente de desenvolvimento integrado chamado IDLE. O que é isso? É um conjunto de ferramentas para desenvolver e testar programas. Agora, abra o IDLE para testar (no Windows, aperte a tecla janela ⊞ e clique em IDLE). A primeira janela que aparece é a do Shell que oferece uma interface para o Python. Funciona da seguinte forma: você digita os comandos onde aparece a flechinha `>>>`; o Shell envia o comando para o Python; então o Python calcula e devolve o resultado que é mostrado na tela do Shell. Tente digitar alguma coisa e veja os resultados.
Como se pode ver na figura, aparece a versão do Python com qual o Shell está se comunicando (3.11.3). Como em qualquer linguagem, algumas palavras fazem sentido e outras não. Para os comandos que o Python não consegue compreender, ele retorna **SyntaxError** (erro de sintaxe). Você vai aprender toda a sintaxe do Python, começando pelas operações matemáticas. ### Configurando tamanhos e fontes Antes de prosseguir, vamos alterar as configurações de fonte do IDLE no menu *Options > Configure IDLE*. Aparece a caixa de diálogo *Settings*. Na lista *Font Face*, procure e clique na fonte Consolas, depois altere seu tamanho na caixinha *Size* para 12, e clique em *Ok*. Agora ficou bem melhor para ler e enxergar o código! ## Entendendo as operações básicas Você pode fazer as contas de matemática mais comuns: soma, subtração, multiplicação e divisão. Digite estes comandos no Shell para testar: ```python >>> 25+35 60 >>> 25-35 -10 >>> 2*5.5 11.0 >>> 9/2 4.5 ``` Note que os símbolos usados (`+`, `-`, `*` e `/`) são chamados de **operadores** e os números são chamados de **operandos**. Juntos, eles compõe uma **operação**. *Uma dica para copiar os exemplos deste tutorial:* Na janela do Shell, pressione as teclas ⊞ + ˂ (janela mais seta para a esquerda) para colocá-la à esquerda do monitor e, na janela do navegador, pressione ⊞ + ˃ (janela mais seta para a direita) para colocá-la do lado direito. *Porque `*` e `/` são os operadores de multiplicação e divisão, ao invés de × e ÷?* Você deve saber que dígitos, letras e símbolos são chamados de caracteres. Para mostrar um caractere na tela, o computador precisa ter seu desenho guardado na memória. Só que antigamente as memórias eram limitadas e também o número de caracteres. O principal conjunto de caracteres se chama ASCII, foi criado para os primeiros computadores da IBM e não continha × e ÷. Também não tinha caracteres com acentos ou cedilha para outros idiomas. Eles existem agora em novos conjuntos, como o UTF-8 e o Unicode. Então qual foi a solução encontrada para programar na época? Usar caracteres similares, como o asterisco `*` e a barra invertida `/`. #### Exemplo 1 - dividindo de laranjas Veja como é simples usar o Python como uma calculadora. João comprou 3 sacos de 11 laranjas na feira, ganhou mais 6 de brinde, deu 12 pra sua mãe e distribuiu o resto entre ele e suas duas irmãs. Quantas laranjas recebeu cada irmão? ***Resposta:*** ```python >>> 3*11+6-12 27 >>> 27/3 9.0 ``` Cada irmão recebeu 9 laranjas. *Você percebeu?* O python usa a convenção inglesa para separar as casas decimais: ponto no lugar da vírgula. Você deve tomar cuidado ao escrever os números reais, se usar vírgula, o python vai interpretar como algo diferente. ### Precedência de operadores Olha essa conta: $4+10/2$. Qual é o resultado dela? Lendo da esquerda para a direita, podemos interpretar de duas formas: 1. Somamos 4 com 10 que dá 14. Agora divide por 2, com resultado igual a 7. 2. A divisão de 10 por 2 é 5. Então, 4 mais 5 gera o resultado igual a 9. Muita gente se confunde com isso. A segunda é a forma correta de interpretar essa conta, tanto na calculadora como no papel. Também será a resposta do Python. A razão disso é que as operações de multiplicação e divisão precedem as de soma e subtração. Então elas têm **precedência** sobre as demais operações. Significa que serão calculadas antes das outras. *Existe uma maneira de dar mais importância à soma?* Sim: no papel, escreveríamos $$ \frac{4+10}{2} \quad\text{ou}\quad (4+10)/2. $$ Agora não há dúvidas, a resposta é a da alternativa 1. A mudança essencial foi colocar a soma no numerador ou dentro de parênteses. O par de parênteses coloca prioridade no que está dentro dele. Agora você entendeu porque o Exemplo 1 foi calculado com dois comandos separados? Para fazer a conta em apenas uma linha, precisamos colocar prioridade na primeira parte da conta, para que seja efetuada antes. Ficaria `(3*11+6-12)/3`. Resumindo, as operações são efetuadas nessa ordem: 1. O que está dentro de `( )` 2. Multiplicação `*` e divisão `/` 3. Adição `+` e subtração `-` #### Exemplo 2 - dinheiro emprestado Peguei R$ 240,00 emprestado de Mariana. Ela me cobra juros de 2% ao mês. De quanto será minha dívida mês que vem? ***Resposta:*** A dívida no primeiro mês corresponde ao valor inicial mais uma fração de juros: ```python >>> 240*(1 + 2/100) 244.8 ``` Mês que vem, minha dívida será de R$ 244,80. #### Exemplo 3 - aumentando a horta Everton tem uma horta de 3,20 m de altura por 5,40 m de comprimento. Depois de aumentar o comprimento em 75 cm, qual será a área total de sua horta? ***Resposta:*** ```python >>> 3.2*(5.4+0.75) 19.680000000000003 ``` A área da horta de Everton será 19,68 m². *Mas porque a resposta do Python tá estranha?* No computador, o Python guarda os números na memória com até 18 dígitos. Note que dificilmente encontraremos em nosso dia-a-dia números que precisem ser escritos com tantos dígitos. Portanto, esses números possuem uma precisão enorme! Mesmo assim é uma precisão limitada. Esse limite pode resultar em operações matemáticas imperfeitas, com pequenos errinhos que costumam aparecer na última casa decimal (o dígito 3 no exemplo). Nesta série de tutoriais, os errinhos podem ser desprezados. ### Potências A exponenciação é essencial para facilitar as contas matemáticas. No Python, funciona com o operador asterisco-asterisco: `base**potência`. *É importante você lembrar que a exponenciação é calculada antes das outras operações*, exceto pela prioridade do ( ). #### Exemplo 4 - elevando números Encontre 2 elevado a 2, 3 e 4. ```python >>> 2**2 4 >>> 2**3 8 >>> 2**4 16 ``` #### Exemplo 5 - volume de um balão Um balão possui 5 metros de diâmetro. Quantos litros de ar cabem nesse balão? ***Resposta:*** Considerando que um balão é quase uma esfera, podemos aproximar seu volume por $V = 4 \pi R^3 / 3$. Sabendo que o raio é metade do diâmetro e considerando $\pi \simeq 3,14$, podemos escrever: ```python >>> 4 * 3.14 * (5/2)**2 / 3 65.41666666666667 ``` *Repare na ordem das operações (precedência):* 1. 5/2 é calculado primeiro por causa dos parênteses 2. O número é elevado ao quadrado (exponenciação tem precedência) 3. Depois vem as multiplicações e divisões são feitas (da esquerda para a direita) A resposta é 65,417 m³. Como 1 m³ = 1000 litros, então cabem 65,417×1000 = 65.417 litros, quase 66 mil litros de ar nesse balão! #### Exemplo 6 - área da pizza Seus amigos te convidaram pra comer uma "pizza maracanã" de 70 cm (diâmetro)! A pizza veio dividida em 12 partes. Qual é a área de cada pedaço? **Resposta:**
A área de uma circunferência é $\pi R^2 = \pi (d/2)^2 \simeq 3,14\, (d/2)^2$. ```python >>> 3.14 * (70/2)**2 / 12 320.5416666666667 ``` A área de cada pedaço é 320 cm². ### Raízes Também precisamos da operação inversa da potenciação. A inversa de elevar um número a $n$ é tirar sua $n$-ésima raiz: $$ y = x^n \quad\rightarrow\quad x = \sqrt[n]{y} = y^{1/n} $$ A notação de raiz só é usada de fato com as raízes quadrada $\sqrt{y} = y^{1/2}$ e cúbica $\sqrt[3]{y} = y^{1/3}$. É bom conhecer a outra notação porque podemos usá-la no Python com o operador de potenciação. #### Exemplo 7 - calculando raízes Quais são as raízes quadradas de 25, 36 e 49? E as raízes cúbicas de 512 e 27? ***Resposta:*** ```python >>> 25**0.5 5.0 >>> 36**0.5 6.0 >>> 49**0.5 7.0 >>> 64**(1/3) 3.9999999999999996 >>> 512**(1/3) 7.999999999999999 ``` Novamente, pela questão da precisão, o Python não devolve valores exatos para as raízes cúbicas, mas sim valores muito próximos (de 4 e 8, no caso). *Mas porque foi usado parênteses para 1/3?* Porque a exponenciação tem precedência, então ela será calculada primeiro e com os primeiros operandos que encontrar, no caso `64**1/3` os operandos serão `base=64` e `potência=1`, a próxima / já é outra operação. #### Exemplo 8 - água na caixa Uma caixa em forma de cubo foi preenchida até a borda com 125 litros de água. Em qual altura chegou a água? ***Resposta:***
Precisamos descobrir a medida das arestas da caixa. Para um cubo de aresta $a$, seu volume é $V = a^3$. Então $a = \sqrt[3]{V}$. Lembrando que litro é unidade de volume e que 1000 litros = 1 m³, podemos calcular que 125 litros = 125/1000 m³. Tirando a raiz cúbica do volume, encontramos: ```python >>> 0.125**(1/3) 0.5 ``` Então a reposta é 0,5 m ou 50 cm. #### Exemplo 9 - teorema de Pitágoras Rapunzel quer construir uma rampa pra descer a torre de skate. Do ponto de chegada até a base da torre tem 15 m e a altura até sua janela mais próxima é 8 m. Qual é o comprimento necessário da madeira para construir esta rampa? ***Resposta:***
Esse é um típico problema para usar o Teorema de Pitágoras, que relaciona o comprimento dos catetos com a hipotenusa, de acordo com a fórmula $$ h^2 = a^2 + b^2. $$
Neste caso, a=15 e b=8. ```python >>> (15**2 + 8**2)**0.5 17.0 ``` O comprimento necessário é 17 m. Claro que isso não inclui a estrutura para suportar a rampa! ### Quociente e resto Precisamos comentar ainda sobre duas operações que podem ser usadas para resolver vários problemas: o quociente e o resto da divisão. Veja o exemplo de divisão na figura, usando aquele método clássico:
Temos o **dividendo**, o **divisor**, o **quociente** e o **resto**. No ponto onde parou, só podemos continuar dividindo se adicionarmos frações do divisor, já que o resto é menor que o divisor. O resultado seria um número real igual a 6÷3=6,6666... A divisão com uma barra do python (/) funciona exatamente dessa forma. Mas às vezes ficamos satisfeitos em parar onde parou. No python, podemos obter o quociente e resto usando os operadores: 1. Divisão inteira `//`: `dividendo // divisor = quociente` 2. Resto da divisão `%`: `dividendo % divisor = resto` Repare uma coisa: o exemplo acima é uma forma de dizer que cabem, no máximo, 6 partes de 3 no número 20. Não cabem 7 pois 7×3 = 21 que é maior que 20. Também podemos dizer o contrário, cabem 3 partes de 6, mas não cabem 4, pois 4×6 = 24 > 20. Então o papel do divisor e quociente podem ser trocados! Outro detalhe importante: 20÷3 não é uma **divisão exata**, pois sobra 2. *A divisão será exata quando não sobra nada* (resto = 0). Quando a divisão é exata, o dividendo é **múltiplo** do divisor e quociente. Também podemos dizer que divisor e quociente **dividem** o dividendo. Veja por exemplo 20÷5=4. * 20 é múltiplo de 4 e 5; e podemos escrever 20=4×5 * 4 e 5 dividem 20, pois 20÷4=5 e 20÷5=4
Essa foi uma introdução bem grande, mas espero que os próximos exemplo deixem claro a utilidade destas operações. #### Exemplo 10 - divisão da barra de chocolate a) Ana Maria ganhou uma barra de chocolate para dividir entre ela e suas duas irmãs. Ela viu que a barra tem 20 quadradinhos. Quantos quadradinhos cada uma ganha? Quantos sobram? b) No momento em que ia abrir a barra, apareceram dois primos, e Ana Maria resolve dividir a barra entre todos. Quantos quadradinhos cada um ganha? Quantos sobram? ***Resposta:*** ```python >>> 20//3 6 >>> 20%3 2 >>> 20//5 4 >>> 20%5 0 ``` a) Cada uma ganha 8 quadradinhos e ainda sobram 2. b) Cada um ganha 4 quadradinhos e não sobra nenhum (divisão exata). #### Exemplo 11 - dinheiro e troco A mãe de Joãozinho dá 10 reais a ele para comprar bonbons. Mas exige que ele traga o troco certo, caso contrário levará umas boas chineladas! Sabendo que a unidade do bombom custa R$ 1,50, quantos bombons ele consegue comprar e qual será o troco? ***Resposta:*** ```python >>> 10//1.5 6.0 >>> 10%1.5 1.0 ``` Joãozinho consegue comprar 6 bombons e recebe R$ 1,00 de troco. #### Exemplo 12 - conversão de horas, minutos e segundos (a) Quantos minutos tem em 225 segundos? (b) Quantas horas tem em 25800 segundos? ***Resposta:*** **(a)** Sabemos que 1 minuto vale 60 segundos. Podemos reformular a pergunta: quantos minutos (60 seg) cabem em 225 segundos? Podemos descobrir com o operador de divisão inteira: ```python >>> 225//60 3 >>> 225%60 45 ``` Então 225 segundos contém 3 minutos, mas ainda sobram 45 segundos. Podemos dizer que 225 seg = 3 min e 54 seg. Note que a divisão normal resulta em 3,45 min, que é o número inteiro 3 mais uma parte fracionaria. **(b)** Uma hora tem 60 minutos ou 60×60 = 3600 segundos. Então quantas horas (3600 seg) cabem em 25945 segundos? ```python >>> 25945//3600 7 >>> 25945%3600 745 ``` Dividimos por 3600 e vimos que cabem 7 horas, mas sobraram 745 seg. Podemos repetir os passos do item (a) para obter o equivalente em min + seg: ```python >>> 745//60 12 >>> 745%60 25 ``` Agora o resultado ficará mais bonito se usarmos a notação HH:MM:SS, onde * HH = horas * MM = minutos * SS = segundos Podemos escrever 25945 seg = 07:12:45. ### Atualizando a precedência Com estes novos operadores, precisamos de uma nova tabela de precedência: 1. O que está dentro de `( )` 2. Potenciação `**` 3. Multiplicação `*`, divisão real `/`, divisão inteira `//` e resto da divisão `%` (da esquerda para a direita) 4. Adição `+` e subtração `-` (da esquerda para a direita) ## Até a próxima! Neste tutorial, usamos o Python basicamente como uma calculadora. Mas ele é muito mais do que isso é preciso um pouco de paciência para poder apreciar toda a sua força. Hoje vimos: * Instalação do Python * Precedência de operadores * Precisão limitada dos números Na próxima aula você aprenderá sobre o uso de variáveis. Deixo aqui alguns exercícios para praticar. ## Exercícios #### 1. Obtenha o resultado correto em python para as seguintes contas: $$\text{a)}\quad (4 - 7)^2 $$ $$\text{b)}\quad 1024^{1/5} \times \frac{3,75}{2,5} $$ $$\text{c)}\quad \frac{3,542 + 4,374/3}{\sqrt{25}} $$ $$\text{d)}\quad \sqrt[3]{\frac{189}{7}} $$ #### 2. Uma pizzaria está fazendo duas promoções: 1. Uma pizza maracanã (70 cm) por R$ 120 2. Duas pizzas família (35 cm) por R$ 80 e afirma no panfleto da promoção que duas de 35 cm = uma 70 cm. Qual promoção é mais vantajosa? #### 3. Peguei R$ 240,00 emprestado de Mariana e não consegui pagá-la no primeiro mês! Ela disse que não tinha problema mas os juros são compostos, de modo que o valor do segundo mês é calculado sobre o primeiro. Se a taxa de juros continua 2% e eu conseguir pagar no segundo mês, quais serão o valor total e o juros? #### 4. Laranjinha, Acerola e Limonada (é o apelido dos garotos) querem fazer carrinhos de rolimã. Eles ficaram animados e querem construir um pra cada. Cada carrinho precisa 5 tábuas, 20 pregos e 4 rodas. Foram procurar material, e Laranjinha encontrou 17 tábuas, Acerola encontrou 100 pregos, e Limonada encontrou 9 rodas. Eles possuem material para quantos carrinhos? Quanto material sobra? ### Respostas #### 1. a) `(4-7)**2` b) `1024**(1/5) * 3.75/2.5` c) `(3.542+4.374/3) / 25**0.5` d) `(189/7)**(1/3)` #### 2. Apesar de ser verdade o que a pizzaria afirma sobre o diâmetro das pizzas (2 × 35 cm = 70 cm), o que se come são pedaços. Ou seja, o que conta é a área. Portanto, para saber qual promoção é mais vantajosa, precisamos calcular a área de pizza por real pago em cada promoção. Lembrando que área de uma circunferência é aproximadamente $3,14\, (d/2)^2$: ```python >>> 3.14*(70/2)**2 / 120 32.05416666666667 >>> 2 * 3.14*(35/2)**2 / 80 24.040625 ``` Veja que a promoção N°1 é melhor! Apesar de ser 50% mais cara, você paga 1 real para comer 32 cm² da pizza maracanã enquanto paga 1 para comer 24 cm² das duas pizzas família. #### 3. A dívida no segundo mês será calculada sobre o valor do primeiro mês, que é `240*(1+2/100)`. Portanto: ``` python >>> 240*(1+2/100)*(1+2/100) 249.69600000000003 >>> 249.696-240 9.695999999999998 ``` No segundo mês, devo R$ 249,70 a Mariana e estarei pagando RS 9,70 de juros. *Observe que os fatores se repetem*, então podemos calcular com potências: ``` python >>> 240*(1+2/100)**2 249.696 ``` De fato, a fórmula geral para juros compostos é $$ M = C (1+j)^n $$ onde * *M* é o valor final (montante) * *C* é o valor inicial (capital) * *j* é a taxa de juros * *n* é o número de meses #### 4. Esse é um dos problemas de *quantos cabem?* Mas no caso, são 3 categorias distintas: tábuas, pregos e rodas. Uma unidade de carrinho leva 5 tábuas, 20 pregos e 4 rodas. Então, a conta a ser feita é de quantas unidades de carrinho por tipo de material. ``` python >>> 17//5 3 >>> 100//20 5 >>> 9//4 2 ``` Tem tábuas para 3 carrinhos, tem pregos para 5 e rodas para 2. Portanto, os meninos só têm material para construir 2 carrinhos! Agora vamos descontar o material usado em 2 carrinhos, para ver quanto sobrou: ```python >>> 17-2*5 7 >>> 100-2*20 60 >>> 9-2*4 1 ``` A resposta é 7 tábuas, 60 pregos e uma roda.

Comentários

Postagens mais visitadas deste blog

Coding Challenge - Rubik's Cube

Eu gosto muito dos desafios de programação do Daniel Shiffman, do canal The Coding Train, porque me obriga a desenvolver algoritmos para resolver certos problemas. Mas às vezes é roubada! Porque ele deixa o programa todo basicão e eu quero chegar num produto mais finalizado. O desafio que estou falando é o #142 - programar um Cubo de Rubik . Eu achei interessante porque um dos meus objetivos de vida é resolver esse cubo, sem olhar tutorias na internet! Eu sempre tive cubos chineses que travavam na hora de girar e as peças acabavam pulando. Mas, imaginem, o Daniel precisou postar 3 vídeos apenas pra chegar num cubo que faz um certo número de movimentos e depois desfaz! Mas eu queria que o jogo tivesse: Diferentes tamanhos (de 2 a 7); Um sistema para selecionar o cubinho com o mouse; Um sistema para movimentar com as teclas WASD; Um menu para embaralhar e reiniciar. Ou seja, levei o quádruplo do tempo. Como diria Pedro, é cilada Bino! Meu jogo ...

FVM Árvore de Natal com Arduino!

  Chegou a hora de fazer algo além de um simples LED piscando com Arduino! Uma árvore de Natal que toca músicas de Natal! Ou seja, vários LEDs piscando com um buzzer! Infelizmente andei ocupado e não consegui postar esse tutorial mais cedo. Então, se você começar agora pode acabar terminando a árvore depois do Natal, pois a montagem é um pouco trabalhosa. Materiais Segue a lista de materiais. Componentes eletrônicos queimam fácil. Então, se possível, compre tudo em dobro! É importante que o buzzer seja passivo (não ativo) para que possa tocar notas musicais diferentes. Materiais 8 LEDs fosco 5 mm azul 8 LEDs fosco 5 mm verde 8 LEDs fosco 5 mm vermelho 5 LEDs fosco 5 mm branco 21 resistores 470 Ω 8 resistores 330 Ω 1 resistor de 1 kΩ 1 botão táctil 1 buzzer passivo 5 V Fio de solda Fita adesiva Caixa de papelão Tinta PVA ou guache Arduino Uno ou compatível Cabos de internet velhos (uns 5 m) Fio de cobre rígido (10 cm) Equipamento Cabinhos jumper Dupont Cab...