Exercício 09-38:

Modifique o programa anterior para que leia o mesmo arquivo, permitindo adicionar mais dados ao arquivo. Se o mesmo nome for digitado duas vezes, altere os dados para a nova entrada.

Resposta:

##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
#
# Arquivo: capitulo 09/exercicio-09-38.py
##############################################################################
import json
import os


def ler_notas():
    notas = []
    for i in range(4):
        nota = float(input(f"Digite a {i+1}ª nota: "))
        notas.append(nota)
    return notas


def carregar_dados():
    # Se o arquivo não existir, retorna uma lista vazia
    if not os.path.exists("aluno_notas.json"):
        return []

    try:
        with open("aluno_notas.json", "r") as arquivo:
            return json.load(arquivo)
    except json.JSONDecodeError:
        return []


# Leitura dos dados existentes
alunos = carregar_dados()

# Leitura dos novos dados
nome = input("Digite o nome do aluno: ")
notas = ler_notas()

# Criação do dicionário com os novos dados
novo_aluno = {"nome": nome, "notas": notas}

# Verifica se o aluno já existe e atualiza, ou adiciona novo aluno
aluno_existente = False
for i, aluno in enumerate(alunos):
    if aluno["nome"] == nome:
        alunos[i] = novo_aluno
        aluno_existente = True
        break

if not aluno_existente:
    alunos.append(novo_aluno)

# Salvando todos os dados no arquivo JSON
with open("aluno_notas.json", "w") as arquivo:
    json.dump(alunos, arquivo, indent=4)

print("Dados do aluno salvos com sucesso no arquivo 'aluno_notas.json'.")
Clique aqui para baixar o arquivo