Ficha 01 · Variáveis, controlo, listas
- Aplicar sintaxe básica
- Usar if/while/for
- Manipular listas
- Escrever pequenos programas
Parte I · Sintaxe
Exercício 1 · Tipos e conversões (10 pts)
Indica o tipo do resultado de cada expressão:
a) 3 + 4 ___
b) 3 + 4.0 ___
c) "3" + "4" ___
d) int("3") + int("4") ___
e) "abc" * 3 ___
a) int — 7 b) float — 7.0 (int + float = float) c) str — "34" (concatenação) d) int — 7 e) str — "abcabcabc" (repetição)
Exercício 2 · Calcular IVA (10 pts)
Escreve um programa que: - Lê um preço sem IVA. - Calcula com IVA a 23%. - Imprime com 2 casas decimais.
preco_sem_iva = float(input("Preço sem IVA: "))
preco_com_iva = preco_sem_iva * 1.23
print(f"Preço com IVA: {preco_com_iva:.2f}€")
Parte II · Controlo
Exercício 3 · Classificar nota (15 pts)
Pede uma nota (0-20) e classifica: - 0-9: Insuficiente - 10-13: Suficiente - 14-16: Bom - 17-18: Muito Bom - 19-20: Excelente
Valida que a nota está entre 0 e 20.
nota = float(input("Nota (0-20): "))
if nota < 0 or nota > 20:
print("Nota inválida.")
elif nota < 10:
print("Insuficiente")
elif nota < 14:
print("Suficiente")
elif nota < 17:
print("Bom")
elif nota < 19:
print("Muito Bom")
else:
print("Excelente")
Exercício 4 · Tabuada (15 pts)
Imprime a tabuada do 7, do 1 ao 10, neste formato:
7 x 1 = 7
7 x 2 = 14
...
7 x 10 = 70
for i in range(1, 11):
print(f"7 x {i} = {7 * i}")
Exercício 5 · Adivinhar (15 pts)
Programa que escolhe um número aleatório entre 1 e 100 e permite ao utilizador adivinhar, dando dicas "maior" ou "menor". Termina quando acertar e mostra o número de tentativas.
import random
segredo = random.randint(1, 100)
tentativas = 0
while True:
palpite = int(input("Palpite (1-100): "))
tentativas += 1
if palpite == segredo:
print(f"Acertaste em {tentativas} tentativas!")
break
elif palpite < segredo:
print("Maior")
else:
print("Menor")
Parte III · Listas
Exercício 6 · Estatísticas (15 pts)
Lê uma sequência de números (separados por espaço) e mostra: - Soma, média, máximo, mínimo. - Quantos números pares.
entrada = input("Números separados por espaço: ")
nums = [int(x) for x in entrada.split()]
if not nums:
print("Lista vazia.")
else:
print(f"Soma: {sum(nums)}")
print(f"Média: {sum(nums) / len(nums):.2f}")
print(f"Máximo: {max(nums)}")
print(f"Mínimo: {min(nums)}")
pares = sum(1 for n in nums if n % 2 == 0)
print(f"Pares: {pares}")
Exercício 7 · Inverter sem reversed (10 pts)
Inverte uma lista sem usar reversed() ou [::-1]:
def inverter(lst):
resultado = []
for i in range(len(lst) - 1, -1, -1):
resultado.append(lst[i])
return resultado
# Alternativa
def inverter_v2(lst):
resultado = []
for item in lst:
resultado.insert(0, item)
return resultado
print(inverter([1, 2, 3, 4])) # [4, 3, 2, 1]
Exercício 8 · Filtrar emails (10 pts)
Dada uma lista de strings, devolve apenas as que parecem emails (contêm @ e .):
def filtrar_emails(strs):
return [s for s in strs if "@" in s and "." in s]
dados = ["ana@ex.pt", "joao", "pedro@email.com", "lixo", "sem.arroba.pt"]
print(filtrar_emails(dados))
# ["ana@ex.pt", "pedro@email.com"]
Versão básica sem comprehension:
def filtrar_emails(strs):
res = []
for s in strs:
if "@" in s and "." in s:
res.append(s)
return res