Partilhar: WhatsApp
aulify
UC UC00606 · T. Desenv. Software, T. Inform. Gestão

Ficha 01 · Variáveis, controlo, listas

Sintaxe básica Python, if/while/for, listas
Versão · Aluno
Tempo · 60 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Data
Objectivos da ficha

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