Python – Aula 2

Primeiros Passos no IPython Notebook

Disciplina “Computação no Ensino de Física” (CEF) da UFES/Alegre

Curso de Licenciatura em Física – Turma 2013/2

 Autoria : Prof. Ramón Giostri Campos – 2014/1.

 

Veremos abaixo como usar o IPython notebook como calculadora inteligente, como manipular strings, como criar estruturas (testes, loop, funçoes e et cetera), vamos tentar fazer alguns gráficos mais simples.

Depois veremos como misturar essas coisas;

Carregar o IPyhon notebook:

Digite $ipython notebook –pylab inline

A primeira parte “ipython notebook” é comum. A segunda parte ” –pylab inline” é opcional, porém ela é muito interessante pois permite que incluir os gráficos do matplotlib feitos aqui diretamente no corpo deste documento; Inclusive isso carrega automaticamente o PyLab (numpy e matplotlib);

Exercício 1

Pesquise outra forma de carregar o Pylab, para o caso de não usarmos o comando “–pylab inline” (isso as vezes é conveniente);

Usando como uma calculadora:

Note que apertar “enter”, apenas pula de linha (isso será útil mais tarde) e para executar a linha damos “shift+enter”

In [1]:
1+1
Out[1]:
2

In [2]:

(50-5*6)/4
Out[2]:
5
In [3]:
5/2
Out[3]:
2

Opa!!! Tem algo estranho aqui … sabemos que 5/2 = 2,5 . Mas o Python, assim como Fortran, C, Pascal, divisão de INTEIROS é truncada e com resultado INTEIRO;

Resolvemos o impasse simplismente enfiando um número REAL (tipo float) na conta;

In [4]:
5/float(2)
Out[4]:
2.5

Ou de forma mais simples, coloque um ponto em algum dos números!

In [5]:
5/2.
Out[5]:
2.5
In [6]:
5./2
Out[6]:
2.5

Note que claramente 2 não é igual a 2. (pelo menos no contexto de programação), por outro lado em termos de quantidade eles representam a mesma coisa.

In [7]:
2 is 2.

Out[7]:

False
In [8]:
2==2.
Out[8]:
True

Falaremos mais sobre testes em outro momento. Agora vamos continuar com a calculadora.

In [9]:
sqrt(2)
Out[9]:
1.4142135623730951
In [10]:
exp(1)
Out[10]:
2.7182818284590451
In [11]:
log(1.1)
Out[11]:
0.095310179804324935
In [12]:
pi
Out[12]:
3.141592653589793

In [13]:

sin(pi/4)
Out[13]:
0.70710678118654746
In [14]:
tan(pi/2)
Out[14]:
16331239353195370.0

Note que por ser tratar de um cálculo numérico, a tangente de pi/2 é calculada (só que dá um número muito grante). Sabemos que isso não é verdade.

Vamos definir algumas variáveis agora,

In [15]:
comprimento =10
largura = 20
area = comprimento * largura
area
Out[15]:
200
In [16]:
altura = 5
volume = area * altura
volume
Out[16]:
1000

Apesar do PyLab carregar muitas funções matemáticas, algumas ainda estão de fora, uma delas é o fatorial.

n! = n (n-1)(n-2)(n-3)…432*1

Corrigimos isso importando a seguinte função do pacote matemático MATH;

In [17]:
from math import factorial
In [18]:
factorial(12)
Out[18]:
479001600

Agora vamos manipular algumas STRINGS

In [19]:
'Assim pintamos strings'
Out[19]:
'Assim pintamos strings'
In [20]:
saldacao = ' Como vai?'
In [21]:
complemento = ' E ai Fulano!'
In [22]:
complemento + saldacao
Out[22]:
' E ai Fulano! Como vai?'
In [23]:
"Funciona com duas aspas"
Out[23]:
'Funciona com duas aspas'
In [24]:
"Mas os acentos não funcionam"
Out[24]:
'Mas os acentos n\xc3\xa3o funcionam'

Para esses casos use o PRINT

In [25]:
print complemento + saldacao, " não está bem!"
 E ai Fulano! Como vai?  não está bem!

Listas

Isso é natural no Python

