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”
1+1
2
In [2]:
(50-5*6)/4
5
5/2
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;
5/float(2)
2.5
Ou de forma mais simples, coloque um ponto em algum dos números!
5/2.
2.5
5./2
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.
2 is 2.
Out[7]:
False
2==2.
True
Falaremos mais sobre testes em outro momento. Agora vamos continuar com a calculadora.
sqrt(2)
1.4142135623730951
exp(1)
2.7182818284590451
log(1.1)
0.095310179804324935
pi
3.141592653589793
In [13]:
sin(pi/4)
0.70710678118654746
tan(pi/2)
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,
comprimento =10
largura = 20
area = comprimento * largura
area
200
altura = 5
volume = area * altura
volume
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;
from math import factorial
factorial(12)
479001600
Agora vamos manipular algumas STRINGS
'Assim pintamos strings'
'Assim pintamos strings'
saldacao = ' Como vai?'
complemento = ' E ai Fulano!'
complemento + saldacao
' E ai Fulano! Como vai?'
"Funciona com duas aspas"
'Funciona com duas aspas'
"Mas os acentos não funcionam"
'Mas os acentos n\xc3\xa3o funcionam'
Para esses casos use o PRINT
print complemento + saldacao, " não está bem!"
E ai Fulano! Como vai? não está bem!
Listas
Isso é natural no Python
dias_da_semana = ["domingo","segunda","terça","quarta", "quinta", "sexta", "sábado"]
dias_da_semana[2]
'ter\xc3\xa7a'
print dias_da_semana[-1]
sábado
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)
?range
range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(5,10)
[5, 6, 7, 8, 9]
range(1,10,2)
[1, 3, 5, 7, 9]
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
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]
numpy.ndarray
lista_float
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
mista = [1, "lista", "estranha", 100.]
mista
[1, 'lista', 'estranha', 100.0]
type(mista)
list
?list
Cuidado, pois dependendo de como você gera uma “lista”, ela pode não ser defato uma lista (seja ela mista ou não).
tupla_mista = (1, "lista", "estranha", 100.)
type(tupla_mista)
tuple
?tuple
set_mista = {1, "lista", "estranha", 100.}
type(set_mista)
set
?set
Vamos as estruturas:
Loop
Exercício 3 – Tente ler o comando abaixo:
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
2==2.
True
O duplo igual (==) é usado para o teste, pois tradicionalmente o igual simples (=) é usado para atribuição de valor;
v=2
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:
2!=2.0
False
2<1.01
False
2<=1.01
False
2>1.01
True
2>=1.01
True
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)
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!
fatorial(12)
479001600
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.
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)
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
somapa(1,10,2)
100
Soma da PG (Progressão Geométrica)
def somapg(a1,n,q): sn = a1*(1-q**n)/(1-q) #soma dos n primeiros termos return sn
somapg(1,10,2)
1023
Um pouco de gráficos (só para sentir o gostinho)
Primeiro vamos carregar o módulo gráfico
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
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;
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]
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]
plt.plot(x,ypa,x,ypg)
[<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”
1+1
2
In [2]:
(50-5*6)/4
5
5/2
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;
5/float(2)
2.5
Ou de forma mais simples, coloque um ponto em algum dos números!
5/2.
2.5
5./2
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.
2 is 2.
Out[7]:
False
2==2.
True
Falaremos mais sobre testes em outro momento. Agora vamos continuar com a calculadora.
sqrt(2)
1.4142135623730951
exp(1)
2.7182818284590451
log(1.1)
0.095310179804324935
pi
3.141592653589793
In [13]:
sin(pi/4)
0.70710678118654746
tan(pi/2)
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,
comprimento =10
largura = 20
area = comprimento * largura
area
200
altura = 5
volume = area * altura
volume
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;
from math import factorial
factorial(12)
479001600
Agora vamos manipular algumas STRINGS
'Assim pintamos strings'
'Assim pintamos strings'
saldacao = ' Como vai?'
complemento = ' E ai Fulano!'
complemento + saldacao
' E ai Fulano! Como vai?'
"Funciona com duas aspas"
'Funciona com duas aspas'
"Mas os acentos não funcionam"
'Mas os acentos n\xc3\xa3o funcionam'
Para esses casos use o PRINT
print complemento + saldacao, " não está bem!"
E ai Fulano! Como vai? não está bem!
Listas
Isso é natural no Python
dias_da_semana = ["domingo","segunda","terça","quarta", "quinta", "sexta", "sábado"]
dias_da_semana[2]
'ter\xc3\xa7a'
print dias_da_semana[-1]
sábado
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)
?range
range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(5,10)
[5, 6, 7, 8, 9]
range(1,10,2)
[1, 3, 5, 7, 9]
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
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]
numpy.ndarray
lista_float
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
mista = [1, "lista", "estranha", 100.]
mista
[1, 'lista', 'estranha', 100.0]
type(mista)
list
?list
Cuidado, pois dependendo de como você gera uma “lista”, ela pode não ser defato uma lista (seja ela mista ou não).
tupla_mista = (1, "lista", "estranha", 100.)
type(tupla_mista)
tuple
?tuple
set_mista = {1, "lista", "estranha", 100.}
type(set_mista)
set
?set
Vamos as estruturas:
Loop
Exercício 3 – Tente ler o comando abaixo:
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
2==2.
True
O duplo igual (==) é usado para o teste, pois tradicionalmente o igual simples (=) é usado para atribuição de valor;
v=2
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:
2!=2.0
False
2<1.01
False
2<=1.01
False
2>1.01
True
2>=1.01
True
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)
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!
fatorial(12)
479001600
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.
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)
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
somapa(1,10,2)
100
Soma da PG (Progressão Geométrica)
def somapg(a1,n,q): sn = a1*(1-q**n)/(1-q) #soma dos n primeiros termos return sn
somapg(1,10,2)
1023
Um pouco de gráficos (só para sentir o gostinho)
Primeiro vamos carregar o módulo gráfico
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
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;
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]
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]
plt.plot(x,ypa,x,ypg)
[<matplotlib.lines.Line2D at 0x44ba790>, <matplotlib.lines.Line2D at 0x44ba610>]
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
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