Ir para o conteúdo

Um programa consiste em declarações

a = 1      # 1a declaração (declaração de atribuição)
b = 2      # 2a declaração (declaração de atribuição)
c = a + b  # 3a declaração (declaração de atribuição)
print c    # 4a declaração (declaração de impressão)

Regra padrão:
uma declaração por linha, mas múltiplas declarações por linha são permitidas através do uso do ponto-vírgula entre as declarações:

a = 1;  b = 2;  c = a + b;  print c

Declarações de Atribuição

Declarações de atribuição avaliam o lado direito do símbolo de atribuição "=" e atribuem o resultado à variável do lado esquerdo:

mvar = 10
mvar = 3*mvar   # = 30    

Sintaxe do código

Programas devem conter uma sintaxe correta, isto é, um correto uso das regras "gramaticais" da linguagem de programação em uso, e sem erros de impressão!

Esse é um programa com dois erros de sintaxe:

mvar = 5.2
    print mvar
prinnt Mvar
   ^
SyntaxError: invalid syntax

Somente o primeiro erro encontrado é relatado e o programa para (corrija o erro e continue para o p?oximo...).

Programming demands significantly higher standard of accuracy. Things don't simply have to make sense to another human being, they must make sense to a computer. Donald Knuth, computer scientist, 1938-

A programação exige um nível de precisão significativamente maior. As coisas simplesmente não têm que fazer sentido para outro ser humano, elas devem fazer sentido para um computador. Donald Knuth, computer scientist, 1938

Espaços em branco

Espaços em branco (blank, whitespaces) podem ser utilizados para uma melhor formatação do texto do código.

Espaços em branco podem ou não ser importantes em programas Python.

Essas declarações são equivalentes (espaços em branco aqui não importam):

v0=3
v0  =  3
v0=   3
v0 = 3

Aqui os espaço em branco são importantes:

contador = 1
while contador <= 4:
    contador = contador + 1   # correto (4 espaços em branco no inicio ou um "tab", indentação)

while contador <= 4:
contador = contador + 1       # sintaxe inválida

Entrada e Saída

O programa recebe dados de entrada e calcula os dados de saída de acordo com o código escrito.

v0 = 3;  g = 9.81;  t = 0.6
posicao = v0*t - 0.5*g*t*t
velocidade = v0 - g*t
print 'posição:', posicao, 'velocidade:', velocidade
  • Entrada: v0, g, e t
  • Saída: posicao e velocidade

Sistema Operacional

Um sistema operacional (OS) é um conjunto de programas que gerenciam os recursos de hardware e software em um computador.

  • Linux, Unix (Ubuntu, RedHat, Suse, Solaris)
  • Windows (95, 98, NT, ME, 2000, XP, Vista, 7, 8)
  • Macintosh (old Mac OS, Mac OS X)
  • Mac OS X $ \approx $ Unix $ \approx $ Linux $ \neq $ Windows
  • Os comandos tipicos do OS são bem similares:
    • Linux/Unix: mkdir nome-da-pasta; cd nome-da-pasta; ls
    • Windows: mkdir nome-da-pasta; cd nome-da-pasta; dir
  • Python suporta programação cross-plataforma, ou seja, um programa é independente de qual OS utilizamos para programar ou rodar o programa.

Avaliando uma equação para conversão de temperatura

Dado $ C $ como uma temperatura em graus Celsius, calcule a temperatura correspondente em graus Fahrenheit $ F $:

Programa, em um editor de texto e salve como c2f.py:

C = 21
F = (9/5)*C + 32
print F

Execução e resultado:

Terminal> python c2f.py
53

Resposta certa

Sempre deve-se checar se um novo programa calculou a resposta certa.

Por exemplo, usando uma calculadora:

9/5 vezes 21 mais 32 é 69.8, e não 53!!

Erro na resposta

O erro na resposta foi causado (não intencionalmente) por divisão de inteiros.

  • 9/5 não é 1.8 mas 1 na maioria das linguagens de programação!
  • Se $ a $ e $ b $ são inteiros, $ a/b $ implica em uma divisão de inteiros: o maior inteiro $ c $ tal que $ cb\leq a $;
  • Exemplos: $ 1/5=0 $, $ 2/5=0 $, $ 7/5=1 $, $ 12/5=2 $;
  • Na matemática, 9/5 é um número real (1.8) - isso é chamado divisão de ponto flutuante em Python e é a divisão que queremos;
  • Um dos operandos ($ a $ ou $ b $) em $ a/b $ deve ser um número real (ponto flutuante ou "float") para resultar na divisão com ponto flutuante;
  • Um float em Python possui um ponto (ou decimais): 9.0 ou 9. é float;
  • Nenhum ponto implica em inteiro: 9 é um inteiro;
  • 9.0/5 resulta 1.8, 9/5. resulta 1.8, 9/5 resulta 1;