In [26]:
dias_da_semana = ["domingo","segunda","terça","quarta", "quinta", "sexta", "sábado"]
In [27]:
dias_da_semana[2]
Out[27]:
'ter\xc3\xa7a'
In [28]:
print dias_da_semana[-1]
sábado
In [29]:
len(dias_da_semana)

Out[29]:

7

Exercício 2

Pesquise como descobrir mais informações sobre esse comando “len”?

Listas numéricas agora.

Usamos o RANGE (significa série ou variação em inglês)

In [157]:
?range
In [32]:
range(10)
Out[32]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [33]:
range(5,10)
Out[33]:
[5, 6, 7, 8, 9]
In [34]:
range(1,10,2)
Out[34]:
[1, 3, 5, 7, 9]
In [35]:
range(1,10,0.2)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-35-cab7b13a5a94> in <module>()
----> 1 range(1,10,0.2)

TypeError: range() integer step argument expected, got float.

Usamos para isso o arange, que é uma rotina do NumPy

In [36]:
lista_float=arange(1,10,0.2)
print lista_float
type(lista_float)
[ 1.   1.2  1.4  1.6  1.8  2.   2.2  2.4  2.6  2.8  3.   3.2  3.4  3.6  3.8
  4.   4.2  4.4  4.6  4.8  5.   5.2  5.4  5.6  5.8  6.   6.2  6.4  6.6  6.8
  7.   7.2  7.4  7.6  7.8  8.   8.2  8.4  8.6  8.8  9.   9.2  9.4  9.6  9.8]
Out[36]:
numpy.ndarray
In [37]:
lista_float
Out[37]:
array([ 1. ,  1.2,  1.4,  1.6,  1.8,  2. ,  2.2,  2.4,  2.6,  2.8,  3. ,
        3.2,  3.4,  3.6,  3.8,  4. ,  4.2,  4.4,  4.6,  4.8,  5. ,  5.2,
        5.4,  5.6,  5.8,  6. ,  6.2,  6.4,  6.6,  6.8,  7. ,  7.2,  7.4,
        7.6,  7.8,  8. ,  8.2,  8.4,  8.6,  8.8,  9. ,  9.2,  9.4,  9.6,
        9.8])

Listas MISTAS

In [38]:
mista = [1, "lista", "estranha", 100.]
mista
Out[38]:
[1, 'lista', 'estranha', 100.0]
In [39]:
type(mista)
Out[39]:
list
In [40]:
?list

Cuidado, pois dependendo de como você gera uma “lista”, ela pode não ser defato uma lista (seja ela mista ou não).

In [41]:
tupla_mista = (1, "lista", "estranha", 100.)
In [42]:
type(tupla_mista)
Out[42]:
tuple
In [43]:
?tuple
In [44]:
set_mista = {1, "lista", "estranha", 100.}
In [45]:
type(set_mista)
Out[45]:
set
In [46]:
?set

Vamos as estruturas:

Loop

Exercício 3 – Tente ler o comando abaixo:

In [47]:
for i in range(len(mista)):
    tipo = type(mista[i])
    print tipo
<type 'int'>
<type 'str'>
<type 'str'>
<type 'float'>

Teste verdadeiro ou falso:

Teste de Igual

In [49]:
2==2.
Out[49]:
True

O duplo igual (==) é usado para o teste, pois tradicionalmente o igual simples (=) é usado para atribuição de valor;

In [16]:
v=2
In [50]:
v==float(2)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-50-1fafca712b6d> in <module>()
----> 1 v==float(2)

NameError: name 'v' is not defined

Outros testes:

In [19]:
2!=2.0
Out[19]:
False
In [51]:
2<1.01
Out[51]:
False
In [52]:
2<=1.01
Out[52]:
False
In [53]:
2>1.01
Out[53]:
True
In [54]:
2>=1.01
Out[54]:
True
In [55]:
for dia in dias_da_semana:
    qual_dia = "Hoje é " + dia
    print qual_dia
    if dia == "domingo":
        print "   Durmi até tarde"
    elif dia == "sábado":
        print "   Dia de tormir tarde..."
    else:
        print "   Vou ao trabalho"
Hoje é domingo
   Durmi até tarde
Hoje é segunda
   Vou ao trabalho
Hoje é terça
   Vou ao trabalho
