Exercícios Práticos de Python para Física
Exercícios Práticos de Python para Física
Para estudantes de
Experimentações de Física I Módulo A
Curso de Graduação em Astronomia
A. Baruffolo
INAF — Observatório Astronômico de Pádua &
Universidade de Padova — Departamento de Física e Astronomia
10 de fevereiro de 2016
Índice de exercícios
1 Introdução 4
3 Lista 9
Esercizio 7 Gerar listas .............................. 9
Exercício 8 Liste a fette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Exercício 9 Extração da lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Exercício 10 Contagem de dígitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Exercício 11 Lorem ipsum 10
4 Ciclos 13
Exercício 12 Soma de números naturais com for .................... 13
Exercício 13 Soma de números naturais com while . . . . . . . . . . . . . . . . . 13
Exercício 14 Iterar sobre fatia 13
Exercício 15 A tabuada até 10 . . . . . . . . . . . . . . . . . . . . . . . . . 13
Esercizio 16 Sequência de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . 14
Exercício 17 Sucessão de Tribonacci . . . . . . . . . . . . . . . . . . . . . . . 14
Exercício 18 Cálculo do montante . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Esercizio 19 Algoritmo de Gauss–Legendre . . . . . . . . . . . . . . . . . . . . . 15
Exercício 20 Triângulo de números ..................... 15
Exercício 21 Triângulo inverso de números . . . . . . . . . . . . . . . . . . . . . . 15
Exercício 22 Triângulo de Floyd . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Exercício 23 Diagonais de’ ’ *............................... 16
Exercício 24 Diagonale inversa di’ ’ * . . . . . . . . . . . . . . . . . . . . . . . 16
Exercício 25 Quadrado de’ ’ *. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Exercício 26 Retângulo de’ ’ * 17
Exercício 27 Triângulo retângulosinistro di’ ’ 17 *
Exercício 28 Triângulo retângulosinistro e inverso di’ ’ .................. * 17
Exercício 29 Triângulo retângulodestro de’ ’ ........................................18
*
Esercizio 30 Triângulo retângulodestro e inverso de’ ’ 18 *
Exercício 31 Pirâmide de’ ’ em * pés 18
Exercício 32 Triângulo isósceles de’ ’ * 18
Exercício 33 Triângulo isóscelesinvertido di’ ’ 19 *
Exercício 34 Rombo de’ ’ .*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 Seleção se 26
Exercício 35 Frio ou quente .................................................. 26
Exercício 36 Números inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Exercício 37 Verifica ângulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Exercício 38 Ano bissexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Exercício 39 sexagesimal2decimal27
1
6 Ciclos e seleções 31
Esercizio 40 Iterações com if .................................................. 31
Exercício 41 Ciclo de comandos 31
Exercício 42 Da unidadeà imperiali a métricas . . . . . . . . . . . . . . . . . . . . . 31
Exercício 43 Computador adivinha número . . . . . . . . . . . . . . . . . . . . . . 32
Exercício 44 Computador adivinha número sem truques ................................ 32
7Funções e módulos 37
Exercício 45 Fórmula de Heron . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Esercizio 46 Raízes de equação de segundo grau . . . . . . . . . . . . . . . . . 37
Exercício 47 Ano bissexto, função 38
Exercício 48 Dia do ano . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Exercício 49 Do dia do ano a data 38
Esercizio 50 Páscoa Gregoriana 39
Exercício 51 De decimal para binário . . . . . . . . . . . . . . . . . . . . . . . . . 39
Exercício 52 De decimal para binário, recursivamente . . . . . . . . . . . . . . . . 40
Exercício 53 Um clone debin()40
Exercício 54 De decimal para octal .................................................. 40
Exercício 55 De decimal para octal, recursivamente . . . . . . . . . . . . . . . . . 41
Esercizio 56 Um clone deout(). . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Exercício 57 Números de Thabit 42
Exercício 58 Teorema de Pitágoras 42
Exercício 59 Gráficos de funções . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Exercício 60 Soma dos dígitos de um inteiro . . . . . . . . . . . . . . . . . . . . 42
Exercício 61 Soma dos dígitos de um inteirobis 42
Exercício 62 Algoritmo de Horner . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Exercício 63 Algoritmo de Horner recursivo . . . . . . . . . . . . . . . . . . . . . 43
Exercício 64 Dia Giuliano . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Exercício 65 Dia Giuliano modificado 44
Exercício 66 Números perfeitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Esercizio 67 Crivo de Eratóstenes . . . . . . . . . . . . . . . . . . . . . . . . . 44
8 Série numérico 53
Exercício 68 Série pore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Exercício 69 Série pore, recursiva . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Exercício 70 Série de Nilakantha . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Exercício 71 Série de Nilakantha recursiva ..................................................................................... 53
9 Números casuais 55
Exercício 72 Lotto (embaralhamento) 55
Exercício 73 Loteria (escolha) 55
Exercício 74 Lotto (índice randômico) . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Exercício 75 Adivinha o número . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
10 Numpy 59
Exercício 76 Soma de inteiros, versão numpy . . . . . . . . . . . . . . . . . . . 59
Exercício 77 Tabellina, versão numpy 59
Exercício 78 Thabit, versão numpy . . . . . . . . . . . . . . . . . . . . . . . . 59
Esercizio 79 Montante, versão numpy . . . . . . . . . . . . . . . . . . . . . . . 59
Exercício 80 Seno e coseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Exercício 81 Gráficos de funções, numpy 59
Esercizio 82 Gráfico de Celsius–Fahrenheit . . . . . . . . . . . . . . . . . . . . . . 60
2
Exercício 83 Gráfico de polinômio .......................................................... 60
Exercício 84 Reproduzir gráfico 60
Exercício 85 Crivo de Eratóstenes, versão numpy 61
Exercício 86 Soma cumulativa . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Exercício 87 Verifica soma cumulativa . . . . . . . . . . . . . . . . . . . . . . 61
3
Capítulo 1
Introdução
Os exercícios apresentados nesta coleção assumem que o estudante está familiarizado com os conceitos de
Python ilustrado durante o laboratório. Em particular, o estudante deve saber:
como escrever funções curtas com parâmetros opcionais que retornem valores ao chamador;
Entrada de uma string pelo usuário, através da função cmd = raw input("Stringa
di prompt: ");
...;
` provável que no texto ou nas soluções propostas haja erros. É muito provável
É `
que haja amplas margens de melhoria, por exemplo, no que diz respeito à clareza. Os leitores são
cortesemente convidados a relatar erros e/ou possíveis melhorias através deemail.
4
Capitolo 2
Os seguintes exercícios servem para se familiarizar com a forma como números e fórmulas são
escritos de maneira a poderem ser interpretados corretamente por um computador e em particular por
Python. É importante lembrar que:
escrevendo uma expressão e pressionando a tecla Entrar a expressão é avaliada pelo Python
e o resultado escrito na tela;
5
Exercício 6 Pressione atmosferica: O andamento da pressão atmosférica P,
A pressão medida em atmosferas, em função da altura h (em metros), pode ser aproximada com a
formula:
h
P= 0.9877 100,0 . (2.1)
6
Solução do exercício1
>>> pi = 3.14159265
>>> r = 3.0
>>> 2.0 pi
* r*
18.849555900000002
>>> pi *r r*
28.274333850000005
>>> 4./3. pi* r r* r * *
113,09733539999999
O volume também pode ser calculado usando a elevação a potência:
>>> 4./3. pi* r 3* **
113.09733539999999
Soluzione dell’esercizio 2
Solução do exercício3
Soluzione dell’esercizio 4
Solução do exercício5
>>> pi=3.14159265358
22./7.
3,142857142857143
>>> (22/7.-pi)/pi
0,00040249943788918174
333./106.
3.141509433962264
(333./106.-pi)/pi
-2,648962704990393e-05
355/113.
3.1415929203539825
(355/113.-pi)/pi
8.491679599397461e-08
7
Solução do exercício6
>>> h = 1000.0
>>> 0,9877 (h/100,0)
**
0.8835894823558638
>>> h = 2000.0
>>> 0.9877 (h/100.0)
**
0,7807303733299034
>>> h = 4000.0
>>> 0,9877 (h/100,0)
**
0.6095399158398502
8
Capítulo 3
Liste
Exercício 8 Liste a fette:No prompt do IDLE, gerar uma lista com os números de 1 a 30
usando a função range(). Desta lista gerar, usando fatias, outras listas contendo:
Os números entre 11 e 20 (ambos inclusos)
2. os números da lista de partida que são ímpares
3. os números da lista de partida que são pares
4. os números da lista de partida que são divisíveis por três
5. os números da lista de partida que são divisíveis por cinco
6. a lista de partida invertida (= os números de 30 a 1)
7. i numeri della lista di partenza che sono pari in ordine decrescente
8. Os números da lista de partida que são divisíveis por cinco em ordem decrescente
nove
(pode fazer cópia e cola) e uma lista vazia n. Depois, usando o método count() contar
quantas vezes os dígitos de 0 a 9 aparecem ao colocar esses números, em ordem, na lista n. Na
outras palavras, no final da execução, o i-ésimo elemento de ndovr`a deve corresponder ao número de
volte que a cifra aparece em l. Resultado esperado:
[2,2,3,6,1,3,5,4,4,0]
Exercício 11 Lorem ipsum: Escrever um programa que conte quantas vezes cada uma
lettera minuscola dell’alfabeto (compresa la x) compare nel testo Lorem ipsum:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercício ullamco trabalho, exceto para aliquip ex ea commodo consequat. Duis aute
irure dolor em reprehenderit na voluptade velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt em culpa que officios
deserunt mollit anim id est laborum.
Procedimento:
Fazendo copiar e colar, defina uma variável que contenha o texto Lorem ipsum (lembre-se
que se pode definir uma string em várias linhas colocando uma barra invertida '\' no final da linha, antes
di andar a linha);
converta a stringa em uma lista usando a função list();
inicializar uma lista n_lettervazia que conterá o número de ocorrências para cada uma
letra do alfabeto
iterar sobre todas as letras do alfabeto contidas na variável alphabet, com variável
de iteração l:
10
Solução do exercício7
1. intervalo(1,31)
2. range(30,0,-1)
3. range(2,31,2)
4. intervalo(3,31,3)
5. faixa(5,31,5)
6. intervalo(30,0,-1)
7. range(30,0,-2)
8. range(30,1,-5)
Solução do exercício8
Posto a = range(1,31):
1. a[10:20]
2. a[::2]
3. a[1::2]
4. a[2::3]
5. a[4::5]
7. a[::-2]
8. a[::-5]
Solução do exercício9
1. pop_append1.py:
n = range(1,31)
p = []
para i em intervalo(1,16):
[Link]([Link](i))
imprimirp
2. pop_append2.py:
n = range(1,31)
p = []
para i em intervalo(0,15):
[Link]([Link](i))
printp
11
Solução do exercício10
count_digits.py:
l = [3, 0, 2, 6, 3, 3, 8, 3, 2, 1, 0, 7, 8, 3, 6,
6, 1, 4, 8, 5, 6, 7, 8, 2, 7, 7, 6, 5, 3, 5]
n = []
para i em range(10):
[Link]([Link](i))
printn
Solução do exercício11
contar_lorem_ipsum.py:
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Para obter o mínimo de desculpas, quem nos exerceu a atividade de trabalho
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit na vontade velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, são em
culpa qui officia deserunt mollit anim id est laborum.
ltext = lista(texto)
alphabet = ’abcdefghilmnopqrstuvxz’
n_letter = []
forlinalphabet:
n = [Link](l)
n_letter.append(n)
for i em range(len(alphabet)):
printalphabet[i], ': ', n_letter[i]
12
Capítulo 4
Ciclos
Exercício 14 Iterar sobre fatia:Escrever um breve programa que gere uma lista
conteúdo os números de 1 a 30 usando a função range(). Usando um loop for:
1. iterar sobre a sub-lista formada por todos os números ímpares (identificados usando slices),
e imprima-os em uma única linha;
2. iterar sobre a sub-lista formada por todos os números pares (identificada usando slices), e
stampem em uma única linha;
3. iterar sobre a sub-lista formada por todos os números divisíveis por cinco (identificada
usando o slice), e imprimi-los em uma única linha.
Dica: Lembre-se que ao colocar uma vírgula no final da instrução print o texto não quebra a linha.
2 x 1 = 2
2 x 2 = 4
13
...
...
10 x 9 = 90
10 x 10 = 100
14
Exercício 19 Algoritmo de Gauss–Legendre: O algoritmo di Gauss–Legendre e
`
um algoritmo para o cálculo de π conhecido por convergir muito rapidamente. Foi utilizado
repetidamente na segunda metade do século passado para calcular progressivamente de dezenas de
milhões até centenas de bilhões de dígitos de π.
Escrever um programa Python que calcule π usando tal método, conforme descrito emPoços (1986).
Procedimento:
√
defina as variáveis A= 1, X= 1, B= 1/2 e C= 1/4 (atenção à matemática)
interar e lembrar-se de importar as funções/módulos necessários);
Y= A
A+ B
A=
2
√
B= POR
2
C = C - X · (A - Y)
X = 2X
(A+ B)2
π≈
4C
15
>>> num_triangle_inv(5)
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
Nota: Observe que, se n é o número de ' ' na*diagonal, os espaços a serem impressos por linha vão
de (n−1) fino a zero, no exemplo acima (n−1) = 4.
dezesseis
Esempio:
Numero: 5
*****
*****
*****
*****
*****
Note que, uma vez que os caracteres na tela não ocupam o mesmo espaço na horizontal e
vertical, o "quadro" resultante não parece quadrado aos nossos olhos.
Dica: Na prática, trata-se de iterar n vezes, a cada passo imprimindo um número crescente de
partindo
* de um.
Dica: Na prática, trata-se de iterar n vezes, a cada passo imprimindo um número decrescente.
di ’ ’*partindo da n.
17
Exercício 29 Triângulo retângulo isóscelesEscrever um programa
* que
peça ao usuário um número inteiro como entrada. O programa então imprime um triângulo retângulo
de asteriscos ’ ’ *com vértice para cima à direita, base e altura de n’ ’. *
Esempio:
Numero: 5
*
**
***
****
*****
Dica: Na prática, trata-se de iterar n vezes, a cada passo imprimindo um número decrescente.
de espaços ( ), partindo de n−1, e um número crescente de ’ ’ partindo
* de um.
Esempio:
Numero: 5
*****
****
***
**
*
Dica: Na prática, trata-se de iterar n vezes, a cada passo imprimindo um número crescente de
espaços ( ), começando do 0, e um número decrescente de ' *' começando de n.
18
Esempio:
Numero: 6
*
***
*****
*******
*********
***********
Dica: Na prática, trata-se de iterar n vezes, começando do zero, a cada passo imprimindo um
número decrescente de espaços e (2i + 1) ' ', *onde i é a variável de iteração.
Dica: Na prática, trata-se de iterar n vezes, começando do zero, a cada passo imprimindo um
número crescente de espaços ( ), começando de 0, e um número decrescente de ’*’ igual a 2·(n−i)−1,
dove è la variabile di iterazione.
19
Solução do exercício12
somma_100_for.py:
# Calcule a soma dos primeiros 100
# números naturais usando um ciclo for
somma = 0
para i em intervalo(1,101):
somma += i
printsomma
Solução do exercício13
somma_100_while.py:
# Calcule a soma dos primeiros 100
# números naturais usando um ciclo while
somma = 0
i = 1
enquanto i <= 100:
somma += i
i += 1
printsomma
Solução do exercício14
1. for_dispari.py:
a =range(1,31)
fornina[::2]:
imprimir
imprimir
Saída no IDLE:
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29
2. for_pari.py:
a = range(1,31)
fornina[1::2]:
imprimirn
imprimir
Saída no IDLE:
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
3. for_multipli_5.py:
a =range(1,31)
fornina[4::5]:
imprimirn,
imprimir
Saída no IDLE:
5 10 15 20 25 30
20
Solução do exercício15
1. tabelline_10_for.py:
para i no intervalo(1,11):
para i na faixa(1,11):
printi, " x ", j, " = ", i j *
imprimir
2. tabelline_10_while.py:
i = 1
enquanto i <= 10:
j = 1
enquanto j <= 10:
printi, " x ", j, " = ", i j *
j +=1
i += 1
imprimir
Solução do exercício16
1. fibonacci_while.py:
# Calcula a sequência de Fibonacci
# através do ciclo while
n0 = 0
n1 = 1
# Mostro na tela os dois primeiros
printn0, n1,
# já os tenho impressos, calculo os restantes
i = 2
enquanto i < 16:
temp = n0
n0 = n1
n1 = n1 + temp
printn1,
i += 1
2. fibonacci_for.py:
# Calcule a sequência de Fibonacci
# através do ciclo for
n0 = 0
n1 = 1
# Exibo na tela os primeiros dois
imprimir n0, n1,
# eu já os tenho impressos, calculo os restantes 14
para i em range(14):
temp = n0
n0 = n1
n1 = n1 + temp
printn1,
21
Soluzione dell’esercizio 17
1. tribonacci_while.py:
# Calcula a sequência de Tribonacci
# através do ciclo while
n0 = 0
n1 = 1
n2 = 1
Stampo a schermo os três primeiros
imprimirn0, n1, n2,
# já os imprimi, calculo os restantes
i = 3
enquanto i <= 15:
t0 = n0
t1 = n1
n0 = n1
n1 = n2
n2 = n2 + t0 + t1
imprimirn2,
i += 1
2. tribonacci_for.py:
# Calcule a sequência de Tribonacci
# tramite ciclo for
n0 = 0
n1 = 1
n2 = 1
Stampo a tela os três primeiros
printn0, n1, n2,
# tre li ho já estampados, cálculo os restantes 13
for i in range(13):
t0 = n0
t1 = n1
n0 = n1
n1 = n2
n2 = n2 + t0 + t1
printn2,
Solução do exercício18
Diamo due possibili soluzioni, lo studente `e incoraggiato a capire il funzionamento di entrambe.
1. [Link]:
capitale = 1000
i = 0,04 # tasso di interesse
upi = 1.0+i# uno piu‘ i
montante = capitale
para i na faixa(1,11):
montante =* upi
printj, montante
22
2. [Link]:
capitale = 1000
i = 0.04 # tasso di interesse
upi = 1.0+i# um mais i
montante = capitale
forjin intervalo(1,11):
montante = capitale * upi **j
printj, montante
Solução do exercício19
gauss_legendre_pi.py
frommathimportsqrt
A = 1
X = 1
B = 1.0/sqrt(2)
C = 0.25
ApB = A + B
niter = 5
for i em range(niter):
Y = A
A = ApB/2,0
B = raiz(B Y)*
C -= X *(A-Y) (A-Y)
*
X = 2.0 *X
ApB = (A+B)
pi_approx = ApB ApB/(4.0
* C) *
aproximar_pi
Soluzione dell’esercizio 20
prog_num_triangle.py
n = int(input("Número: "));
paraan 1,n+1):
parajin intervalo(1,i+1):
printj
imprimir’’
Solução do exercício21
prog_num_triangle_inv.py:
n = int(input("Número: "));
for i in range(n):
forjin range(1,n-i+1):
printj,
imprimir’’
Solução do exercício22
floyds_triangle.py:
deffloyds_triangle(n):
k = 1
para i em range(n):
23
parajin faixa(0,i+1):
printk,
k += 1
imprimir''
Solução do exercício23
diag_pat.py:
n = int(input("Número: "));
para i em range(n):
imprimir' ' i+'
* ' *
Solução do exercício24
inv_diag_pat.py:
n =int(raw_input("Numero: "));
para i em range(n-1, -1, -1):
imprimir' ' i+'
* ' *
Solução do exercício25
square_pat.py:
n = int(input("Número: "));
para i em range(n):
print’ ’ n* *
Solução do exercício26
rect_pat.py
r =int(raw_input("Numero righe: "));
c = int(input('Número de colunas: '));
for i em range(r):
imprimir''* c*
Solução do exercício27
ltriangle_pat.py:
n = int(input("Número: "));
for i in range(1, n + 1):
print’ ’ i * *
Solução do exercício28
inv_ltriangle_pat.py:
n = int(raw_input("Número: "));
para i em intervalo(n, 0, -1):
imprimir' *' i*
Solução do exercício29
rtriangle_pat.py:
n = int(input("Número: "));
para i em range(1, n + 1):
imprimir' ' *(n-i)+' ' i * *
24
Solução do exercício30
inv_rtriangle_pat.py:
n = int(input("Número: "));
para i em range(n, 0, -1):
print’ ’ (n-i)+’
* ’ i * *
Solução do exercício31
di_ltriangle_pat.py:
n = int(input("Número: "));
for i na faixa(1, n + 1):
print’ ’ (n-i)+’
* ’ i * *
para i em range(n-1, 0, -1):
imprimir' ' (n-i)+
* ' ' i* *
Soluzione dell’esercizio 32
tree_pat.py:
n = int(input("Número: "));
para i em range(n):
na = 2 *i+1# número asteriscos
ns = n-i-1 # número de espaços
imprimir' ' *ns+' ' *na*
Solução do exercício33
inv_tree_pat.py:
n = int(input("Número: "));
for i in range(n):
na = 2 *(n-i)-1# número asteriscos
ns = i # numero spazi
print’ ’ ns+’* ’ na * *
Solução do exercício34
diamond_pat.py
n =int(raw_input("Numero: "));
# Parte "sopra"
para i em range(n):
na = 2 *i+1
ns = n-i-1
imprimir' ' ns+
* ' ' *na+* ' ' ns *
# Parte "sotto", notare che
# O intervalo começa em 1.
para i em range(1,n):
na = 2 *(n-i)-1
ns = i
imprimir ' ' ns
* + ' ' *na* + ' ' ns *
25
Capitolo 5
Selecione
maior ou igual a -15 e menor que 0, em caso afirmativo escreva "muito frio";
divisível por dois, em caso afirmativo escreva "par" em saída, caso contrário escreva
dispari
Note que a função int() retorna um erro se a entrada não for uma string convertível em
número inteiro.
menor que zero ou maior ou igual a 360, em caso afirmativo escreva na tela "Ângulo
fora do intervalo.
maior que zero e menor que 90, em caso afirmativo escrever 'Primeiro quadrante.'
26
igual a 90, em caso afirmativo escreva 'Ângulo reto.'
maior que 90 e menor que 180, em caso afirmativo escreva "Segundo quadrante."
maior que 180 e menor que 270, em caso afirmativo escreva "Terceiro quadrante."
se o caractere ':' não está presente na string nas posições esperadas (especificadas a partir
do final da stringa), escreva uma mensagem de erro;
caso contrário, extraia as substrings (por meio de fatiamento como dito acima) correspondentes aos graus,
primi e secondi e convertere-os em números de ponto flutuante através da função float();
se o número de graus está fora do intervalo [0,360) escreva uma mensagem de erro;
27
caso contrário, se o número de primos estiver fora do intervalo [0,59), escreva uma mensagem
de erro;
caso contrário, se o número de segundos estiver fora do intervalo [0,59), escreva uma mensagem
de erro;
Exemplo de execução:
>>>
Angolo: 1:02:03
Angolo decimale: 1.03416666667
>>>
Angolo: 1:2:3
Erro de formato
>>>
Angolo: 1:99:00
Erro nos primeiros
28
Solução do exercício35
freddo_o_caldo.py:
temp =float(raw_input("Temperatura: "))
freddo polare!
eliftemp < 0:
muito frio
eliftemp < 18:
print"freddo"
eliftemp < 26:
tiepido
eliftemp < 32:
caldo
caso contrário:
torrido!
Soluzione dell’esercizio 36
numero_intero.py:
num = int(input("Número: "))
se num % 2:
imprimir 'dispari'
senão:
print"pari"
se(num % 3) == 0:
divisível por três
se(num % 5) == 0:
divisível por cinco
Solução do exercício37
verifica_angolo.py:
ang =float(raw_input("Angolo: "))
29
Solução do exercício38
anno_bisestile.py:
y =int(raw_input("Anno: "))
ify % 4:
não bissexto
elify % 100:
impar
elify % 400:
imprimir "não bissexto"
senão:
imprimir "bisestile"
Solução do exercício ??
[Link]:
ang =raw_input("Angolo: ")
ifang[-3] != ':' orang[-6] != ':':
Erro de formato
senão:
dd = float(ang[:-6])
pp = float(ang[-5:-3])
ss = float(ang[-2:])
se dd < 0 ou dd > 359:
Errore nos graus
elif pp < 0 or pp > 59:
Errore nos primeiros
elifss < 0ou ss > 59:
Erro nos segundos
senão:
dec = dd + (pp + ss/60.)/60.
print"Ângulo decimal:",dec
30
Capítulo 6
Ciclos e seleções
Exercício 40 Iterações com if:Scrivere un breve programma che generi una lista
contendo os números de 1 a 30 usando a função range(). Usando um loop for, itere sobre
todos os elementos da lista, e imprima-os, em uma única linha:
1. os números da lista de partida que são ímpares
2. os números da lista de partida que são pares
Os números da lista de partida que são divisíveis por cinco
use a instrução if para verificar as condições necessárias.
31
3.245y = 2.967228 m
Misura da convertire: 12
não entendo...
Misura da convertire:
>>>
iterare all’infinito
defina a variável guesspari como (low+high)/2;
–usando raw_input() perguntar ao usuário se o número que ele pensou é igual ao valor
di indovinare (convertido em stringa com str()) e atribuir o texto digitado pelo usuário
à variável res;
–se res`e uguale a 'y', o programa adivinhou, interrompa o ciclo;
se res`e igual a '+' coloque low igual a guess;
–se res`e igual a ’-’ colocar highigual a guess;
–caso contrário, escreva na tela: "Não entendi..."
Exemplo:
Pense em um número (inteiro) de 1 a 100.
Escreva '+' se o número que você pensou é maior,
escreva '-' se for menor, ou 'y' se eu acertei.
O número que você pensou é 51?
O número que você pensou é 76?
O número que você pensou é 88?
O número que você pensou é 82?
O número que você pensou é 85?
O número que você pensou é 83?
Eu adivinhei!
32
Pense em um número (inteiro) de 1 a 100.
Scrivi ’+’ se il numero che hai pensato e‘ piu‘ grande,
escreva '-' se for menor, ou 'y' se eu acertei.
O número que você pensou é 51?
O número que você pensou é 76?
O número que você pensou é 63?
O número que você pensou é 69?
O número que você pensou é 66?
O número que você pensou é 67?
O número que você pensou é 66?
Você está trapaceando e eu não jogo mais
33
Solução do exercício40
1. for_and_if_dispari.py:
a = intervalo(1,31)
fornina:
se n % 2 == 1:
imprimirn
imprimir
2. for_e_if_pari.py:
a =range(1,31)
fornina:
se n % 2 == 0:
printn,
imprimir
3. for_and_if_multipli_5.py:
a = range(1,31)
fornina:
ifn % 5 == 0:
printn
imprimir
Solução do exercício41
[Link]:
enquantoVerdadeiro:
secmd == "fim":
quebrar
Solução do exercício42
[Link]:
in2cm = 2.54
ft2dm = in2cm * 1.2
y2m = ft2dm * 0,3
enquantoVerdadeiro:
34
printdat,'=',dm,'dm'
elifdat[-1] == 'y':
yards =float(dat[:-1])
m = jardas * y2m
imprimir dados,'=',m,'m'
senão:
não entendo...
Solução do exercício43
computer_indovina_numero.py:
Pense em um número (inteiro) de 1 a 100.
escreva ‘+’ se o número que você pensou é maior,
escreva '-' se for menor, ou 'y' se eu acertei.
low = 1
high = 101
enquantoVerdadeiro:
palpite = (alto+baixo)/2
res =raw_input("Il numero che hai pensato e‘ "+str(guess)+"? ")
se 'y':
quebrar
elifres == '+' :
low = guess
elifres == '-'
high = guess
senão:
Não entendi...
Eu adivinhei!
Solução do exercício44
computador_adivinha_numero_robusto.py
Pense em um número (inteiro) de 1 a 100.
Escreva '+' se o número que você pensou é maior,
escreva '-' se for menor, ou 'y' se eu acertei.
low = 1
high = 101
guess = 0
enquantoVerdadeiro:
nova_chute = (alto+baixo)/2
se_chute == novo_chute:
Você está trapaceando e eu não jogo mais.
quebrar
palpite = novo_palpite
res = input("O número que você pensou é '" + str(guess) + "'? ")
se as refeições == 'y':
Eu adivinhei!
quebrar
elifres == '+' :
low = guess
elifres == '-'
high = guess
senão:
35
Não entendi...
36
Capítulo 7
Funções e módulos
A= p·(p−a)
p ·(p−b) ·(p−c)
permite calcular a área de um triângulo conhecendo os comprimentos de seus três lados (a, b, c) e
a+ b+ c
p=
2
quee)doasldosom
co(sinpterosm
ârpatesêrtetiecaqueouãnçm
fvaercseo,m
rím
etsrpeoie
retorne a área do triângulo correspondente calculada usando a fórmula de Heron.
Dica: para calcular a raiz quadrada, use a função sqrt() do módulo math.
ax2+ bx + c = 0.
Procedimento:
x2-5x + 6 = 0 [2; 3]
2x2−3x−5 = 0 [−1; 2.5]
37
Exercício 47 Ano bissexto, função:Transformar o programa do Exercício38
em uma função que aceite um inteiro como parâmetro de entrada e que retorne verdadeiro se o número
corrisponde ad un anno bisestile o False in caso contrario.
Exercício 48 Giorno dell’anno: Escrever uma função que aceite três parâmetros inteiros
que representam dia, mês e ano de uma certa data e que calcule os dias transcorridos desde o início
do ano naquela data. Por exemplo, para o primeiro de janeiro (de qualquer ano) o resultado será
1, o dia seguinte será 2, e assim por diante. Para as datas posteriores a 28 de fevereiro, o resultado muda para
segundo se o ano é bissexto ou não. Para isso, utilize a função escrita como solução
do Exercício47. Procedimento:
definir uma função que aceite três parâmetros: dia, mês e ano;
definire una lista contenente i giorni di ciascun mese dell’anno (in ordine da gennaio a
dezembro);
se o ano passado em entrada é bissexto, colocar o segundo elemento da lista igual a 29;
inicializar a zero uma variável (por ex. dia do ano) que conterá o resultado;
por todos os meses de janeiro até o mês anterior à data especificada, iterar sobre a lista
dei giorni di ciascun mese e sommarli alla variabile dia do ano;
dados doy
1 gennaio 1
31 de janeiro 31
1 marzo 2015 60
1 marzo 2016 61
28 ottobre 2015 301
28 ottobre 2016 302
31 dicembre 1900 365
31 de dezembro de 2000 366
38
Exercício 50 Páscoa Gregoriana:Escrever uma função Python que calcule o dia
em que cai a Páscoa nocalendário Gregoriano, portanto para os anos seguintes a 1582, segundo
o método ilustrado no Capítulo 8 de Meeus (1991).
Procedimento:
definir uma função que aceite um único parâmetro ano;
forçar, através da função int(), a variável ano a conter um valor inteiro;
efetuar os seguintes cálculos, armazenando os valores em variáveis com o mesmo nome das
quantita` indicate:
Dividir por quociente resto
ano 19 - a
ano 100 b c
b 4 d e
b+8 25 f -
b−f+ 1 3 g -
19a + b - d - g + 15 30 - h
c 4 eu k
32 + 2e + 2i - h - k 7 - l
a+ 11h+ 22l 451 m -
h+ l−7m+ 114 31 n p
onde por quociente e resto entendem-se aqueles obtidos por meio da divisão inteira1
a questo punto il numero del mese in cui cade la Pasqua (3 o 4, marzo o aprile) `e contenuto
na variável n, enquanto o número do dia é dado por p+1.
39
iterar enquanto n for diferente de zero;
–se o resto da divisão inteira de n por dois é diferente de zero, colocar b = '1' + b
–caso contrário, coloque b = '0'+b
–atribuir a nil o resultado da sua divisão inteira por 2
retornar '0b'+b
Verifique a função comparando o resultado com a função bin(), por exemplo:
>>> dec2bin(7)
'0b111'
>>>bin(7)
’0b111’
>>> dec2bin(1234)
’0b10011010010’
>>>bin(1234)
’0b10011010010
>>> dec2bin(7) == bin(7)
Verdadeiro
>>> dec2bin(1234) == bin(1234)
Verdadeiro
caso contrário, retorna o resultado da chamada recursiva com o parâmetro o número dividido por dois;
piu` a representação em string do resto da divisão inteira por dois;
Confrontar o resultado da função escrita com o resultado de bin(). Exemplo:
>>> dec2bin_rec(1234)
10011010010
>>>bin(1234)
’0b10011010010’
Exercício 53 Um clone dibin():Escrever uma função que, usando a que foi escrita
como solução do Exercício52, ritorni la rappresentazione binaria del numero intero in input
como uma string que começa com '0b', da mesma forma que a função bin(). Exemplo:
>>> bin_clone(4321)
’0b1000011100001’
>>>binário(4321)
’0b1000011100001’
40
definir uma função que aceita um único parâmetro: n;
retornar ’0’+o
Verifique a função comparando o resultado com a função oct(), por exemplo:
verificar se o número de entrada é menor que zero, se for, retornar uma mensagem de
errore;
caso contrário, se o número for zero, retornar a string vazia '';
caso contrário, retorna o resultado da chamada recursiva com o parâmetro do número dividido por oito;
piu` a representacao em string do resto da divisao inteira por oito;
Compare o resultado da função escrita com o resultado de oct(). Exemplo:
>>> dec2oct_rec(1234)
2322
>>>oct(1234)
’02322’
>>> dec2oct_rec(4321)
10341
>>>oct(4321)
’010341’
Exercício 56 Um clone dioct():Escrever uma função que, usando a que foi escrita
como solução do Exercício55, retorna a representação binária do número inteiro de entrada
como uma string que começa com '0', da mesma forma que feito pela função oct(). Exemplo:
>>> clonar_oct(1234)
’02322’
>>>oct(1234)
02322
>>> oct_clone(4321)
’010341’
>>>oct(4321)
’010341’
41
Exercício 57 Números de Thabit:Escrever uma função que, dado um inteiro positivo
nin input, calcoli ilnúmero di Thabit: 3 ·2n-1. Verifique se o número resultante, em
binário, é composto por '10' seguido de n'1' (com base no que foi visto na aula a respeito de
representação dos números inteiros positivos, vocês sabem explicar o por quê?)
Exemplo:
>>> thabit(5)
95
>>>bin(95)
’0b1011111’
atribuir a nil o resultado da função int() aplicada a n (para garantir que a variável
sia de tipo inteiro)
retornar o valor de s.
Esercizio 61 Soma dos dígitos de um número inteiro:Escrever uma função que, dado
um inteiro como parâmetro de entrada, calcule a soma dos dígitos que o compõem, de acordo com o
seguente procedimento:
42
inicializar a zero uma variável que conterá o resultado;
retornar o valor de s.
em um dado ponto x0 , por meio deo algoritmo di Horner, de acordo com o seguinte procedimento:
definir uma função que aceite dois parâmetros. Sendo o primeiro, x0, o ponto onde se quer
avaliar o polinômio e o segundo, coeffs, uma lista de coeficientes, em ordem a partir do que do
termine de grau maior aMa aquele do termo de grau zero, a0 .
atribuir a uma variável o valor do primeiro coeficiente (primeiro elemento da
lista);
iterar sobre os elementos restantes da lista e atribuir a result a soma da variável
de iteração mais o produto de x0 por resultado.
PN(x) = (x−3)(x+3)(x+5)(x+8)(x−2)(x−7) =
= x6+ 4x5-72x4-214x3+ 1127x2+ 1602x−5040.
Verifique que -8, -5, -3, 2, 3, 7 são raízes do polinômio (ou seja, o polinômio calculado naquele
ponto vale zero). Verifique que PN(2.7) = 424.0695 . . . e PN(−8,001) = 24,76958 . . .
–se tst ≥1582.1015, então calcule A= INT (y/100) e B= 2 −A+ INT (A/4);
-caso contrário, defina B = 0.
Calcule e retorne:
43
Exercício 65 Dia Giuliano modificado:Reutilizando a função escrita para
O Exercício64, escrever uma função que retorne odia Giuliano modificado (Juliano Modificado
Dia, MJD), definido simplesmente como:
MJD = JD −2400000,5.
44
Solução do exercício45
[Link]:
importarmadilha como m
deferone(a, b, c):
p = (a+b+c)/2.0
[Link](p (p-a)* (p-b) (p-c))
* *
Solução do exercício46
eq2_roots.py:
importar sqrt de matemática
defeq2_raizes(a, b, c):
ifa == 0:
print 'a deve ser diferente de zero'
return
delta = b b *- 4 a c* *
se delta < 0:
return
elifdelta == 0:
retornar-b/(2 a) *
caso contrário:
sd = raiz(delta)
retornar(-b-sd)/(2 a), (-b+sd)/(2
* a) *
Solução do exercício47
is_leap.py:
defis_leap(y):
y = int(y) # Garantimos que y seja inteiro
ify % 4:returnFalse
ify % 100:returnTrue
se % 400:retornarFalso
retornarVerdadeiro
Solução do exercício48
dia_do_ano.py:
# A função is_leap está contida em is_leap.py
# na diretório atual.
fromis_leapimport *
45
retorno0
returnday_of_year
Solução do exercício49
[Link]:
# A função is_leap está contida em is_leap.py
na diretório atual.
fromis_leapimport *
defdoy2date(doy, ano):
Lista dos dias para cada mês
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Se ano bissexto, Fevereiro tem 29 dias
ifis_leap(ano): dias_no_mês[1] = 29
mm = 0
dd = dias_do_mês[mm]
enquanto dd < doy:
doy -= dd
mm += 1
dd = dias_do_mês[mm]
Solução do exercício50
pasqua_gregoriana.py:
defpasqua_gregoriana(ano):
anno =int(anno)
a = ano % 19
b = anno / 100
c = anno % 100
d = b / 4
e = b % 4
f = (b + 8) / 25
g = (b - f + 1) / 3
h = (19 a* + b - d - g + 15) % 30
i = c / 4
k = c % 4
46
l = (32 + 2 e* + 2 i *- h - k) % 7
m = (a + 11 *h + 22 l)* / 451
t = h + l - 7 m* + 114
n = t / 31
p = t % 31
return str(anno)+’-’+str(n)+’-’+str(p+1)
Soluzione dell’esercizio 51
[Link]:
defdec2bin(n):
b = ""
se int(n) != norn < 0:
n deve ser um número inteiro positivo
retornar
n = int(n)
enquanto n != 0:
se n % 2:
b = "1"+b
senão:
b = "0"+b
n /= 2
return '0b' + b
Soluzione dell’esercizio 52
dec2bin_rec.py:
defdec2bin_rec(n):
se n < 0:
return’Input must be a positive integer’
elifn==0:
retornar''
senão:
returndec2bin_rec(n/2) + str(n%2)
Solução do exercício53
bin_clone.py:
# A função dec2bin_rec está no arquivo
# dec2bin_rec.py nella directory corrente.
fromdec2bin_recimport *
defbin_clone(n):
se n < 0:
return’Input must be a positive integer’
senão:
retornar '0b' + dec2bin_rec(n)
Solução do exercício54
[Link]:
defdec2oct(n):
o = ’’
se int(n) != norn < 0:
47
n deve ser um número inteiro positivo
retornar''
n = int(n)
enquanto n != 0:
o = str(n % 8) + o
n /= 8
retornar'0' + o
Soluzione dell’esercizio 55
dec2oct_rec.py:
defdec2oct_rec(n):
se ifn < 0:
retornar 'A entrada deve ser um número inteiro positivo'
elifn==0:
retornar
senão:
returndec2oct_rec(n/8) + str(n%8)
Solução do exercício56
oct_clone.py:
# A função dec2oct_rec está no arquivo
# dec2oct_rec.py na diretório atual.
fromdec2oct_recimport *
defoct_clone(n):
se fn < 0:
return’Input must be a positive integer’
caso contrário:
retornar '0' + dec2oct_rec(n)
Solução do exercício57
[Link]:
# [Link]
defthabit(n):
retornar3 2* n-1**
Solução do exercício58
[Link]:
importar matemática como m
defpitagora(a, b):
retorna [Link](a a *+ b b) *
Solução do exercício59
1. [Link]:
importar matemática
48
ly = []
para i em range(npts):
x = xmin+i xdif
*
y = [Link](x)
[Link](x)
[Link](y)
[Link](lx,ly)
[Link]()
2. [Link]:
importar matemática
3. [Link]:
importar matemática
4. [Link]:
importar matemática
49
[Link](y)
[Link](lx,ly)
[Link]()
Solução do exercício60
soma_dí[Link]:
defsomar_dígitos(n):
se int(n) != n:
O número de entrada deve ser um inteiro.
retornar0
n = int(n)
s = 0
enquanto n > 0:
s += n % 10
n /= 10
retornos
Solução do exercício61
sum_digits_str.py:
defsomar_dígitos_str(n):
se int(n) != n:
Em número de entrada deve ser um inteiro.
retorno0
ns = str(int(n))
s = 0
fordinns:
s += int(d)
retornos
Soluzione dell’esercizio 62
[Link]
defhorner(x0, coeffs):
result =float(coeffs[0])
forcincoeffs[1:]:
result = c + result x0 *
retornaresultado
Solução do exercício63
horner_rec.py:
defhorner_rec(x0, coeficientes):
se len(coeffs) == 1:
retornar float(coeffs[0])
senão:
returncoeffs[-1] + x0 * horner_rec(x0, coeffs[:-1])
50
Solução do exercício64
[Link]:
defjd(y, m, dd):
se mf <= 2:
y -= 1
m += 12
tst = y + (m + dd/100.0)/100.0
iftst >= 1582.1015:
A = int(y/100.)
B = 2-A+int(A/4.)
senão:
B = 0
JD =int(365,25 (y+4716))+int(30,6001
* (m+1))+dd+B-1524,5
*
returnarJD
Solução do exercício65
[Link]:
fromjdimport *
defmjd(y, m, dd):
returnjd(y, m, dd)-2400000.5
Soluzione dell’esercizio 66
is_perfect.py:
frommathimportsqrt
defis_perfeito(n):
se int(n) != norn <= 0:
retornarFalso
divisors = []
maxn = int(n/2) + 1
para i em range(1, maxn):
se n % i == 0: [Link](i)
retorna soma(divisores) == n
Solução do exercício67
crivello_eratostene.py:
importar matemática como m
defcrivello_eratostene(maxn):
lista = list(range(maxn+1))
limite =int([Link](maxn))
for i in range(2, limite+1):
iflista[n] != -1:
idx = n n*
enquanto idx < len(lista):
lista[idx] = -1
idx += n
primi = []
forninlista[2:]
ifn != -1:
51
[Link](n)
returnprimi
52
Capítulo 8
Séries numéricas
Escrever uma função Python que, dado um número inteiro de entrada, calcule por meio de um loop.
para a série até o termo m-ésimo.
Escreva uma função Python que, usando um loop for, calcule a série até o N-ésimo termo.
(com Nintero e ≥0), ou seja:
N
π≈3 + 4 × -1n .
X (2n + 2) × (2n + 3) × (2n + 4)
n=0
Dica: Uma vez que nos termos do denominador aparece apenas 2n, é vantajoso iterar usando a função
range() a passi de 2. Observe também que o sinal de cada termo é inicialmente positivo
e depois 'é o oposto do termo anterior.
53
Solução do exercício68
natural_e.py:
importar matemática
defnatural_e(n):
e = 0.0
for i in range(n+1):
e += 1.0/[Link](i)
retorne
Soluzione dell’esercizio 69
natural_e_rec.py:
importar matemática
defnatural_e_rec(n):
se ifn == 0:
retorno1.0
return1.0/[Link](n)+natural_e_rec(n-1)
Solução do exercício70
nilakantha_pi.py
Nilakantha
veja [Link] (Taxa de convergência)
defnilakantha_pi(n):
acc = 0.0
sign = +1.0# segno inizialmente positivo
para i em range(0, 2 n+1,* 2):
acc += sinal / ((i + 2.0) (i + *3.0) (i + 4.0))
*
sinal =* -1.0# sinal alternado
retornar 3.0 + 4.0 acc
*
Solução do exercício71
nilakantha_pi_rec.py
defnilakantha_pi_rec(n):
sinal = 1.0-2.0 (n *% 2)
se ifn == -1:
retorno3.0
senão:
i = 2.0 n*
returnsign 4.0/((i+2.0)
* (i+3.0) (i+4.0))
* + nilakantha_pi_rec(n-1)
*
54
Capítulo 9
Números aleatórios
Exercício 72 Lotto (embaralhar): Escrever uma função que simule uma extração de
cinco números da loteria. Os cinco números "sorteados" devem, portanto, estar entre 1 e 90
e não devem se repetir. Procedimento:
Exercício 73 Lotto (choice): Implementar uma função que simule uma extração
de cinco números da loteria, com as características descritas no Exercício72, mas que você usa a
função choice() do módulo random. Procedimento:
gerar uma lista com os números inteiros de 1 a 90 e uma lista inicialmente vazia;
retornar a lista r.
gerar um número inteiro aleatório entre 1000 e 9999 e convertê-lo em string usando a
função str();
55
Se a stringa inserida pelo usuário não é composta por quatro caracteres, os
passos seguintes e volta-se a solicitar entrada;
Se a stringa inserida é igual ao número a ser adivinhado, imprimir "Adivinhou!"
e interromper as iterações;
–caso contrário, itere sobre cada caractere da entrada e:
se la cifra corrispondente del numero da indovinare coincide, stampare tale cifra
(sem ir para a próxima linha)
se a cifra correspondente do número a adivinhar é menor, imprimir ' - '
(sem ir para a nova linha)
além disso, imprimir '+' (sem ir para a linha)
–imprimir uma linha em branco para ir para a próxima linha.
Esempio:
Numero ? 5555
+ - - +
Numero ? 6446
+ - - 6
Numero ? 7336
+ - - 6
Numero ? 8226
+ - 2 6
Numero ? 9126
Acertou!
56
Solução do exercício72
lotto_shuffle.py:
de random import shuffle
deflotto_embaralhar():
lst = range(1, 91) # todos os números de 1 a 90
embaralhar(lst) vamos misturar a lista
returnlst[0:5] # e retornamos os primeiros 5 números
Solução do exercício73
lotto_choice.py:
de random import choice
deflotto_escolha():
l = range(1,91,1) # todos os números de 1 a 90
r = []# lista resultado inicialmente vazia
para i em range(5): # 'extrair 5 números
el = escolha(l)# escolhemos um elemento aleatório
[Link](el) Nós adicionamos à lista de resultados
[Link](el) e o removemos da lista de números
# para evitar que apareça novamente
retornar
Solução do exercício74
lotto_randint.py:
de random import randint
deflotto_randint():
lst = range(1,91)# todos os números de 1 a 90
res = []# lista risultato inizialmente vuota
for i in range(5):# 'extraímos' 5 números
# índice entre 0 e len(lst)-1
idx = randint(0,len(lst)-1)
# adicionemos aos resultados o número à
# posizione (causale) idx
[Link](lst[idx])
removemos o elemento da lista para
evitar que apareça novamente
[Link](idx)
retorno
Solução do exercício75
indovina_numero.py:
de random import randint
57
print"Adivinhado!"
quebrar
foriin range(len(guess)):
se num[i] == palpite[i]:
printnum[i],
elif int(num[i]) < int(guess[i]):
print'-'
caso contrário:
imprimir '+'
print’’
58
Capitolo 10
Numpy
59
1. y = sen(x) em [−π, π]
2. y = cos(x) em [−π, π]
3. y = log(x) em [1,100]
4. y= exem [0,5]
Defina as funções com três parâmetros opcionais: xmin, xmax e npts, número de pontos para
graficare. Escolham os valores padrão de maneira adequada, dependendo da função. Definir x
come vetor numpye calcular seus valores com a função linspace(). Lembre-se de usar
as funções seno, cosseno, logaritmo e exponencial, assim como π definidas no módulo numpy.
x3−30x2+ 2552
em 201 pontos no intervalo [−10,30] e fazer o gráfico.
Output atteso:
60
foram utilizadas as funções linspace(), fabs() e sin() do módulo numpy, plot(),
xlim(), ylim(), show()del modulo [Link] che sono stati graficati 201
pontos, escreva um breve programa em Python que reproduza o gráfico acima.
Exercício 86 Somma cumulativa:Escrever uma função Python que aceite como entrada
um array unidimensional numérico e calcular a soma cumulativa, definida como o array:
n
s[n] = X v[i] n= 0, . . . , N −1.
i=0
se houver pelo menos um elemento do valor absoluto da diferença que seja maior que 10−12 ,
retornar Falso;
Exemplo de saída:
>>> verifica_somma_cumulativa([Link](-10, [Link], 200)) * *
Verdadeiro
61
Solução do exercício76
somma_100_numpy.py:
importar numpy como np
arr = [Link](1,101)
[Link](arr)
Solução do exercício77
tabellina_numpy.py:
importar numpy como np
n = [Link](1,11)
para i em range(1,11):
imprimir *n
Solução do exercício78
thabit_np.py:
importar numpy como np
defthabit_np(maxn):
n = [Link](int(maxn)+1)
retornar3 2* n-1
**
Solução do exercício79
montante_numpy.py:
importar numpy como np
Solução do exercício80
numpy_sin_cos.py:
importar numpy como np
Solução do exercício81
1. plotsin_numpy.py:
importar numpy como np
importar [Link] como plt
62
y = [Link](x)
[Link](x,y)
[Link](x,y)
[Link]()
2. plotcos_numpy.py:
importar numpy como np
importar [Link] como plt
3. plotlog_numpy.py:
importar numpy como np
importar [Link] como plt
4. plotexp_numpy.py:
importar numpy como np
importar [Link] como plt
Solução do exercício82
c2f_graph_numpy.py:
importar [Link] como plt
importar numpy como np
63
Solução do exercício83
plot_poly.py:
importar numpy como np
importar [Link] como plt
dehornerimportar *
definir_plotagem_poligonal():
x = [Link](-10.,30.,201)
c = [Link]([1., -30., 0., 2552.])
y = horner(x, c)
[Link](x, y)
[Link]()
retornar
Solução do exercício84
plot_fabs_sin_np.py:
importar numpy como np
importar [Link] como plt
x=[Link](-2 [Link],2
* [Link],201)*
y=[Link]([Link](x))
[Link](x,y)
[Link](-2 [Link],
* 2 [Link]) *
[Link]([-1,2])
[Link]()
Solução do exercício85
crivello_eratostene_numpy.py
importnumpy as np
defcrivello_eratostene_numpy(maxn):
numeros = [Link](maxn+1)
limite = int([Link](maxn))
fornin intervalo(2, limite+1):
se numeros[n] != -1:
idx = [Link](n n, maxn+1,
* n)
numbers[idx] = -1
qp = ([Link](numbers[2:] != -1))[0]
returnnumbers[2+qp]
Solução do exercício86
somma_cumulativa.py:
importar numpy como np
defsomma_cumulativa(arr):
npts =len(arr)
sc = [Link](npts)
sc[0] = arr[0]
para i em range(1, npts):
sc[i] = sc[i-1]+arr[i]
retornos
64
Soluzione dell’esercizio 87
verifica_somma_cumulativa.py:
importar numpy como np
fromsomma_cumulativaimportar *
defverifica_somma_cumulativa(arr):
a1 = somma_cumulativa(arr)
a2 = [Link](arr)
ad = [Link](a1 - a2)
q = [Link](ad > 1e-12)
nq = len(q[0])
se ifnq != 0:
returnFalse
retornarVerdadeiro
65
Capítulo 11
66
Escrever uma função que calcule a área da parte preta na figura usando o método hit-or-
senhorita.
Procedimento:
escrever uma função que aceite dois parâmetros de entrada, img_namenome do arquivo de onde
ler os dados e npts número de pontos aleatórios a serem gerados;
atribuir a duas variáveis nre ncil o número de linhas e de colunas da imagem (como
deduzidos de [Link]
através da função where() encontrar os pontos onde ima[r,c] > 0 (acerto, ou seja, o ponto
cade nell’area nera);
atribuir a uma variável n_inil o número de tais pontos;
V= min{n|X 1+ X2 + . . .+ Xn1}
ou seja, se V`e o número n mínimo tal que a soma de n variáveis aleatórias independentes Xeu
uniformemente distribuidas en [0,1] si es mayor que 1, entonces el valor esperado de V es el número e,
ou seja, a base do logaritmo natural(Gnedenko (1978)).
Escreva uma função Python que implemente um método estocástico para calcular e.
Procedimento:
definir uma função que aceita um único parâmetro n, número de estimativas a serem geradas;
67
inicializar a zero duas variáveis: j, inteira, que conterá o número de dados aleatórios gerados
e arqué conterá a soma de tais números;
retornar a média dos valores armazenados na lista ln (usar a função sum() para
soma todos os valores e depois divide pela extensão da lista.
Exemplo de execução:
>>> natural_e_sim(1000)
2.702
>>> natural_e_sim(10000)
2.7215
>>> natural_e_sim(100000)
2.71853
68
Solução do exercício88
simple_goose.py:
importar numpy como np
importar [Link] como npr
defsimul_oca():
num_players = 4
finished = False
score = [Link](num_players)
enquanto não terminado:
dice = npr.random_integers(1, 6, num_players)
score += dado
print "Punteggio:", score
vitorias = [Link](pontuacao >= 63)
n_wins =len(score[wins])
se ifn_wins > 0:
max_score = [Link](score)
winner_idx = ([Link](score == max_score))[0]
winner = winner_idx[0]+1
finished = True
print "Punteggio finale: ", score
print"Vence o jogador:", vencedor
Solução do exercício89
area_macchianera.py:
importar numpy como np
importar [Link] como npr
defarea_macchianera(img_name, npts):
ima = [Link](img_name)
nr, nc = [Link]
r = npr.random_integers(0, nr-1, npts)
c = npr.random_integers(0, nc-1, npts)
q = ([Link](ima[r,c] > 0))[0]
n = len(q)
area =float(n)/npts nr nc * *
área de retorno
Solução do exercício90
natural_e_sim.py:
de aleatório importar aleatório
defnatural_e_sim(n):
ln = []
para i em range(n):
j = 0
r = 0,0
enquanto < 1.0:
j += 1
r += aleatório()
[Link](j)
retornar float(soma(ln))/len(ln)
69
Bibliografia
70
Este trabalho é distribuído sob uma licença Creative Commons Atribuição - Não Comercial -
Condividi allo stesso modo 4.0 Internacional
(CC BY-NC-SA 4.0).
Para ler a licença, visite[Link] o mandar
uma carta para a Creative Commons, PO Box 1866, Mountain View, CA 94042, EUA.
71