In [5]:
r = [ 1, 3, 5 ]
for n in r: # Para n em r faça:
print n
print 2*n , '\n'
print "terminou"
O uso mais comum do loop for é executar um conjunto de instruções um dado numero de vezes
Para isso Python tem uma função especial chamada range que cria um iterador de um determinado tamanho
In [7]:
print range(5)
a = range(5)
print a, type(a)
In [8]:
r = range(5)
for n in r:
print("Olá de novo")
In [10]:
for n in range(5):
print n**2
a função range pode ser usada de algumas formas importantes:
In [12]:
print range(5) # 5 elementos de 0 a 5-1
print range(2,8) # elementos de 2 a 8-1
print range(2,20,3) # elementos de 2 a 20-1 espaçados de 3 em 3
print range(20,2,-3) # elementos de 20 a 2 espaçados de -3 em -3
In [15]:
# a construção abaixo não funciona em Python 3 pois o resultado da divisão é sempre um float
p = 10
q = 2
for n in range(p/q):
print n
numpy também tem uma funão semelhante chamada arange
ela é semlhante mas cria um array e não uma lista, e pode ser do tipo float ou inteiro
In [18]:
from numpy import arange
print arange(1,8,2)
print arange(1,8,2.)
numpy também permite dividir um intervalo em um dado numero de pedaços com a função linspace
In [20]:
from numpy import linspace
print linspace(2.0,2.8,10)
In [41]:
n = int(input('entre com n: '))
f = 1.0
for k in range(1,n+1):
f *= k
print f
se quisermos reutilizar a rotina acima é interessante criar uma função
note atentamente a estrutura de identação
a sintaxe é:
In [27]:
def fatorial(n): # define o nome da função e os parametros de entrada
f = 1.0 # inicio do bloco de instruções
for k in range(1,n+1):
f *= k # fim do bloco de instruções
return f # retorna um valor
# podemos chamar a função com:
a = fatorial(10)
print a
um ponto importante é que variáveis criadas dentro de uma função não funcionam fora dela
funções podem ter vários parametros:
In [29]:
from numpy import cos,sin,sqrt
def distance(r,theta,z):
x = r*cos(theta)
y = r*sin(theta)
d = sqrt(x**2+y**2+z**2)
return d
print distance(2.0,0.1,-1.5)
In [1]:
from numpy import array,cos,sin,sqrt
# funções podem retornar listas, arrays
def cartesian(r,theta):
x = r*cos(theta)
y = r*sin(theta)
position = array([x,y])
return position
r = [0.,1., 3., 6.3]
theta = [0., 0.1, 0.3, 0.5]
res = cartesian(r,theta)
print res, type(res)
print res.shape
print type(range(5))
In [2]:
from numpy import array,cos,sin,sqrt
# funções podem retornar multiplos valores
def cartesian(r,theta):
xc = r*cos(theta)
yc = r*sin(theta)
return xc,yc
r = [0.,1., 3., 6.3]
theta = [0., 0.1, 0.3, 0.5]
x, y = cartesian(r,theta) # note a alocação múltipla!
print x, type(x)
print y.shape
funções não precisam retornar valores
In [40]:
def printa(s):
print s
printa('hello world!')
voce pode importar suas funções salvas em um arquivo a parte usando o import
1 - Faça um programa que calcule a somatória:
$\displaystyle\sum_{n=1}^{100} \frac{1}{n}$
2 - Faça um programa que calcule as primeiras 5 linhas das 3 principais séries de linhas do Hidrogenio (m=1,2,3), Lyman, Balmer e Paschen de acordo com a fórmula de Rydberg(https://en.wikipedia.org/wiki/Rydberg_formula):
onde $R=1.097 \times 10^{-2} nm^{-1}$ e m, n são numeros inteiros positivos. Para um dado valor de $m$, os comprimentos de onda $\lambda$ de uma série são dados para valores n de modo que $n>m$
In [ ]: