{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Exercícios do curso \"Introdução a linguagem de programação Python aplicada ciência de dados\"\n",
        "\n",
        "**Professor**: Gabriel Rodrigues Palma\n",
        "\n",
        "**Objetivo**: Praticar a criação de funções, Loops, condicionais e instalação de pacotes em Python."
      ],
      "metadata": {
        "id": "CQglx6InY-DA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Estruturas de repetição em Python\n",
        "\n",
        "Utilizaremos a função *while* e *for*."
      ],
      "metadata": {
        "id": "js14gV9uZ1CM"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "adhGDG3mYsGq",
        "outputId": "2ded914a-da71-4ab6-866b-e0969ae8e2ad"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "\n",
            "\n",
            "\n",
            "\n"
          ]
        }
      ],
      "source": [
        "# Exemplo em for\n",
        "for i in range(5):\n",
        "    print(\"\") # add a message here\n",
        "# Quantas vezes essa mensagem aparecerá?\n",
        "\n",
        "# for i in range(5):\n",
        "#      print(i)"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "number = 5\n",
        "for i in range(3):\n",
        "    number = number + 2\n",
        "# Qual número será apresentado?\n",
        "#print(number)"
      ],
      "metadata": {
        "id": "x3rlYj2nbBlF"
      },
      "execution_count": 42,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Inicializamos a variável 'contador' com 1\n",
        "contador = 1\n",
        "\n",
        "# Iniciamos um loop 'while' com uma condição\n",
        "while contador <= 5:\n",
        "    # Imprimimos o valor atual do contador\n",
        "    print(f\"Contagem: {contador}\")\n",
        "\n",
        "    # Incrementamos o contador em 1\n",
        "    contador += 1\n",
        "\n",
        "# Quando a condição do 'while' não é mais verdadeira (contador > 5), o loop termina\n",
        "# O programa continua aqui após o término do loop\n",
        "print(\"Contagem concluída!\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "J9-Til2EbbK3",
        "outputId": "957181cd-585d-4c45-db0c-4f8a2d4cd255"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Contagem: 1\n",
            "Contagem: 2\n",
            "Contagem: 3\n",
            "Contagem: 4\n",
            "Contagem: 5\n",
            "Contagem concluída!\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Usando um loop 'for' para contar de 1 a 5\n",
        "for numero in range(1, 6):\n",
        "    print(numero)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JvHNZ0e7cm1k",
        "outputId": "c8ba0814-e83f-4a34-a0db-9cf4b24d116b"
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1\n",
            "2\n",
            "3\n",
            "4\n",
            "5\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Inicializamos a variável 'contador' com 1\n",
        "#contador = 1 Não precisamos de um contador nesse caso\n",
        "\n",
        "# Iniciamos um loop 'for'\n",
        "for numero in range(1, 6):\n",
        "    # Imprimimos o valor atual do contador\n",
        "    print(f\"Contagem: {numero}\")\n",
        "\n",
        "# O programa continua aqui após o término do loop\n",
        "print(\"Contagem concluída!\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "IcoimwP7cddL",
        "outputId": "64d1af5f-b141-45b1-ba2c-fcc825880e96"
      },
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Contagem: 1\n",
            "Contagem: 2\n",
            "Contagem: 3\n",
            "Contagem: 4\n",
            "Contagem: 5\n",
            "Contagem concluída!\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "A principal diferença entre os dois é que o loop **for** é geralmente usado quando você sabe quantas vezes o loop deve ser executado, como no exemplo anterior, onde queríamos contar de 1 a 5. O loop **while**, por outro lado, é usado quando você não sabe quantas vezes o loop deve ser executado e a condição pode mudar durante a execução do loop.\n"
      ],
      "metadata": {
        "id": "yDWNM67SdAvp"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Estruturas de condição em Python\n",
        "\n",
        "Utilizaremos a função *if*, *else* e *elif*"
      ],
      "metadata": {
        "id": "2l9oE9rYdRgi"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Solicitamos que o usuário insira a nota da prova como um número de ponto flutuante\n",
        "nota = float(input(\"Digite a nota da prova: \"))\n",
        "\n",
        "# Definimos o limite de aprovação e recuperação\n",
        "limite_aprovacao = 6.0\n",
        "limite_recuperacao = 4.0\n",
        "\n",
        "# Usamos condicionais para determinar a situação do aluno\n",
        "if nota >= limite_aprovacao:\n",
        "    print(\"Aluno aprovado!\")\n",
        "elif nota >= limite_recuperacao:\n",
        "    print(\"Aluno em recuperação.\")\n",
        "else:\n",
        "    print(\"Aluno reprovado.\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "du4WqtyPdZWn",
        "outputId": "8defd8c8-909e-4f51-d147-9f40f3dc94c9"
      },
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Digite a nota da prova: 1\n",
            "Aluno reprovado.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Solicitamos que o usuário insira um número\n",
        "numero = float(input(\"Digite um número: \"))\n",
        "\n",
        "# Verificamos se o número está no intervalo de 10 a 20 (inclusive)\n",
        "if numero >= 10 and numero <= 20:\n",
        "    print(\"O número está no intervalo de 10 a 20.\")\n",
        "else:\n",
        "    print(\"O número está fora do intervalo de 10 a 20.\")\n",
        "\n",
        "# Verificamos se o número é negativo ou zero\n",
        "if numero < 0 or numero == 0:\n",
        "    print(\"O número é negativo ou zero.\")\n",
        "else:\n",
        "    print(\"O número é positivo.\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Fjfk4L1pfhxw",
        "outputId": "e1cb51ed-ad0d-4329-b531-5470e0fdd06a"
      },
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Digite um número: 30\n",
            "O número está fora do intervalo de 10 a 20.\n",
            "O número é positivo.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Usando um loop 'for' para iterar de 1 a 10\n",
        "for numero in range(1, 11):\n",
        "    # Verificamos se o número é par\n",
        "    if numero % 2 == 0:\n",
        "        print(f\"{numero} é um número par.\")\n",
        "    else:\n",
        "        print(f\"{numero} é um número ímpar.\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PxajAhd_f8Pr",
        "outputId": "2d19bfcb-dc0a-4718-ea08-39d4611adabf"
      },
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1 é um número ímpar.\n",
            "2 é um número par.\n",
            "3 é um número ímpar.\n",
            "4 é um número par.\n",
            "5 é um número ímpar.\n",
            "6 é um número par.\n",
            "7 é um número ímpar.\n",
            "8 é um número par.\n",
            "9 é um número ímpar.\n",
            "10 é um número par.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Criando as suas funções\n",
        "\n",
        "Agora, vamos criar algumas funções no Python"
      ],
      "metadata": {
        "id": "-89r4wA_fy6k"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Definindo uma função sem argumentos\n",
        "def saudacao():\n",
        "    ''' Essa função ilustra o uso de funções sem argumento '''\n",
        "    print(\"Olá! Esta é uma função sem argumentos.\")\n",
        "\n",
        "# Chamando a função\n",
        "saudacao()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "L3mUkp4Vgpqd",
        "outputId": "fc801228-854a-4b08-ee75-4a526e352ee1"
      },
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Olá! Esta é uma função sem argumentos.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Definimos a função para calcular o quadrado de um número\n",
        "def calcular_quadrado(numero):\n",
        "    ''' Essa função eleva um numero ao quadrado.\n",
        "       Entrada:\n",
        "             numero = Qualquer numero desejado\n",
        "       Saída:\n",
        "             quadrado = O numero elevado ao quadrado'''\n",
        "    quadrado = numero ** 2\n",
        "    return quadrado\n",
        "\n",
        "# Chamamos a função com um número e armazenamos o resultado em uma variável\n",
        "resultado1 = calcular_quadrado(5)\n",
        "print(f\"O quadrado de 5 é: {resultado1}\")\n",
        "\n",
        "# Chamamos a função com outro número\n",
        "resultado2 = calcular_quadrado(8)\n",
        "print(f\"O quadrado de 8 é: {resultado2}\")\n",
        "\n",
        "# Chamamos a função com um terceiro número\n",
        "resultado3 = calcular_quadrado(3)\n",
        "print(f\"O quadrado de 3 é: {resultado3}\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "dj4YqpdPgV7F",
        "outputId": "270e1125-3024-4a0f-f09d-92ac98e39913"
      },
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "O quadrado de 5 é: 25\n",
            "O quadrado de 8 é: 64\n",
            "O quadrado de 3 é: 9\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Criando as suas Classes\n",
        "\n",
        "Agora, vamos criar algumas classes no Python"
      ],
      "metadata": {
        "id": "kE6N4l3Mhp09"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Definindo uma classe chamada Carro\n",
        "class Carro:\n",
        "    # Método de inicialização da classe\n",
        "    def __init__(self, marca, modelo):\n",
        "        ''' Declarando variáveis para o uso nessa classe'''\n",
        "        self.marca = marca\n",
        "        self.modelo = modelo\n",
        "        self.esta_ligado = False\n",
        "\n",
        "    # Método para ligar o carro\n",
        "    def ligar(self):\n",
        "        ''' Essa função liga o carro\n",
        "           Entrada:\n",
        "                   self = Todas as variáveis definidas no método de inicialização\n",
        "                 '''\n",
        "        self.esta_ligado = True\n",
        "        print(f\"O carro {self.marca} {self.modelo} está ligado.\")\n",
        "\n",
        "    # Método para desligar o carro\n",
        "    def desligar(self):\n",
        "        ''' Essa função liga o carro\n",
        "            Entrada:\n",
        "                    self = Todas as variáveis definidas no método de inicialização'''\n",
        "        self.esta_ligado = False\n",
        "        print(f\"O carro {self.marca} {self.modelo} está desligado.\")"
      ],
      "metadata": {
        "id": "brWSo5Rphsqr"
      },
      "execution_count": 43,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Exemplo de uso da classe Carro\n",
        "meu_carro = Carro(\"Toyota\", \"Corolla Saloon\")\n",
        "# meu_carro = Carro(marca = \"Toyota\", modelo = \"Corolla Saloon\")\n",
        "print(f\"Meu carro é um {meu_carro.marca} {meu_carro.modelo}.\")\n",
        "\n",
        "meu_carro.ligar()\n",
        "meu_carro.desligar()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "SS-hR0YwjIsz",
        "outputId": "77219000-6988-4d28-dc0a-36343f5aa8a8"
      },
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Meu carro é um Toyota Corolla Saloon.\n",
            "O carro Toyota Corolla Saloon está ligado.\n",
            "O carro Toyota Corolla Saloon está desligado.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "class Prova:\n",
        "    # Método de inicialização da classe\n",
        "    def __init__(self, nome, questoes, respostas_corretas):\n",
        "        ''' Declarando variáveis para o uso nessa classe'''\n",
        "        self.nome = nome\n",
        "        self.questoes = questoes\n",
        "        self.respostas_corretas = respostas_corretas\n",
        "\n",
        "    # Método para calcular a nota da prova\n",
        "    def calcular_nota(self, respostas_aluno):\n",
        "        '''Essa função calcula a nota dos alunos com base em respostar\n",
        "          Entrada:\n",
        "                  respostas_aluno = Uma lista de respostas dos alunos\n",
        "          Saída:\n",
        "                nota: A nota dos alunos'''\n",
        "        nota = 0\n",
        "        for i in range(len(self.questoes)):\n",
        "            if respostas_aluno[i] == self.respostas_corretas[i]:\n",
        "                nota += 1\n",
        "        return nota"
      ],
      "metadata": {
        "id": "cgvrPQ0YhthR"
      },
      "execution_count": 46,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Exemplo de uso da classe Prova\n",
        "prova_de_matematica = Prova(\"Prova de Matemática\",\n",
        "                            [\"Q1: 2 + 2 =\", \"Q2: 3 x 4 =\", \"Q3: 10 - 5 =\"],\n",
        "                            [4, 12, 5])\n",
        "# prova_de_matematica = Prova(nome = \"Prova de Matemática\",\n",
        "#                             questoes  = [\"Q1: 2 + 2 =\", \"Q2: 3 x 4 =\", \"Q3: 10 - 5 =\"],\n",
        "#                             respostas_corretas = [4, 12, 5])"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JyJpVTZmiqHQ",
        "outputId": "d499848a-ca79-4c9d-efc1-155e977ba86f"
      },
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Nome da Prova: Prova de Matemática\n",
            "Nota do Aluno: 3/3\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "respostas_aluno = [4, 12, 5]  # As respostas do aluno para cada questão\n",
        "\n",
        "nota_final = prova_de_matematica.calcular_nota(respostas_aluno)\n",
        "\n",
        "print(f\"Nome da Prova: {prova_de_matematica.nome}\")\n",
        "print(f\"Nota do Aluno: {nota_final}/{len(prova_de_matematica.questoes)}\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "zo83EL_Il5hD",
        "outputId": "e3c33d50-bf86-4ee2-875a-da84e8eb2fa6"
      },
      "execution_count": 50,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Nome da Prova: Prova de Matemática\n",
            "Nota do Aluno: 3/3\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "Neste código:\n",
        "\n",
        "- Criamos a classe Prova, que tem um construtor __init__ para inicializar o nome da prova, as questões e as respostas corretas.\n",
        "- A classe também possui um método calcular_nota que compara as respostas do aluno com as respostas corretas e calcula a nota da prova.\n",
        "- No exemplo de uso da classe, criamos uma instância da prova de matemática com questões e respostas corretas.\n",
        "- Definimos as respostas do aluno no array respostas_aluno.\n",
        "- Usamos o método calcular_nota para calcular a nota do aluno e, em seguida, imprimimos o nome da prova e a nota final.\n",
        "\n",
        "Esse é um exemplo simples de uma classe em Python relacionada à correção de provas. Você pode expandir e personalizar a classe para atender às suas necessidades específicas."
      ],
      "metadata": {
        "id": "IysQDYnxiIJA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Como instalar pacotes em Python"
      ],
      "metadata": {
        "id": "0TCJSH39kGBQ"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install numpy"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "MX1417uQkP6C",
        "outputId": "b64732e2-0e69-4748-b7ee-ebf71c90853a"
      },
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (1.23.5)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install statsmodels"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nmil86pQkISu",
        "outputId": "ef7911d9-9b5c-4851-b333-b255015b646c"
      },
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Requirement already satisfied: statsmodels in /usr/local/lib/python3.10/dist-packages (0.14.0)\n",
            "Requirement already satisfied: numpy>=1.18 in /usr/local/lib/python3.10/dist-packages (from statsmodels) (1.23.5)\n",
            "Requirement already satisfied: scipy!=1.9.2,>=1.4 in /usr/local/lib/python3.10/dist-packages (from statsmodels) (1.11.3)\n",
            "Requirement already satisfied: pandas>=1.0 in /usr/local/lib/python3.10/dist-packages (from statsmodels) (1.5.3)\n",
            "Requirement already satisfied: patsy>=0.5.2 in /usr/local/lib/python3.10/dist-packages (from statsmodels) (0.5.3)\n",
            "Requirement already satisfied: packaging>=21.3 in /usr/local/lib/python3.10/dist-packages (from statsmodels) (23.2)\n",
            "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.0->statsmodels) (2.8.2)\n",
            "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.0->statsmodels) (2023.3.post1)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from patsy>=0.5.2->statsmodels) (1.16.0)\n"
          ]
        }
      ]
    }
  ]
}