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)
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)
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:
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
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())