Hoje é quarta
   Vou ao trabalho
Hoje é quinta
   Vou ao trabalho
Hoje é sexta
   Vou ao trabalho
Hoje é sábado
   Dia de tormir tarde...

Definindo funções

Vamos voltar ao tal do fatorial(n!), poderíamos fazer um no lugar de pegar um pronto.

Construindo a função Fatorial (Exercício 4 -> pesquisar outra forma de fazer o fatorial)

In [56]:
def fatorial(m):   # aqui dizemos quem é a função
    j = 1       # 
    n = m 
    if n > 1:  # Faz o teste se o número é maior que um;
        for i in range(1, n + 1): # Loop para fazer as multiplicações
             j = j * i # Interação
        return j      # Retorno o resultado
    else:
        return 1
#Cuidado com a identação ela pode gerar erros!
In [57]:
fatorial(12)
Out[57]:
479001600
In [58]:
fatorial(12.11)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-58-408a4ad43407> in <module>()
----> 1 fatorial(12.11)

<ipython-input-56-477990fc6bce> in fatorial(m)
      3     n = m
      4     if n > 1:  # Faz o teste se o número é maior que um;
----> 5         for i in range(1, n + 1): # Loop para fazer as multiplicações
      6              j = j * i # Interação
      7         return j      # Retorno o resultado

TypeError: range() integer end argument expected, got float.
In [59]:
factorial(12.1)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-59-c8a524155186> in <module>()
----> 1 factorial(12.1)

ValueError: factorial() only accepts integral values

Exercício 5 – Tente bolar um filtro para números interios no nosso fatorial construído;

Soma da PA (Progressão Aritmética)

In [60]:
def somapa(a1,n,r):
    an = a1 + (n-1)*r #n-ésimo termo;
    sn = n*(a1+an)/2 #soma dos n primeiros termos
    return sn
In [75]:
somapa(1,10,2)
Out[75]:
100

Soma da PG (Progressão Geométrica)

In [62]:
def somapg(a1,n,q):
    sn = a1*(1-q**n)/(1-q) #soma dos n primeiros termos
    return sn
In [63]:
somapg(1,10,2)
Out[63]:
1023

Um pouco de gráficos (só para sentir o gostinho)

Primeiro vamos carregar o módulo gráfico

In [64]:
import matplotlib.pyplot as plt

Essa forma de carregar acrescente o prefixo plt nas funções carregadas pelo módulo. Funções com essa característica estão num CONTEXTO específico (nesse caso plt);

Digite os comandos help(plt) e dir(plt), para ver respectivamente o HELP do pacote e a LISTA de funções carregadas

In [122]:
x=arange(2,10,0.1)
print x
[ 2.   2.1  2.2  2.3  2.4  2.5  2.6  2.7  2.8  2.9  3.   3.1  3.2  3.3  3.4
  3.5  3.6  3.7  3.8  3.9  4.   4.1  4.2  4.3  4.4  4.5  4.6  4.7  4.8  4.9
  5.   5.1  5.2  5.3  5.4  5.5  5.6  5.7  5.8  5.9  6.   6.1  6.2  6.3  6.4
  6.5  6.6  6.7  6.8  6.9  7.   7.1  7.2  7.3  7.4  7.5  7.6  7.7  7.8  7.9
  8.   8.1  8.2  8.3  8.4  8.5  8.6  8.7  8.8  8.9  9.   9.1  9.2  9.3  9.4
  9.5  9.6  9.7  9.8  9.9]

É importante usar o ARANGE, no lugar do RANGE, para gerar uma lista passivel de ser usada pela função;

In [123]:
ypa=somapa(1,x,2)
print ypa
[  4.     4.41   4.84   5.29   5.76   6.25   6.76   7.29   7.84   8.41   9.
   9.61  10.24  10.89  11.56  12.25  12.96  13.69  14.44  15.21  16.    16.81
  17.64  18.49  19.36  20.25  21.16  22.09  23.04  24.01  25.    26.01
  27.04  28.09  29.16  30.25  31.36  32.49  33.64  34.81  36.    37.21
  38.44  39.69  40.96  42.25  43.56  44.89  46.24  47.61  49.    50.41
  51.84  53.29  54.76  56.25  57.76  59.29  60.84  62.41  64.    65.61
  67.24  68.89  70.56  72.25  73.96  75.69  77.44  79.21  81.    82.81
  84.64  86.49  88.36  90.25  92.16  94.09  96.04  98.01]
