{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "native-uncle",
   "metadata": {},
   "source": [
    "# Solução dos exercícios da aula 04\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "imperial-postage",
   "metadata": {},
   "source": [
    "### Exercício 1\n",
    "Altere o programa anterior de modo que o produto e a quantidade vendida seja solicitada ao usuário. Verifique se o produto digitado existe e só então efetue a baixa no estoque. Também verifique se o estoque é o suficiente para atender ao pedido.\n",
    "<!-- TEASER_END -->\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "heated-orbit",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Entre com o produto (fim para terminar): picanha\n",
      "Produto não disponível\n",
      "Entre com o produto (fim para terminar): tomate\n",
      "Entre com a quantidade de produto desejada: 2000\n",
      "Existe tomate disponível para a tua demanda.\n",
      "Entre com o produto (fim para terminar): tomate\n",
      "Entre com a quantidade de produto desejada: 700\n",
      "tomate      : 700 x   2.30 = 1610.00\n",
      "Entre com o produto (fim para terminar): feijão\n",
      "Entre com a quantidade de produto desejada: 100\n",
      "feijão      : 100 x   1.50 = 150.00\n",
      "Entre com o produto (fim para terminar): tomate\n",
      "Entre com a quantidade de produto desejada: 300\n",
      "tomate      : 300 x   2.30 = 690.00\n",
      "Entre com o produto (fim para terminar): fim\n",
      " Custo total:               2450.00\n",
      "\n",
      "Estoque:\n",
      "\n",
      "Descrição:  tomate\n",
      "Quantidade:  0\n",
      "Preço:   2.30\n",
      "\n",
      "Descrição:  alface\n",
      "Quantidade:  500\n",
      "Preço:   0.45\n",
      "\n",
      "Descrição:  batata\n",
      "Quantidade:  2001\n",
      "Preço:   1.20\n",
      "\n",
      "Descrição:  feijão\n",
      "Quantidade:  0\n",
      "Preço:   1.50\n",
      "\n"
     ]
    }
   ],
   "source": [
    "estoque = {\"tomate\": [1000, 2.30],\n",
    "           \"alface\": [500, 0.45],\n",
    "           \"batata\": [2001, 1.20], \n",
    "           \"feijão\": [100, 1.5]}\n",
    "\n",
    "venda = []\n",
    "total = 0\n",
    "\n",
    "while True:\n",
    "    produto = input(\"Entre com o produto (fim para terminar): \").strip().lower()\n",
    "    if produto == 'fim': \n",
    "        break\n",
    "    elif produto in estoque:\n",
    "        quantidade = int(input(\"Entre com a quantidade de produto desejada: \"))\n",
    "        prod_est = estoque[produto]\n",
    "        quant_disp = prod_est[0]\n",
    "        if quantidade > quant_disp:\n",
    "            print(f\"Existe {produto} disponível para a tua demanda.\")\n",
    "        else:\n",
    "            preço = prod_est[1]\n",
    "            custo = preço * quantidade\n",
    "            prod_est[0] -= quantidade\n",
    "            print(f\"{produto:12s}: {quantidade:3d} x {preço:6.2f} = {custo:6.2f}\")        \n",
    "            total += custo\n",
    "    else:\n",
    "        print(\"Produto não disponível\")\n",
    "        \n",
    "print(f\" Custo total: {total:21.2f}\\n\")\n",
    "print(\"Estoque:\\n\")\n",
    "for chave, dados in estoque.items():\n",
    "    print(\"Descrição: \", chave)\n",
    "    print(\"Quantidade: \", dados[0])\n",
    "    print(f\"Preço: {dados[1]:6.2f}\\n\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adapted-sister",
   "metadata": {},
   "source": [
    "### Exercício 2\n",
    "Escreva um programa que que gere um dicionário a partir de uma string onde a chave seja um caracter e o valor o número de vezes que este caracter aparece no dicionário\n",
    "\n",
    "o rolo -> {'o': 3, ' ': 1, 'l': 1}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "broadband-marsh",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'u': 1,\n",
       " 'm': 2,\n",
       " 'a': 5,\n",
       " ' ': 2,\n",
       " 'r': 2,\n",
       " 't': 1,\n",
       " 'z': 1,\n",
       " 'n': 2,\n",
       " 'e': 2,\n",
       " 'o': 1}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = \"uma ratazana enorme\"\n",
    "caracteres = {}\n",
    "\n",
    "for c in s:\n",
    "    if c in caracteres:\n",
    "        caracteres[c] += 1\n",
    "    else:\n",
    "        caracteres[c] = 1\n",
    "caracteres        \n",
    "    \n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "healthy-patch",
   "metadata": {},
   "source": [
    "### Exercício 3\n",
    "Explore os métodos disponíveis aos dicionários. Brinque com eles"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "black-sweden",
   "metadata": {},
   "source": [
    "Aí é com vocês mesmo. Não tem solução"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "automotive-world",
   "metadata": {},
   "source": [
    "### Exercício 3\n",
    "Explore os métodos disponíveis aos dicionários. Brinque com eles"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "stupid-reasoning",
   "metadata": {},
   "source": [
    "Aí é com vocês mesmo. Não tem solução"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "metropolitan-forge",
   "metadata": {},
   "source": [
    "### Exercício 5\n",
    "Escreva um programa que compare duas listas. Utilizando operações com conjuntos, imprima:\n",
    "\n",
    " * Os valores comuns às duas listas\n",
    " * Os valores que só existem na primeira\n",
    " * Os valores que existem apenas na segunda\n",
    " * Uma lista com os elementos não repetidos das duas listas\n",
    " * A primeira lista sem os elementos repetidos na segunda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "respiratory-heaven",
   "metadata": {},
   "outputs": [],
   "source": [
    "L1 = list(range(10))\n",
    "L2 = [4,7,8, 15]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "lesbian-insight",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{4, 7, 8}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Valores comuns às dias listas:\n",
    "S1 = set(L1)\n",
    "S2 = set(L2)\n",
    "\n",
    "S1 & S2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "radio-folder",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0, 1, 2, 3, 5, 6, 9}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Valores que só existem na primeira lista\n",
    "S1 - S2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "incorporate-experience",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{15}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Valores que existem apenas na segunda lista:\n",
    "S2 - S1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "reduced-rates",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0, 1, 2, 3, 5, 6, 9, 15}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Uma lista com os elementos não repetidos das duas listas\n",
    "(S1 | S2) - (S1 & S2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "bearing-concern",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0, 1, 2, 3, 5, 6, 9}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# A primeira lista sem os elementos repetidos na segunda\n",
    "S1 - (S1 & S2)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "broken-depth",
   "metadata": {},
   "source": [
    "### Exercício 6\n",
    "Teste a diferença entre os métodos `.find` e `.rfind` com `.index` e `.rindex`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "lightweight-statement",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".find(\"string\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "descending-notification",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".rfind(\"string\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "earned-shape",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".index(\"string\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "major-moral",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".rindex(\"string\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "undefined-earthquake",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".find(\"IPT\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "separate-rally",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".rfind(\"IPT\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "emerging-valuable",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "substring not found",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Input \u001b[0;32mIn [16]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muma string com uma string qualquer\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mindex(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPT\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "\u001b[0;31mValueError\u001b[0m: substring not found"
     ]
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".index(\"IPT\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "quarterly-renaissance",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "substring not found",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Input \u001b[0;32mIn [17]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muma string com uma string qualquer\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mrindex(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPT\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "\u001b[0;31mValueError\u001b[0m: substring not found"
     ]
    }
   ],
   "source": [
    "\"uma string com uma string qualquer\".rindex(\"IPT\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "usual-headset",
   "metadata": {},
   "source": [
    "Os métodos `find` e `index` retornam o índice da posição de uma substring começando pela esquerda. Já os métodos `rfind` e `rindex` realizam a busca pela direita (**r**ight em inglês).\n",
    "\n",
    "A diferença entre `find` e `index` (e as versões com `r` no começo) é que se a substring não ocorre, `find` e `rfind` retornam -1. Já `index` e `rindex` resultam em um erro.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "pressing-scheduling",
   "metadata": {},
   "source": [
    "### Exercício 7\n",
    "Escreva um programa que leia duas strings. Verifique se a segunda ocorre dentro da primeira e imprima sua posição de início"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "becoming-budapest",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'Vamos' ocorre no índice 26 da string 'Esta mensagem é comprida. Vamos ver o que acontece'\n"
     ]
    }
   ],
   "source": [
    "s1 = \"Esta mensagem é comprida. Vamos ver o que acontece\"\n",
    "s2 = \"Vamos\"\n",
    "\n",
    "idx = s1.find(s2)\n",
    "\n",
    "if idx < 0:\n",
    "    print(f\"'{s2}' não ocorre na string '{s1}'\")\n",
    "else:\n",
    "    print(f\"'{s2}' ocorre no índice {idx} da string '{s1}'\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "outer-frame",
   "metadata": {},
   "source": [
    "### Exercício 8\n",
    "Escreva um programa que leia duas strings e gere uma  terceira string com todos os caracteres que aparecem nas duas strings. A ordem não interessa."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "stylish-token",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'na rutemzéo'"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solução usando strings apenas:\n",
    "\n",
    "s1 = \"na rua tem ratazana\"\n",
    "s2 = \"a ratazana é enorme\"\n",
    "\n",
    "s3 = ''\n",
    "for c in s1:\n",
    "    if c not in s3:\n",
    "        s3 += c\n",
    "for c in s2:\n",
    "    if c not in s3:\n",
    "        s3 += c\n",
    "s3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "premier-tuner",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'aurm ézento'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solução usando conjuntos\n",
    "\"\".join(set(s1) | set(s2))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "nasty-wells",
   "metadata": {},
   "source": [
    "### Exercício 9\n",
    "Escreva um programa que leia uma string e imprima quantas vezes cada caracter aparece nessa string"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "accompanied-runner",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "O caracter 'a' ocorre 4 vezes\n",
      "O caracter 'n' ocorre 2 vezes\n",
      "O caracter 'r' ocorre 2 vezes\n",
      "O caracter 't' ocorre 1 vezes\n",
      "O caracter 'm' ocorre 1 vezes\n",
      "O caracter ' ' ocorre 3 vezes\n",
      "O caracter 'A' ocorre 1 vezes\n",
      "O caracter 'z' ocorre 1 vezes\n",
      "O caracter 'e' ocorre 2 vezes\n",
      "O caracter 'é' ocorre 1 vezes\n",
      "O caracter 'o' ocorre 1 vezes\n"
     ]
    }
   ],
   "source": [
    "s = \"A ratazana é enorme\"\n",
    "C = set(s)\n",
    "\n",
    "for c in C:\n",
    "    n = s.count(c)\n",
    "    print(f\"O caracter '{c}' ocorre {n} vezes\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "outdoor-disease",
   "metadata": {},
   "source": [
    "### Exercício 10\n",
    "Modifique o jogo da forca de forma que a palavra secreta seja escrita caso o jogador perca"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "frank-technician",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Digite a plavra secreta: ratazana\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "........\n",
      "\n",
      "Digite uma letra: a\n",
      "||==:==\n",
      "||  :  \n",
      "||\n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      ".a.a.a.a\n",
      "\n",
      "Digite uma letra: u\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      ".a.a.a.a\n",
      "\n",
      "Digite uma letra: q\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||  |  \n",
      "||\n",
      "||\n",
      "==========\n",
      ".a.a.a.a\n",
      "\n",
      "Digite uma letra: l\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "|| \\|  \n",
      "||\n",
      "||\n",
      "==========\n",
      ".a.a.a.a\n",
      "\n",
      "Digite uma letra: m\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "|| \\|/ \n",
      "||\n",
      "||\n",
      "==========\n",
      ".a.a.a.a\n",
      "\n",
      "Digite uma letra: z\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "|| \\|/ \n",
      "||\n",
      "||\n",
      "==========\n",
      ".a.aza.a\n",
      "\n",
      "Digite uma letra: y\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "|| \\|/ \n",
      "|| /  \n",
      "||\n",
      "==========\n",
      ".a.aza.a\n",
      "\n",
      "Digite uma letra: z\n",
      "Você já tentou esta letra!\n",
      ".a.aza.a\n",
      "\n",
      "Digite uma letra: f\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "|| \\|/ \n",
      "|| / \\ \n",
      "||\n",
      "==========\n",
      "Enforcado!\n",
      "A palavra secreta era 'ratazana'\n"
     ]
    }
   ],
   "source": [
    "palavra = input(\"Digite a plavra secreta: \").strip().lower()\n",
    "for x in range(100): \n",
    "    print()\n",
    "\n",
    "digitadas = []\n",
    "acertos = []\n",
    "erros = 0\n",
    "\n",
    "while True:\n",
    "    senha = \"\"\n",
    "    for letra in palavra:\n",
    "        senha += letra if letra in acertos else \".\"\n",
    "    print(senha)\n",
    "    if senha == palavra:\n",
    "        print(\"Você acertou!\")\n",
    "        break\n",
    "    tentativa = input(\"\\nDigite uma letra: \").strip().lower()\n",
    "    if tentativa in digitadas:\n",
    "        print(\"Você já tentou esta letra!\")\n",
    "        continue\n",
    "    else:\n",
    "        digitadas += tentativa\n",
    "        if tentativa in palavra:\n",
    "            acertos += tentativa\n",
    "        else:\n",
    "            erros += 1\n",
    "            print(\"Você errou!\")\n",
    "    print(\"||==:==\\n||  :  \")\n",
    "    print(\"||  O  \" if erros >= 1 else \"||\")\n",
    "    linha2 = \"\"\n",
    "    if erros == 2:\n",
    "        linha2 = \"  |  \"\n",
    "    elif erros == 3:\n",
    "        linha2 = \" \\|  \" \n",
    "    elif erros >= 4:\n",
    "        linha2 = \" \\|/ \"\n",
    "    print(f\"||{linha2}\")\n",
    "    linha3 = \"\"\n",
    "    if erros == 5:\n",
    "        linha3 += \" /  \"\n",
    "    elif erros >= 6:\n",
    "        linha3 += \" / \\ \"\n",
    "    print(f\"||{linha3}\")\n",
    "    print(\"||\\n==========\")\n",
    "    if erros == 6:\n",
    "        print(\"Enforcado!\")\n",
    "        print(f\"A palavra secreta era '{palavra}'\")\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "noted-effectiveness",
   "metadata": {},
   "source": [
    "### Exercício 11\n",
    "Modifique o jogo da forca de forma a utilizar uma lista de palavras. No início pergunte um número e calcule o índice da palavra a utilizar pela fórmula:\n",
    "```python\n",
    "índice = (número * 776) % len(lista_de_palavras)\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "fossil-withdrawal",
   "metadata": {},
   "outputs": [],
   "source": [
    "lista_de_palavras = ['rato', 'bola', 'cachorro', 'gato', 'fogo', 'lixo', 'rosa', 'telefone', 'comida', 'carne', \n",
    "                    'bala', 'figura', 'fauna', 'escola', 'faculdade', 'museu']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "affected-transmission",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Entre com um número inteiro: 5\n",
      "......\n",
      "\n",
      "Digite uma letra: a\n",
      "||==:==\n",
      "||  :  \n",
      "||\n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      ".....a\n",
      "\n",
      "Digite uma letra: e\n",
      "Você errou!\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      ".....a\n",
      "\n",
      "Digite uma letra: m\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      "..m..a\n",
      "\n",
      "Digite uma letra: c\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      "c.m..a\n",
      "\n",
      "Digite uma letra: o\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      "com..a\n",
      "\n",
      "Digite uma letra: i\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      "comi.a\n",
      "\n",
      "Digite uma letra: d\n",
      "||==:==\n",
      "||  :  \n",
      "||  O  \n",
      "||\n",
      "||\n",
      "||\n",
      "==========\n",
      "comida\n",
      "Você acertou!\n"
     ]
    }
   ],
   "source": [
    "número = int(input(\"Entre com um número inteiro: \"))\n",
    "índice = (número * 776) % len(lista_de_palavras)\n",
    "\n",
    "palavra = lista_de_palavras[índice]\n",
    "\n",
    "digitadas = []\n",
    "acertos = []\n",
    "erros = 0\n",
    "\n",
    "while True:\n",
    "    senha = \"\"\n",
    "    for letra in palavra:\n",
    "        senha += letra if letra in acertos else \".\"\n",
    "    print(senha)\n",
    "    if senha == palavra:\n",
    "        print(\"Você acertou!\")\n",
    "        break\n",
    "    tentativa = input(\"\\nDigite uma letra: \").strip().lower()\n",
    "    if tentativa in digitadas:\n",
    "        print(\"Você já tentou esta letra!\")\n",
    "        continue\n",
    "    else:\n",
    "        digitadas += tentativa\n",
    "        if tentativa in palavra:\n",
    "            acertos += tentativa\n",
    "        else:\n",
    "            erros += 1\n",
    "            print(\"Você errou!\")\n",
    "    print(\"||==:==\\n||  :  \")\n",
    "    print(\"||  O  \" if erros >= 1 else \"||\")\n",
    "    linha2 = \"\"\n",
    "    if erros == 2:\n",
    "        linha2 = \"  |  \"\n",
    "    elif erros == 3:\n",
    "        linha2 = \" \\|  \" \n",
    "    elif erros >= 4:\n",
    "        linha2 = \" \\|/ \"\n",
    "    print(f\"||{linha2}\")\n",
    "    linha3 = \"\"\n",
    "    if erros == 5:\n",
    "        linha3 += \" /  \"\n",
    "    elif erros >= 6:\n",
    "        linha3 += \" / \\ \"\n",
    "    print(f\"||{linha3}\")\n",
    "    print(\"||\\n==========\")\n",
    "    if erros == 6:\n",
    "        print(\"Enforcado!\")\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "modified-anderson",
   "metadata": {},
   "source": [
    "Qual a idéia aqui? Isso é um gerador de números pseudo-aleatórios. Parecem aleatórios mas não são. Se bem escolhidos e pode ter um bom comportamento!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "textile-military",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
