3
respostas

[Projeto] Desafio: hora da pratica

  1. Criar um dicionário que represente um aluno, com uma lista de notas, e mostre a média de suas notas na tela.
// Exercicio 01

Dictionary<string, List<int>> notasAlunos = new Dictionary<string, List<int>>();
notasAlunos.Add("Victor", new List<int> { 5, 5, 5, 5, 5 });
notasAlunos.Add("Joana", new List<int> { 10, 9, 9 });

MediaAlunos();

void MediaAlunos()
{
    foreach (var aluno in notasAlunos)
    {
        Console.WriteLine($"Aluno: {aluno.Key}");
        //int soma = 0; // Calculo manual da media
        //foreach (int nota in aluno.Value)
        //{
        //    soma += nota;

        //}
        //double media = (double)soma / aluno.Value.Count;
        //Console.WriteLine($"Media = {media}");
        double media = 0;
        foreach (var nota in aluno.Value) //Calculo otimizado com Average()
        {
            media = aluno.Value.Average();
        }
        Console.WriteLine($"Media = {media}\n");
    }
}

void InsereNota()
{
    Console.Write("Digite o nome do aluno: ");

    string nomeAluno = Console.ReadLine()!;
    if (notasAlunos.ContainsKey(nomeAluno))
    {
        Console.Write($"Digite a nota para o aluno {nomeAluno}: ");
        //int nota = int.Parse(Console.ReadLine()!); // Se digitar algo alem de numero = Exception
        int.TryParse(Console.ReadLine()!, out int nota); // Se digitar algo alem de numero = 0        
        notasAlunos[nomeAluno].Add(nota);
    }
    else
    {
        Console.WriteLine("Aluno desconhecido");
    }
}
  1. Criar um programa que gerencie o estoque de uma loja. Utilize um dicionário para armazenar produtos e suas quantidades em estoque e mostre, a partir do nome de um produto, sua quantidade em estoque.
// Exercicio 02

Dictionary<string, int> estoqueLoja = new Dictionary<string, int>();
estoqueLoja.Add("Lapis", 10);
estoqueLoja.Add("Caneta", 5);
estoqueLoja.Add("Borracha", 10);

MostrarProduto();

void MostrarProduto()
{
    Console.WriteLine("Lista de produtos\n");
    foreach(var prod in estoqueLoja)
    {
        Console.WriteLine(prod.Key);
    }
    
    Console.Write($"\nDigite o nome do produto que deseja consultar o estoque: ");
    string nomeProduto = Console.ReadLine()!;
    if (estoqueLoja.ContainsKey(nomeProduto))
    {
        Console.WriteLine($"\nProduto: {nomeProduto}, unidades: {estoqueLoja[nomeProduto]}.");
    }
    else
    {
        Console.WriteLine("Produto inexistente.");
    }
}
  1. Crie um programa que implemente um quiz simples de perguntas e respostas. Utilize um dicionário para armazenar as perguntas e as respostas corretas. Fiz 2 formas, permitindo o user escolher a pergunta ou passar por todas as perguntas do dicionario
// Exercicio 03 - versao 1.0 (Quiz)
Dictionary<string, string> quizPerguntas = new Dictionary<string, string>
{
    { "Qual sua cor favorita?", "Azul" },
    { "Qual a cor da grama?", "Verde" },
    { "Qual o maior mamifero do planeta?", "Baleia" }
};

QuizPergsRespostas();

void QuizPergsRespostas()
{
    int i = 1;
    foreach(var pergunta in quizPerguntas)
    {
        Console.WriteLine($"{i} | {pergunta.Key}");
        i++;
    }

    Console.Write("\nDigite o numero da sua pergunta: ");
    string numPerguntaStr = Console.ReadLine()!;
    int numPergunta = int.Parse(numPerguntaStr);

    var perg = string.Empty;
    switch (numPergunta)
    {
        case 1:
            perg = quizPerguntas.Keys.ElementAt(0);
            break;
        case 2:
            perg = quizPerguntas.Keys.ElementAt(1);
            break;
        case 3:
            perg = quizPerguntas.Keys.ElementAt(2);
            break;
        default:
            break;
    }

    Console.WriteLine($"\nPergunta: {perg}");
    string respUsuario = Console.ReadLine()!;

    if (string.Equals(respUsuario, quizPerguntas[perg], StringComparison.OrdinalIgnoreCase))
    {
        Console.WriteLine($"Parabens, voce acertou.");
    }
    else
    {
        Console.WriteLine($"Voce errou.");
        Console.WriteLine($"Resposta: {quizPerguntas[perg]}");
    }

Dictionary<string, string> quizPerguntas = new Dictionary<string, string>
{
    { "Qual sua cor favorita?", "Azul" },
    { "Qual a cor da grama?", "Verde" },
    { "Qual o maior mamifero do planeta?", "Baleia" }
};

QuizPergsRespostas();

void QuizPergsRespostas()
{
    int i = 1;
    foreach(var perg in quizPerguntas)
    {
        Console.WriteLine($"{i}| {perg.Key}");
        i++;
        Console.Write("Resp: ");
        string respUser = Console.ReadLine()!;

        if (string.Equals(respUser, perg.Value, StringComparison.OrdinalIgnoreCase ))
        {
            Console.WriteLine("Correto\n");
        }
        else
        {
            Console.WriteLine($"Errado. A resposta correta seria: {perg.Value}\n");
        }
    }    
}
3 respostas

Olá, Victor. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Gostei de como você utilizou dicionários para estruturar os desafios, tornando os dados organizados e acessíveis. A implementação do método Average() para calcular a média das notas dos alunos foi uma ótima escolha, simplificando o código.

Uma curiosidade interessante: você pode utilizar LINQ para tornar o cálculo da média ainda mais conciso. Veja este exemplo:


var medias = notasAlunos.ToDictionary(aluno => aluno.Key, aluno => aluno.Value.Average());
foreach (var media in medias)
{
    Console.WriteLine($"Aluno: {media.Key}, Média: {media.Value}");
}

Isso cria um novo dicionário com as médias já calculadas.

  Alura   Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigado pelo comentario, Renan!

Nao conhecia essa forma de aninhar o dicionario, acho que entendi como funciona. (Vi que tem outras formas alem da que vc usou tambem, pelo intellisense do visual studio, mas ainda nao vou me aventurar nisso, parece bem complexo)

Em questao de processamento, a forma de criar um novo dicionario como vc mostrou, tambem fica melhor otimizado?

Obrigado!

Olá, Victor.

A criação de um novo dicionário pode ser mais eficiente dependendo da abordagem utilizada. Se você está filtrando ou modificando um dicionário existente, criar um novo dicionário diretamente com compreensão de dicionário (dict comprehension) pode ser mais otimizado do que modificar o dicionário original.

Por exemplo, se você está filtrando um dicionário:

original = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
novo = {k: v for k, v in original.items() if v % 2 == 0}

Essa abordagem geralmente é mais rápida do que usar um loop for com update(), pois aproveita otimizações internas do Python. Além disso, evita a modificação do dicionário original, o que pode ser útil dependendo do caso.

Bons estudos!