Corrija o programa de temperatura.

Tudo no Python é um objeto

Variáveis se referem à objetos:

a = 5       # a refere-se a um objeto inteiro (int)
b = 9       # b refere-se a um objeto inteiro (int)
c = 9.0     # c refere-se a um objeto número real (float)
d = b/a     # d refere-se a uma int/int => objeto int
e = c/a     # e refere-se a uma float/int => objeto float
s = 'b/a=%g' % (b/a)  # s é um objeto string/texto (str)

Podemos fazer conversões entre objetos:

a = 3  # a é int
b = float(a)       # b é float 3.0
c = 3.9# c é float
d = int(c)         # d é int 3
d = round(c)       # d é float 4.0
d = int(round(c))  # d é int 4
d = str(c)         # d é str '3.9'
e = '-4.2'         # e é str
f = float(e)       # f é float -4.2

Expressões Aritméticas

Expressões aritméticas são avaliadas como você aprendeu na matemática:

  • Exemplo: $ \dfrac{5}{9} + 2\dfrac{a^4}{2} $, no Python é escrita como 5/9 + 2*a**4/2
  • As mesmas regras da matemática: procedimento termo à termo* a partir da esquerda, no mesmo termo potências são calculadas primeiro, depois multiplicação e divisão, por fim adições/subtrações:
  • r1 = 5/9 (=0)
  • r2 = a**4
  • r3 = 2*r2
  • r4 = r3/2
  • r5 = r1 + r4
  • Use parenteses para sobrescrever essas regras padrões, ou use parenteses para explicitamente dizer como as regras funcionam:
    (5/9) + (2*(a**4))/2

* Um termo é definido ou separado por adição ou subtrações.

Funções Matemáticas Padrões

Algumas funções matemáticas podem ser encontradas no módulo math do python

  • E se precisarmos calcular $\sin x$, $\cos x$, $\ln x$, etc. em um programa?
  • Tais funções estão disponíveis no módulo math do python;
  • Um monte de funcionalidades úteis estão disponíveis em módulos do próprio Python e em módulos de terceiros;
  • Para funcionar, devemos importar esses módulos para nosso programa.
import math
r = math.sqrt(2)
# ou
from math import sqrt
r = sqrt(2)
# ou
from math import *   # import tudo de math
r = sqrt(2)

Mais um exemplo do uso de funções matemáticas com o math:

Calcule

para $x=1,2$

import math
x = 1.2
Q = math.sin(x)*math.cos(x) + 4*math.log(x)
print Q

Erros de arredondamento

Computadores possuem uma aritmética inexata por causa dos erros de arredondamento e ponto flutuante.

Vamos calcular $1/49 \times 49$ e $1/51 \times 51$:

v1 = 1/49.0*49
v2 = 1/51.0*51
print '%.16f %.16f' % (v1, v2)

A saída com os 16 decimais é retornada como:

0.9999999999999999 1.0000000000000000

  • A maioria dos números reais possui uma representação inexata em um computador (ex. 16 dígitos);
  • Nem 1/49 ou 1/51 está representado exatamente, sendo o erro normalmente na ordem de $ 10^{-16} $;
  • As vezes esses pequenos erros se propagam até a resposta final, as vezes não, e as vezes os pequenos erros são acumulados através de várias operações matemáticas;
  • Lição aprendida: Os números reais em computadores e os resultados da cálculos matemáticos são apenas aproximações!

Funções Matemáticas Padrões e possíveis erros

Mais um exemplo do uso de funções matemáticas com o math:

A função $\sinh x$ é definida como:

Podemos avaliar essa função de três formas:

  • math.sinh
  • combinação de duas math.exp
  • combinação de duas potências de math.e
from math import sinh, exp, e, pi
x = 2*pi
r1 = sinh(x)
r2 = 0.5*(exp(x) - exp(-x))
r3 = 0.5*(e**x - e**(-x))
print '%.16f %.16f %.16f' % (r1,r2,r3)

