đ ExercĂcios â CapĂtulo 4#
Subalgoritmos#
4.2 MĂłdulos em Python#
ExercĂcio 4.1 - Tabela com tangente#
Expanda a tabela de senos e cossenos para incluir tambĂ©m a tangente, usando a função math.tan(). Cuidado! VocĂȘ tem de se preocupar com as tangentes de 90 e 270 graus. Por quĂȘ? Trate estes casos especiais, evitando incorrer em erro. Use math.inf e -math.inf para indicar valores infinitos, positivos e negativos.
Ver solução
ExercĂcio â Senos e cossenos#
# Cria uma tabela com os valores de seno e cosseno e tangente
# de Ăąngulos entre 0 e 360 graus, a cada 30 graus.
import math
print("Ăngulo\tSeno\tCosseno\tTangente")
for angulo in range(0, 361, 30):
seno = math.sin(math.radians(angulo))
cosseno = math.cos(math.radians(angulo))
# Verificamos se o Ăąngulo Ă© 90 ou 270 (onde a tangente Ă© indefinida)
# Usamos o resto da divisĂŁo por 180 para pegar 90, 270, 450...
if angulo % 180 == 90:
# Definimos como inf ou -inf baseado no sinal do seno
tangente = float('inf') if seno > 0 else float('-inf')
else:
tangente = math.tan(math.radians(angulo))
print(f"{angulo:>3}\t{seno:>5.2f}\t{cosseno:>5.2f}\t{tangente:>5.2f}")
ExercĂcio 4.2 â RaĂzes quadradas#
Escreva um programa que imprima uma tabela das raĂzes quadradas dos nĂșmeros entre 10 e 100, com incrementos de 10.
Ver solução
ExercĂcio â RaĂzes quadradas#
# Programa que imprime uma tabela das raĂzes quadradas dos nĂșmeros
# entre 10 e 100, com incrementos de 10.
import math
print("NĂșmero\tRaiz Quadrada")
for numero in range(10, 101, 10):
raiz_quadrada = math.sqrt(numero)
print(f"{numero}\t{raiz_quadrada:.2f}")ExercĂcio 4.3 â Quadrado e cubo#
Escreva um programa em Python que leia um nĂșmero e imprima a si mesmo, o seu quadrado e o seu cubo.
Ver solução
ExercĂcio â Quadrado e cubo#
# Programa em Python que lĂȘ um nĂșmero e imprime a si mesmo,
# o seu quadrado e o seu cubo.
import math
# lĂȘ o nĂșmero
numero = float(input("Digite um nĂșmero: "))
# calcula o quadrado e o cubo
quadrado = numero ** 2
cubo = numero ** 3
# imprime o resultado
print("NĂșmero:", numero)
print("Quadrado:", math.pow(numero, 2))
print("Cubo:", math.pow(numero, 3))Este exercĂcio foi pensado para usar o mĂłdulo math, porĂ©m uma solução mais imediata e mais eficiente poderia ser:
# Programa em Python que lĂȘ um nĂșmero e imprime a si mesmo,
# o seu quadrado e o seu cubo.
# lĂȘ o nĂșmero
numero = float(input("Digite um nĂșmero: "))
# calcula o quadrado e o cubo
quadrado = numero ** 2
cubo = numero ** 3
# imprime o resultado
print("NĂșmero:", numero)
print("Quadrado:", quadrado)
print("Cubo:", cubo)ExercĂcio 4.4 - FunçÔes de math#
Pesquise no manual on-line de Python outras funçÔes matemĂĄticas do mĂłdulo math, disponĂvel em: https://docs.python.org/3/library/index.html.
4.3 FunçÔes#
ExercĂcio 4.5 â Figura com asteriscos#
Escreva um programa capaz de criar outras formas, usando uma função semelhante à que imprimiu a årvore.
Ver solução
ExercĂcio â Figura com asteriscos#
# Programa que imprime uma figura usando asteriscos
# nĂșmero de linhas da figura
n = 5
# imprime a figura
for i in range(1, n + 1):
for j in range(1, i + 1):
print("*", end="")
print()
for i in range(n - 1, 0, -1):
for j in range(1, i + 1):
print("*", end="")
print()
ExercĂcio 4.6 â Ărvore de natal (for)#
Modifique o programa da ĂĄrvore de natal para usar comandos for in range() em vez de escrever explicitamente cada linha. VocĂȘ vai precisar de 4 laços com for para desenhar a mesma ĂĄrvore.
Ver solução
ExercĂcio â Ărvore de natal (for)#
# Programa que imprime ĂĄrvore de natal com comandos for in range()
# em vez de escrever explicitamente cada linha.
# Usa 5 laços com for para desenhar a årvore.
def imprime_linha(n1, carac1, n2, carac2):
print(carac1 * n1 + carac2 * n2)
def imprime_arvore():
# 1. Topo (@) e primeira camada de folhas (1, 3, 5)
for i in range(1, 6, 2):
char = '@' if i == 1 else '*'
imprime_linha((11 - i) // 2, ' ', i, char)
# 2. Segunda camada de folhas (3, 5, 7, 9)
for i in range(3, 10, 2):
imprime_linha((11 - i) // 2, ' ', i, '*')
# 3. Terceira camada de folhas(5, 7, 9)
for i in range(5, 10, 2):
imprime_linha((11 - i) // 2, ' ', i, '*')
# 4. Quarta camada - a base mais larga (7, 9, 11)
for i in range(7, 12, 2):
imprime_linha((11 - i) // 2, ' ', i, '*')
# 5. O tronco da ĂĄrvore (3, 5)
for i in range(3, 6, 2):
imprime_linha((11 - i) // 2, ' ', i, '|')
imprime_arvore()ExercĂcio 4.7 â Conceito#
Escreva uma função que dada uma nota entre 0.0 e 10.0 imprima na tela um conceito entre âAâ e âEâ, segundo a tabela:
A â„ 9.0; 9.0 > B â„ 8.0; 8.0 > C â„ 7.0; 7.0 > D â„ 5.0; E < 5.0.
O que acontece com o seu programa se for digitada nota menor que zero ou maior que dez?
Ver solução
ExercĂcio â Conceito#
# Função que dada uma nota entre 0.0 e 10.0 imprime na tela um
# conceito entre âAâ e âEâ, segundo a tabela:
# A â„ 9.0 9.0 > B â„ 8.0 8.0 > C â„ 7.0 7.0 > D â„ 5.0 E < 5.0
# Se nota for menor que 0 ou maior que 10 imprime nota invĂĄlida
def conceito(nota):
if nota < 0.0 or nota > 10.0:
return "Nota invĂĄlida"
elif nota >= 9.0:
return 'A'
elif nota >= 8.0:
return 'B'
elif nota >= 7.0:
return 'C'
elif nota >= 5.0:
return 'D'
else:
return 'E'
# Testando a função com algumas notas
notas_teste = [9.5, 8.5, 7.5, 6.0, 4.5, -1.0, 10.5]
print(f"Nota: {9.5} -> Conceito: {conceito(9.5)}")
print(f"Nota: {8.5} -> Conceito: {conceito(8.5)}")
print(f"Nota: {7.5} -> Conceito: {conceito(7.5)}")
print(f"Nota: {6.0} -> Conceito: {conceito(6.0)}")
print(f"Nota: {4.5} -> Conceito: {conceito(4.5)}")
print(f"Nota: {-1.0} -> Conceito: {conceito(-1.0)}")
print(f"Nota: {10.5} -> Conceito: {conceito(10.5)}")
print()
ExercĂcio 4.8 â Quadrado de um nĂșmero#
Escreva uma função que receba um valor inteiro e devolva seu quadrado.
Ver solução
ExercĂcio â Quadrado#
# Função que recebe um nĂșmero inteiro e devolve seu quadrado
def quadrado(numero):
return numero * numero
# lĂȘ um nĂșmero do usuĂĄrio
num = int(input("Digite um nĂșmero: "))
# imprime o quadrado do nĂșmero
print("O quadrado de", num, "Ă©", quadrado(num))
print()ExercĂcio 4.9 - Temperatura em Fahrenheit#
Escreva uma função fahrenheit(celsius) que receba um valor de uma temperatura Celsius e devolva seu equivalente em Fahrenheit. Usando esta função, imprima os valores equivalentes das temperaturas Celsius em Fahrenheit entre 0 e 100, com incrementos de 10. Use a fórmula: F = C * (9/5) + 32
Ver solução
ExercĂcio â Temperatura em Fahrenheit#
# Função que recebe valor em Celsius e devolve em Fahrenheit
def celsius_para_fahrenheit(celsius):
return (celsius * 9/5) + 32
# Imprime tabela de conversĂŁo de Celsius para Fahrenheit entre
# 0 e 100 com intervalos de 10 graus
print("Celsius\tFahrenheit")
for celsius in range(0, 101, 10):
fahrenheit = celsius_para_fahrenheit(celsius)
print(f"{celsius}\t{fahrenheit:.1f}")
print()ExercĂcio 4.10 - Celsius#
Escreva uma função celsius(fahrenheit) que receba um valor de uma temperatura Fahrenheit e devolva seu equivalente em Celsius. Usando esta função, imprima os valores equivalentes das temperaturas Fahrenheit em Celsius entre 0 e 300, com incrementos de 10. Coloque comandos para que o usuĂĄrio escolha os valores de inĂcio, fim e passo que serĂŁo usados como argumentos da função.
Ver solução
ExercĂcio â Celsius#
# Função que converte Fahrenheit para Celsius
def celsius(fahrenheit):
return (fahrenheit - 32) * 5 / 9
# LĂȘ os valores do usuĂĄrio
inicio = int(input("Digite o valor de inĂcio: "))
fim = int(input("Digite o valor de fim: "))
passo = int(input("Digite o passo: "))
# Imprime a tabela de conversĂŁo
print("Fahrenheit\tCelsius")
for fahrenheit in range(inicio, fim + 1, passo):
celsius_value = celsius(fahrenheit)
print(f"{fahrenheit}\t{celsius_value:.1f}")
print()ExercĂcio 4.11 â DistĂąncia#
Escreva uma função distancia(x1, y1, x2, y2) que devolva a distùncia entre dois pontos cujas coordenadas cartesianas são (x1, y1) e (x2, y2).
Ver solução
ExercĂcio â DistĂąncia#
# Função distancia(x1, y1, x2, y2) que devolve a
# distĂąncia entre dois pontos cujas coordenadas cartesianas sĂŁo
# (x1, y1) e (x2, y2).
import math
def distancia(x1, y1, x2, y2):
return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
# Testando a função com alguns pontos
print(f"DistĂąncia entre ({0}, {0}) e ({3}, {4}): {distancia(0, 0, 3, 4):.2f}")
print(f"DistĂąncia entre ({1}, {2}) e ({4}, {6}): {distancia(1, 2, 4, 6):.2f}")
print(f"DistĂąncia entre ({-1}, {-1}) e ({2}, {3}): {distancia(-1, -1, 2, 3):.2f}")
print()4.4 FunçÔes que Retornam mais de um Resultado#
ExercĂcio 4.12 â Pi com mais pontos#
Modifique o programa que calcula pi para perguntar diversas vezes pelo nĂșmero de pontos a serem sorteados, calculando pi para cada pedido. O programa deve terminar quando for digitado â0â.
Ver solução
ExercĂcio â Pi com mais pontos#
import random as r
import math as m
def gera_coordenadas_aleatorias():
"""Gera par de coordenadas aleatĂłrias."""
x = r.random()
y = r.random()
return x, y
def coordenadas_dentro_circulo(x, y):
"""Testa se coordenadas estĂŁo dentro do cĂrculo de raio 1."""
return m.hypot(x, y) < 1
def calcula_pi(n):
"""Calcula pi e o erro associado a partir de n pontos."""
conta_circulo = 0
for i in range(n):
x, y = gera_coordenadas_aleatorias()
if coordenadas_dentro_circulo(x, y):
conta_circulo += 1
pi = 4 * conta_circulo / n
erro = m.fabs(pi - m.pi)
return pi, erro
# Calcula pi a partir de um nĂșmero de pontos sorteados.
# O nĂșmero de pontos Ă© lido do usuĂĄrio.
# Repete o processo até o usuårio escolher 0 pontos.
# Imprime o valor de pi e o erro associado a cada cĂĄlculo.
while True:
num = int(input('Quantos pontos devem ser sorteados? '))
if num == 0:
break
pi, erro = calcula_pi(num)
print(f'Com {num} pontos, o valor de pi Ă© {pi} com erro {erro}')ExercĂcio 4.13 â Dado de 6 lados#
Use o módulo random para simular o lançamento de um dado de 6 lados. Use a função randint().
Ver solução
ExercĂcio â Dado de 6 lados#
# Use o módulo random para simular o lançamento de um dado de 6 lados.
# Use a função randint().
import random as r
def lancar_dado():
"""Simula o lançamento de um dado de 6 lados."""
return r.randint(1, 6)
# Lança o dado 10 vezes e imprime os resultados.
for i in range(10):
resultado = lancar_dado()
print(f"Lançamento {i + 1}: {resultado}")
print()4.6 Global ou Local#
ExercĂcio 4.15#
Identifique as variĂĄveis globais e locais do Programa 4.16.
Ver solução
ExercĂcio â VariĂĄveis globais e locais#
VariĂĄveis globais#
No nĂvel do mĂłdulo (fora de funçÔes):
- r â mĂłdulo random
- m â mĂłdulo math
- num â valor lido do input
- pi â resultado retornado por calcula_pi
- erro â resultado retornado por calcula_pi
đ Observação importante: pi aqui nĂŁo Ă© o mesmo pi dentro da função, sĂŁo variĂĄveis distintas em escopos diferentes.
VariĂĄveis locais#
- Em gera_coordenadas_aleatorias()
- x
- y
- Em coordenadas_dentro_circulo(x, y)
- x (parĂąmetro)
- y (parĂąmetro)
- Em calcula_pi(n)
- n (parĂąmetro)
- conta_circulo
- i (variĂĄvel do for)
- x
- y
- pi
- erro
Obs:#
-
Parùmetros também são variåveis locais: parùmetros são criados no frame da função, como variåveis locais.
-
Mesmos nomes â mesma variĂĄvel: Temos:
pi = 4*conta_circulo/n # dentro da funçãoe depois
pi, erro = calcula_pi(num)đ Isso Ă© sombreamento de nomes, nĂŁo compartilhamento.
-
r e m nĂŁo sĂŁo âvariĂĄveis comunsâ: Tecnicamente sĂŁo nomes globais ligados a objetos mĂłdulo e nĂŁo fazem parte da pilha de execução
Resumindo:
| Nome | Escopo | Tipo |
|---|---|---|
| r | global | mĂłdulo |
| m | global | mĂłdulo |
| num | global | inteiro |
| n | local (parĂąmetro) | inteiro |
| x, y | locais | float |
| conta_circulo | local | inteiro |
| pi | local/global | float |
| erro | local/global | float |
4.7 Tente outra Vez#
ExercĂcio 4.16#
Escreva um programa que crie uma lista com 3 elementos e peça ao usuĂĄrio um Ăndice de um elemento a ser impresso. Se o usuĂĄrio pedir um Ăndice fora da faixa de valores permitidos (abaixo de zero ou acima de 2), o programa deve emitir uma mensagem de erro (Use a exceção IndexError).
Ver solução
ExercĂcio â Tente outra vez#
# Escreva um programa que crie uma lista com 3 elementos e peça ao usuårio um
# Ăndice de um elemento a ser impresso. Se o usuĂĄrio pedir um Ăndice fora da faixa
# de valores permitidos (abaixo de zero ou acima de 2), o programa deve emitir
# uma mensagem de erro (Use a exceção IndexError).
# Criando uma lista com 3 elementos
minha_lista = ["Banana", "Maçã", "Goiaba"]
# Pedindo ao usuĂĄrio um Ăndice
indice = int(input("Digite o Ăndice do elemento a ser impresso (0-2): "))
# Tentando acessar o elemento na posição especificada
try:
print(minha_lista[indice])
except IndexError:
print("Erro: Ăndice fora da faixa permitida.")
print()
#ExercĂcio 4.17#
Modifique o programa anterior para que o mesmo capture também a exceção ValueError da entrada de dados pelo usuårio.
Ver solução
ExercĂcio â Tente outra vez (ValueError)#
# Modifique o programa anterior para que o mesmo capture também a exceção
# ValueError da entrada de dados pelo usuĂĄrio.
# Criando uma lista com 3 elementos
minha_lista = ["Banana", "Maçã", "Goiaba"]
# Pedindo ao usuĂĄrio um Ăndice
try:
indice = int(input("Digite o Ăndice do elemento a ser impresso (0-2): "))
# Tentando acessar o elemento na posição especificada
print(minha_lista[indice])
except IndexError:
print("Erro: Ăndice fora da faixa permitida.")
except ValueError:
print("Erro: Entrada invĂĄlida. Por favor, digite um nĂșmero inteiro.")
print()Quer ir além?#
Se vocĂȘ quiser se desafiar com novos problemas, sem solução disponĂvel: