Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Resolvendo desafios de programação com o loop while

i = 0
while  i < len(lista_de_medias):
    lista_de_medias[i] += 1
    if lista_de_medias[i] > 10:
      lista_de_medias[i] = 10
    i += 1


print(lista_de_medias)
2 respostas
solução!

Olá, Marcelo. Como vai?

Parabéns pela resolução do desafio! O seu algoritmo está muito bem estruturado e resolve o problema proposto com extrema precisão. Você utilizou o laço while de forma impecável para percorrer a lista de médias, incrementando os valores e aplicando uma estrutura condicional lógica perfeita para garantir que nenhuma nota ultrapasse o limite máximo de 10.

O controle do índice através da variável i e o incremento i += 1 ao final do bloco estão posicionados corretamente, o que evita o maior risco ao trabalhar com esse tipo de laço: o temido loop infinito.

Como você está estudando Inteligência Artificial Aplicada e conectando o Python com o Google Colab, quero aproveitar o seu código para compartilhar duas ótimas práticas de mercado e de engenharia de software:

1. Otimização com Funções Nativas (min)

Em projetos de IA e Ciência de Dados, buscamos sempre escrever códigos o mais limpos e performáticos possíveis. No seu bloco de código, você usou uma estrutura de if com três linhas para garantir o teto da nota:

if lista_de_medias[i] > 10:
    lista_de_medias[i] = 10

No Python, podemos substituir toda essa validação condicional usando a função nativa min(). Ela compara dois valores e retorna sempre o menor deles. Veja como o miolo do seu while ficaria mais compacto:

while i < len(lista_de_medias):
    # O min garante que se a nota + 1 for maior que 10, o 10 será o escolhido
    lista_de_medias[i] = min(lista_de_medias[i] + 1, 10)
    i += 1

2. O Estilo "Pythônico" (List Comprehension)

Embora o laço while funcione perfeitamente para essa atividade, no dia a dia da manipulação de dados em IA, a comunidade Python prefere utilizar construções chamadas List Comprehensions para transformar listas. Elas realizam exatamente a mesma operação que o seu laço, mas fazem isso de forma vetorizada, em apenas uma única linha e com melhor performance computacional.

Integrando a função min que aprendemos acima com uma List Comprehension, o seu desafio inteiro poderia ser reescrito de forma elegante assim:

# Criando uma nova lista com as médias atualizadas em uma única linha
lista_de_medias = [min(media + 1, 10) for media in lista_de_medias]

print(lista_de_medias)

Dominar o laço while é fundamental para entender o controle de fluxos assíncronos, mas começar a adotar essas abordagens mais diretas ajudará muito quando você passar a manipular grandes volumes de dados ou interagir com APIs de modelos de linguagem dentro do Google Colab.

Espero que possa ter lhe ajudado!

Obrigado pelo feeback Sensacional as outras formas, e eu estava pesquisando e existe um forma vetorizada, fiquei curioso com essa questão da performance em listas grandes:

import pandas as pd

series_medias = pd.Series([8.9, 7.5, 4.2, 1.4, 9.5])

# Operação vetorizada
series_medias = (series_medias + 1).clip(upper=10)

print(series_medias.tolist())