Saída: 267.7448940410164369 267.7448940410164369 267.7448940410163232??

Python interativo

Python pode ser utilizado interativamente como uma calculadora e para testar declarações.

  • Até agora nós executamos cálculos em programas Python;
  • Python também pode ser utilizado interativamente, utilizando o chamado shell;
  • Digite python, ou ipython, ou idle no terminal (CMD no windows);
  • Um shell Python é aberto onde você pode escrever declarações e realizar operações em Python.
Terminal> python
...
>>> C = 41
>>> F = (9.0/5)*C + 32
>>> F
105.8
>>> print F
105.8
>>> 

Comandos anteriores podem ser chamados novamente e editados com a seta para cima ou para baixo do teclado.

Números Complexos

Python possui suporte total para cálculos com números complexos.

$2 + 3i$ na matemática é escrito como 2 + 3j em Python.

>>> a = -2
>>> b = 0.5
>>> s = complex(a, b)  # monte um complexo das variáveis
>>> s
(-2+0.5j)
>>> s*w    # complexo*complexo
(-10.5-3.75j)
>>> s/w    # complexo/complexo
(-0.25641025641025639+0.28205128205128205j)
>>> s.real
-2.0
>>> s.imag
0.5

Cálculo algébrico

Python também pode realizar operações algébricas, através do módulo sympy.

  • Computação numérica: computação com números;
  • Computação simbólica: operações algébricas com variáveis.
>>> from sympy import *
>>> t, v0, g = symbols('t v0 g')
>>> y = v0*t - Rational(1,2)*g*t**2
>>> dydt = diff(y, t) # 1a derivada
>>> dydt
-g*t + v0
>>> print 'aceleração:', diff(y, t, t)  # 2a derivada
aceleração: -g
>>> y2 = integrate(dydt, t)
>>> y2
-g*t**2/2 + t*v0

Erro na importação

Foi gerado um erro de importação? Você não tem o módulo sympy instalado!

O SymPy pode realizar uma série de operações tradicionais da matemática.

>>> y = v0*t - Rational(1,2)*g*t**2
>>> roots = solve(y, t)    # resolve y=0 para t
>>> roots
[0, 2*v0/g]
>>> x, y = symbols('x y')
>>> f = -sin(x)*sin(y) + cos(x)*cos(y)
>>> simplify(f)
cos(x + y)
>>> expand(sin(x+y), trig=True)  # na forma trigonométrica
sin(x)*cos(y) + sin(y)*cos(x)

Sumário de Programando Equações

  • Programas deve ser precisos!
  • Variáveis são nomes de objetos;
  • Conhecemos diferentes tipos de objetos: int, float, str;
  • Escolha nomes de variáveis próximos aos símbolos matemáticos do problema sendo resolvido;
  • Operações aritméticas em Python: termo a termo (+/-) da esquerda para a direita, potências antes * e / - como na matemática! Use parênteses se ficar na dúvida;
  • Cuidado com divisões por inteiros!
  • Use o printf para controlar melhor as saídas;
  • Termos importantes: objeto, variáveis, algoritmos, declarações, atribuições, implementação, verificação, depuração.

Programar é desafiador!

Citação1

You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program Within a computer, natural language is unnatural To understand a program you must become both the machine and the program Alan Perlis, computer scientist, 1922-1990.

Tarefa

Jogamos uma bola com velocidade inicial $v_0$, com um ângulo $\theta$ com a horizontal, a partir do ponto $(x = 3, y = y_0)$.

A trajetória da bola é uma parábola (negligenciando a resistência do ar):

Tarefas para o programa:

  • inicie os dados de entrada ($ v_0 $, $ g $, $ \theta $, $ y_0 $)
  • importe o módulo math
  • calcule $ y $

Dados $ x $, $ y $ e $ y_0 $ em m, $ g = 9,81 \hbox {m/s}^2 $, $ v_0 $ em km/h e $ \theta $ em graus - o que requer a conversão de $ v_0 $ para m/s e $ \theta $ para radianos


  1. Você pensa que sabe quando você pode aprender, tem mais certeza quando pode escrever, mais ainda quando pode ensinar, mas seguro quando você pode programar! Alan Perlis, computer scientist, 1922-1990