In [124]:
ypg=somapg(1,x,2)
print ypg
[   3.            3.28709385    3.59479342    3.92457765    4.27803164
    4.65685425    5.06286627    5.49801917    5.96440451    6.46426393
    7.            7.5741877     8.18958684    8.84915531    9.55606329
   10.3137085    11.12573253   11.99603834   12.92880901   13.92852786
   15.           16.1483754    17.37917368   18.69831061   20.11212657
   21.627417     23.25146506   24.99207668   26.85761803   28.85705573
   31.           33.2967508    35.75834736   38.39662123   41.22425314
   44.254834     47.50293013   50.98415337   54.71523605   58.71411146
   63.           67.5935016    72.51669472   77.79324245   83.44850629
   89.50966799   96.00586026  102.96830673  110.4304721   118.42822292
  127.          136.1870032   146.03338944  156.58648491  167.89701258
  180.01933598  193.01172051  206.93661347  221.8609442   237.85644583
  255.          273.37400641  293.06677888  314.17296982  336.79402516
  361.03867197  387.02344103  414.87322693  444.72188841  476.71289167
  511.          547.74801282  587.13355776  629.34593963  674.58805032
  723.07734394  775.04688205  830.74645387  890.44377682  954.42578333]
In [125]:
plt.plot(x,ypa,x,ypg)
Out[125]:
[<matplotlib.lines.Line2D at 0x44ba790>,
 <matplotlib.lines.Line2D at 0x44ba610>]

Primeiros Passos no IPython Notebook

Disciplina “Computação no Ensino de Física” (CEF) da UFES/Alegre

Curso de Licenciatura em Física – Turma 2013/2

 Autoria : Prof. Ramón Giostri Campos – 2014/1.

 

Veremos abaixo como usar o IPython notebook como calculadora inteligente, como manipular strings, como criar estruturas (testes, loop, funçoes e et cetera), vamos tentar fazer alguns gráficos mais simples.

Depois veremos como misturar essas coisas;

Carregar o IPyhon notebook:

Digite $ipython notebook –pylab inline

A primeira parte “ipython notebook” é comum. A segunda parte “–pylab inline” é opcional, porém ela é muito interessante pois permite que incluir os gráficos do matplotlib feitos aqui diretamente no corpo deste documento; Inclusive isso carrega automaticamente o PyLab (numpy e matplotlib);

Exercício 1

Pesquise outra forma de carregar o Pylab, para o caso de não usarmos o comando “–pylab inline” (isso as vezes é conveniente);

Usando como uma calculadora:

Note que apertar “enter”, apenas pula de linha (isso será útil mais tarde) e para executar a linha damos “shift+enter”

In [1]:
1+1
Out[1]:
2

In [2]:

(50-5*6)/4
Out[2]:
5
In [3]:
5/2
Out[3]:
2

Opa!!! Tem algo estranho aqui … sabemos que 5/2 = 2,5 . Mas o Python, assim como Fortran, C, Pascal, divisão de INTEIROS é truncada e com resultado INTEIRO;

Resolvemos o impasse simplismente enfiando um número REAL (tipo float) na conta;

In [4]:
5/float(2)
Out[4]:
2.5

Ou de forma mais simples, coloque um ponto em algum dos números!

In [5]:
5/2.
Out[5]:
2.5
In [6]:
5./2
Out[6]:
2.5

Note que claramente 2 não é igual a 2. (pelo menos no contexto de programação), por outro lado em termos de quantidade eles representam a mesma coisa.

In [7]:
2 is 2.

Out[7]:

False
In [8]:
2==2.
Out[8]:
True

Falaremos mais sobre testes em outro momento. Agora vamos continuar com a calculadora.

In [9]:
sqrt(2)
Out[9]:
1.4142135623730951
In [10]:
exp(1)
Out[10]:
2.7182818284590451
In [11]:
log(1.1)
Out[11]:
0.095310179804324935
In [12]:
pi
Out[12]:
3.141592653589793

In [13]:

