Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

(25. Python: Inteligência Artificial Aplicada ) Faça como eu fiz: API e Dados em Python

# Configura Gemini
import os
from google.colab import userdata

# API Key armazenada nos Secrets do Google Colab
os.environ['GOOGLE_API_KEY'] = userdata.get('IA-Aplicada')

# Importa SDK do Gemini
from google import genai

# Cria cliente
client = genai.Client()

# Utiliza generate_content com Gemini 2.5 Flash
resposta = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="O que é a Inteligência Artificial?"
)

# Exibe resposta
print(resposta.text)

# Variável de controle
n = 1

# Loop while
while n <= 5:

    # Exibe símbolo
    print("*")

    # Incrementa variável
    n += 1

# Cria chat
chat = client.chats.create(model="gemini-2.5-flash")

# Recebe pergunta
prompt = input("Digite sua pergunta: ")
print("\n")

# Chat interativo
while prompt != "fim":

    # Envia pergunta
    resposta_chat = chat.send_message(prompt)

    # Exibe resposta
    print(resposta_chat.text)
    print("\n")

    # Nova pergunta
    prompt = input("Digite sua pergunta: ")
    print("\n")

# Histórico da conversa
print("Histórico das interações:\n")

for mensagem in chat.get_history():
    print(mensagem)

# Lista de nomes
lista_de_nomes = [
    "Maria Silva",
    "João Santos",
    "Ana Oliveira",
    "Pedro Costa",
    "Juliana Pereira"
]

# Lista de médias
lista_de_medias = [
    8.9,
    7.5,
    4.2,
    1.4,
    9.5
]

# Acessa índice
print(lista_de_nomes[2])

# Utiliza slice
print(lista_de_nomes[1:4])

# Índice inicial
indice = 0

# Percorre lista
while indice < len(lista_de_medias):

    # Incrementa nota sem ultrapassar 10
    if lista_de_medias[indice] + 1 <= 10:
        lista_de_medias[indice] += 1
    else:
        lista_de_medias[indice] = 10

    # Exibe nota
    print(lista_de_medias[indice])

    # Próximo índice
    indice += 1

# Dicionário com nome e média
dict_de_nomes_e_medias = {
    "Maria Silva": lista_de_medias[0],
    "João Santos": lista_de_medias[1],
    "Ana Oliveira": lista_de_medias[2],
    "Pedro Costa": lista_de_medias[3],
    "Juliana Pereira": lista_de_medias[4]
}

# Exibe valores do dicionário
print(dict_de_nomes_e_medias)

# Lista de dicionários
lista_de_alunos = [

    {"nome": "Maria Silva", "media": lista_de_medias[0]},

    {"nome": "João Santos", "media": lista_de_medias[1]},

    {"nome": "Ana Oliveira", "media": lista_de_medias[2]},

    {"nome": "Pedro Costa", "media": lista_de_medias[3]},

    {"nome": "Juliana Pereira", "media": lista_de_medias[4]}
]

# Exibe primeiro aluno
print(lista_de_alunos[0]["nome"])
print(lista_de_alunos[0]["media"])
1 resposta

Olá, Eduardo. Como vai?

O seu código ficou excelente, muito bem comentado e estruturado! É ótimo ver como você conseguiu unir a base fundamental da programação em Python (como listas, fatiamentos, laços de repetição e dicionários) com o uso prático da API moderna do Gemini utilizando o novo SDK google-genai.

Gostaria de destacar duas ótimas práticas que você aplicou no seu script:

  • Segurança de API com Colab Secrets: Usar userdata.get('IA-Aplicada') para recuperar a chave de API nos Secrets do Google Colab é uma excelente medida de segurança. Evitar colocar chaves de API expostas diretamente em texto plano no código impede o vazamento acidental das suas credenciais caso você decida compartilhar o seu notebook com outras pessoas ou salvá-lo em um repositório público no GitHub.
  • Controle de Chat com Histórico: Criar um loop interativo utilizando client.chats.create e chat.send_message(prompt) é o método ideal para manter o contexto das mensagens. Ao usar o objeto chat, o SDK gerencia o envio de todo o histórico a cada nova interação de forma nativa, poupando você de ter que programar esse armazenamento de forma manual.

Para contribuir com o seu aprendizado e trazer duas dicas técnicas que tornam o seu código ainda mais legível e "pythônico" (alinhado com as melhores práticas de desenvolvimento em Python), deixo as seguintes sugestões de refatoração para a etapa de manipulação dos dados das listas:

  • Uso do enumerate() em vez de controle manual do índice:
    No trecho onde você percorre e altera a lista de médias, você utilizou um loop while controlando e incrementando a variável indice. Em Python, o mais recomendado é utilizar o laço for junto com a função embutida enumerate(). Ela nos fornece tanto o índice quanto o elemento atual da lista de forma totalmente automática, eliminando o risco de causarmos um loop infinito por esquecimento da instrução de incremento. Além disso, podemos usar a função min() para garantir de forma limpa que a média nunca ultrapasse o valor limite de 10:
# Atualizando as médias de forma mais dinâmica
for indice, media in enumerate(lista_de_medias):
    lista_de_medias[indice] = min(media + 1, 10.0)
    print(lista_de_medias[indice])
  • Criação dinâmica da lista de dicionários usando zip():
    Para criar a sua lista lista_de_alunos, você mapeou manualmente cada dicionário de forma estática. Quando lidamos com conjuntos de dados extensos em ciência de dados ou IA, o mapeamento manual se torna inviável. Podemos resolver isso combinando as listas lista_de_nomes e lista_de_medias em um único passo dinâmico usando a função zip() em conjunto com uma técnica chamada list comprehension:
# Criando a lista de dicionários dinamicamente
lista_de_alunos_dinamica = [
    {"nome": nome, "media": media} 
    for nome, media in zip(lista_de_nomes, lista_de_medias)
]

print(lista_de_alunos_dinamica)

A função zip() emparelha os itens de duas ou mais listas com base no mesmo índice correspondente de forma automatizada e muito rápida.

Parabéns pela dedicação na construção das atividades práticas e pela organização do código compartilhado!

Espero que possa ter lhe ajudado!