Implementar um programa de gerenciamento de high scores. O programa deve:
posicionar os dados do usuário na tabela de highest scores (max. 5) e regravar no arquivo.
posicionar os dados do usuário na tabela de highest scores (max. 5) e regravar no arquivo.
Passo 1
Beleza, o que o enunciado pede é criar um programa que mantenha um “ranking” (top 5) de pontuações (“high scores”), colocando o usuário na posição correta e salvando tudo de volta num arquivo.
Conteúdo: manipulação de arquivo, listas/vetores, ordenação (inserção num ranking).
O que vamos precisar:
Conteúdo: manipulação de arquivo, listas/vetores, ordenação (inserção num ranking).
O que vamos precisar:
- Ler o arquivo que armazena até 5 pares (nome, pontuação).
- Inserir o novo par (nome, pontuação) nessa lista.
- Ordenar a lista em ordem decrescente de pontuação.
- Manter só os 5 maiores.
- Reescrever o arquivo com o ranking atualizado.
Passo 2
Lendo e parseando o arquivo:
- Abrir o arquivo em modo de leitura.
- Para cada linha, separar o nome da pontuação (por exemplo, “João 250”).
- Guardar isso numa lista de tuplas: scores = [(“João”,250), (“Maria”,300), …].
Teoria: a gente precisa converter a string da pontuação para número inteiro usandoint()
, assim dá pra comparar números corretamente.
Passo 3
Inserindo o novo usuário e ordenando:
- Recebo do usuário algo como
novo = (“Você”, 275)
. - Faço
scores.append(novo)
. - Uso um método de ordenação que compara o segundo item da tupla (a pontuação):
Teoria: okey=lambda x: x[1]
diz “compare pelo elemento índice 1 da tupla” ereverse=True
inverte pra ordem decrescente.
Passo 4
Mantendo só o top 5 e salvando:
- Faço
top5 = scores[:5]
— isso pega os cinco primeiros elementos da lista já ordenada. - Abro o arquivo em modo de escrita (isso apaga o que tinha antes).
- Para cada
(nome,pontos)
emtop5
, gravo uma linha"nome pontos\n"
.
Teoria: ao abrir em modo"w"
, garantimos que o arquivo só terá o ranking atualizado.
Resposta
Segue o esqueleto em Python estilo “amigo explicando”:
def atualiza_highscores(arquivo, novo_nome, nova_pontuacao):
# Lê o arquivo
with open(arquivo, "r") as f:
lines = f.readlines()
# Parseia em lista de tuplas
scores = []
for line in lines:
nome, pts = line.split()
scores.append((nome, int(pts)))
# Adiciona novo e ordena decrescente
scores.append((novo_nome, nova_pontuacao))
scores.sort(key=lambda x: x[1], reverse=True)
# Mantém só top 5
top5 = scores[:5]
# Regrava no arquivo
with open(arquivo, "w") as f:
for nome, pts in top5:
f.write(f"{nome} {pts}\n")
# Exemplo de uso:
# atualiza_highscores("highscores.txt", "Você", 275)
Essa função lê o ranking, insere o novo score, ordena, mantém só cinco e reescreve o arquivo.