sin(pi/4)
Out[13]:
0.70710678118654746
In [14]:
tan(pi/2)
Out[14]:
16331239353195370.0

Note que por ser tratar de um cálculo numérico, a tangente de pi/2 é calculada (só que dá um número muito grante). Sabemos que isso não é verdade.

Vamos definir algumas variáveis agora,

In [15]:
comprimento =10
largura = 20
area = comprimento * largura
area
Out[15]:
200
In [16]:
altura = 5
volume = area * altura
volume
Out[16]:
1000

Apesar do PyLab carregar muitas funções matemáticas, algumas ainda estão de fora, uma delas é o fatorial.

n! = n (n-1)(n-2)(n-3)…432*1

Corrigimos isso importando a seguinte função do pacote matemático MATH;

In [17]:
from math import factorial
In [18]:
factorial(12)
Out[18]:
479001600

Agora vamos manipular algumas STRINGS

In [19]:
'Assim pintamos strings'
Out[19]:
'Assim pintamos strings'
In [20]:
saldacao = ' Como vai?'
In [21]:
complemento = ' E ai Fulano!'
In [22]:
complemento + saldacao
Out[22]:
' E ai Fulano! Como vai?'
In [23]:
"Funciona com duas aspas"
Out[23]:
'Funciona com duas aspas'
In [24]:
"Mas os acentos não funcionam"
Out[24]:
'Mas os acentos n\xc3\xa3o funcionam'

Para esses casos use o PRINT

In [25]:
print complemento + saldacao, " não está bem!"
 E ai Fulano! Como vai?  não está bem!

Listas

Isso é natural no Python

In [26]:
dias_da_semana = ["domingo","segunda","terça","quarta", "quinta", "sexta", "sábado"]
In [27]:
dias_da_semana[2]
Out[27]:
'ter\xc3\xa7a'
In [28]:
print dias_da_semana[-1]
sábado
In [29]:
len(dias_da_semana)

Out[29]:

7

Exercício 2

Pesquise como descobrir mais informações sobre esse comando “len”?

Listas numéricas agora.

Usamos o RANGE (significa série ou variação em inglês)

In [157]:
?range
In [32]:
range(10)
Out[32]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [33]:
range(5,10)
Out[33]:
[5, 6, 7, 8, 9]
In [34]:
range(1,10,2)
Out[34]:
[1, 3, 5, 7, 9]
In [35]:
range(1,10,0.2)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-35-cab7b13a5a94> in <module>()
----> 1 range(1,10,0.2)

TypeError: range() integer step argument expected, got float.

Usamos para isso o arange, que é uma rotina do NumPy

In [36]:
lista_float=arange(1,10,0.2)
print lista_float
type(lista_float)
[ 1.   1.2  1.4  1.6  1.8  2.   2.2  2.4  2.6  2.8  3.   3.2  3.4  3.6  3.8
  4.   4.2  4.4  4.6  4.8  5.   5.2  5.4  5.6  5.8  6.   6.2  6.4  6.6  6.8
  7.   7.2  7.4  7.6  7.8  8.   8.2  8.4  8.6  8.8  9.   9.2  9.4  9.6  9.8]
Out[36]:
numpy.ndarray
In [37]:
lista_float
Out[37]:
array([ 1. ,  1.2,  1.4,  1.6,  1.8,  2. ,  2.2,  2.4,  2.6,  2.8,  3. ,
        3.2,  3.4,  3.6,  3.8,  4. ,  4.2,  4.4,  4.6,  4.8,  5. ,  5.2,
        5.4,  5.6,  5.8,  6. ,  6.2,  6.4,  6.6,  6.8,  7. ,  7.2,  7.4,
        7.6,  7.8,  8. ,  8.2,  8.4,  8.6,  8.8,  9. ,  9.2,  9.4,  9.6,
        9.8])

Listas MISTAS

In [38]:
mista = [1, "lista", "estranha", 100.]
mista
Out[38]:
[1, 'lista', 'estranha', 100.0]
In [39]:
type(mista)
Out[39]:
list
In [40]:
?list

Cuidado, pois dependendo de como você gera uma “lista”, ela pode não ser defato uma lista (seja ela mista ou não).

In [41]:
tupla_mista = (1, "lista", "estranha", 100.)
In [42]:
type(tupla_mista)
Out[42]:
tuple
In [43]:
?tuple
In [44]:
set_mista = {1, "lista", "estranha", 100.}
In [45]:
type(set_mista)
Out[45]:
set
In [46]:
?set

Vamos as estruturas:

Loop

Exercício 3 – Tente ler o comando abaixo:

In [47]:
for i in range(len(mista)):
    tipo = type(mista[i])
    print tipo
<type 'int'>
<type 'str'>
<type 'str'>
<type 'float'>

Teste verdadeiro ou falso:

Teste de Igual

In [49]:
2==2.
Out[49]:
True

O duplo igual (==) é usado para o teste, pois tradicionalmente o igual simples (=) é usado para atribuição de valor;

In [16]:
v=2
In [50]:
v==float(2)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-50-1fafca712b6d> in <module>()
----> 1 v==float(2)

NameError: name 'v' is not defined

Outros testes:

In [19]:
2!=2.0
Out[19]:
False
In [51]:
2<1.01
Out[51]:
False
In [52]:
2<=1.01
Out[52]:
False
In [53]:
2>1.01
Out[53]:
True
In [54]:
2>=1.01
Out[54]:
True
In [55]:
for dia in dias_da_semana:
    qual_dia = "Hoje é " + dia
    print qual_dia
    if dia == "domingo":
        print "   Durmi até tarde"
    elif dia == "sábado":
        print "   Dia de tormir tarde..."
    else:
        print "   Vou ao trabalho"
Hoje é domingo
   Durmi até tarde
Hoje é segunda
   Vou ao trabalho
Hoje é terça
   Vou ao trabalho
Hoje é quarta
   Vou ao trabalho
Hoje é quinta
   Vou ao trabalho
Hoje é sexta
   Vou ao trabalho
Hoje é sábado
   Dia de tormir tarde...

Definindo funções

Vamos voltar ao tal do fatorial(n!), poderíamos fazer um no lugar de pegar um pronto.

Construindo a função Fatorial (Exercício 4 -> pesquisar outra forma de fazer o fatorial)

In [56]:
def fatorial(m):   # aqui dizemos quem é a função
    j = 1       # 
    n = m 
    if n > 1:  # Faz o teste se o número é maior que um;
        for i in range(1, n + 1): # Loop para fazer as multiplicações
             j = j * i # Interação
        return j      # Retorno o resultado
    else:
        return 1
#Cuidado com a identação ela pode gerar erros!
In [57]:
fatorial(12)
Out[57]:
479001600
In [58]:
fatorial(12.11)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-58-408a4ad43407> in <module>()
----> 1 fatorial(12.11)

<ipython-input-56-477990fc6bce> in fatorial(m)
      3     n = m
      4     if n > 1:  # Faz o teste se o número é maior que um;
----> 5         for i in range(1, n + 1): # Loop para fazer as multiplicações
      6              j = j * i # Interação
      7         return j      # Retorno o resultado

TypeError: range() integer end argument expected, got float.
In [59]:
factorial(12.1)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-59-c8a524155186> in <module>()
----> 1 factorial(12.1)

ValueError: factorial() only accepts integral values

Exercício 5 – Tente bolar um filtro para números interios no nosso fatorial construído;

Soma da PA (Progressão Aritmética)

In [60]:
def somapa(a1,n,r):
    an = a1 + (n-1)*r #n-ésimo termo;
    sn = n*(a1+an)/2 #soma dos n primeiros termos
    return sn
In [75]:
somapa(1,10,2)
Out[75]:
100

Soma da PG (Progressão Geométrica)

In [62]:
def somapg(a1,n,q):
    sn = a1*(1-q**n)/(1-q) #soma dos n primeiros termos
    return sn
In [63]:
somapg(1,10,2)
Out[63]:
1023

Um pouco de gráficos (só para sentir o gostinho)

Primeiro vamos carregar o módulo gráfico

In [64]:
import matplotlib.pyplot as plt

Essa forma de carregar acrescente o prefixo plt nas funções carregadas pelo módulo. Funções com essa característica estão num CONTEXTO específico (nesse caso plt);

Digite os comandos help(plt) e dir(plt), para ver respectivamente o HELP do pacote e a LISTA de funções carregadas

In [122]:
x=arange(2,10,0.1)
print x
[ 2.   2.1  2.2  2.3  2.4  2.5  2.6  2.7  2.8  2.9  3.   3.1  3.2  3.3  3.4
  3.5  3.6  3.7  3.8  3.9  4.   4.1  4.2  4.3  4.4  4.5  4.6  4.7  4.8  4.9
  5.   5.1  5.2  5.3  5.4  5.5  5.6  5.7  5.8  5.9  6.   6.1  6.2  6.3  6.4
  6.5  6.6  6.7  6.8  6.9  7.   7.1  7.2  7.3  7.4  7.5  7.6  7.7  7.8  7.9
  8.   8.1  8.2  8.3  8.4  8.5  8.6  8.7  8.8  8.9  9.   9.1  9.2  9.3  9.4
  9.5  9.6  9.7  9.8  9.9]

É importante usar o ARANGE, no lugar do RANGE, para gerar uma lista passivel de ser usada pela função;

In [123]:
ypa=somapa(1,x,2)
print ypa
[  4.     4.41   4.84   5.29   5.76   6.25   6.76   7.29   7.84   8.41   9.
   9.61  10.24  10.89  11.56  12.25  12.96  13.69  14.44  15.21  16.    16.81
  17.64  18.49  19.36  20.25  21.16  22.09  23.04  24.01  25.    26.01
  27.04  28.09  29.16  30.25  31.36  32.49  33.64  34.81  36.    37.21
  38.44  39.69  40.96  42.25  43.56  44.89  46.24  47.61  49.    50.41
  51.84  53.29  54.76  56.25  57.76  59.29  60.84  62.41  64.    65.61
  67.24  68.89  70.56  72.25  73.96  75.69  77.44  79.21  81.    82.81
  84.64  86.49  88.36  90.25  92.16  94.09  96.04  98.01]
In [124]:
ypg=somapg(1,x,2)
print ypg
[   3.            3.28709385    3.59479342    3.92457765    4.27803164
    4.65685425    5.06286627    5.49801917    5.96440451    6.46426393
    7.            7.5741877     8.18958684    8.84915531    9.55606329
   10.3137085    11.12573253   11.99603834   12.92880901   13.92852786
   15.           16.1483754    17.37917368   18.69831061   20.11212657
   21.627417     23.25146506   24.99207668   26.85761803   28.85705573
   31.           33.2967508    35.75834736   38.39662123   41.22425314
   44.254834     47.50293013   50.98415337   54.71523605   58.71411146
   63.           67.5935016    72.51669472   77.79324245   83.44850629
   89.50966799   96.00586026  102.96830673  110.4304721   118.42822292
  127.          136.1870032   146.03338944  156.58648491  167.89701258
  180.01933598  193.01172051  206.93661347  221.8609442   237.85644583
  255.          273.37400641  293.06677888  314.17296982  336.79402516
  361.03867197  387.02344103  414.87322693  444.72188841  476.71289167
  511.          547.74801282  587.13355776  629.34593963  674.58805032
  723.07734394  775.04688205  830.74645387  890.44377682  954.42578333]
In [125]:
plt.plot(x,ypa,x,ypg)
Out[125]:
[<matplotlib.lines.Line2D at 0x44ba790>,
 <matplotlib.lines.Line2D at 0x44ba610>]
In [134]:
plt.plot(x,ypa,x,ypg)
plt.xlabel('Numero de Termos') # Abaixo inserimos os nomes dos eixos
plt.ylabel('Soma dos termos')
plt.title('Evolucao da soma da PA e PG') # Isso acrescenta o título (sem acentos por hora)!
plt.show() # Isso mostra
In [167]:
plt.plot(x,ypa,x,ypg)
plt.xlabel('Numero de Termos') # Abaixo inserimos os nomes dos eixos
plt.ylabel('Soma dos termos')
plt.title('Evolucao da soma da PA e PG') # Isso acrescenta o título (sem acentos por hora)!
plt.legend(["PA", "PG"],loc=2) # Essa linha coloca a Legenda;
plt.show() # Isso mostra

Exercício 6 – Colocar acentos nos gráficos do matplotlib