Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save BurgosNY/2b75fdd092c84b47a0564f031fb5415e to your computer and use it in GitHub Desktop.
Save BurgosNY/2b75fdd092c84b47a0564f031fb5415e to your computer and use it in GitHub Desktop.
Lógica de programação através de um quiz do Buzzfeed
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# If / Else em um Quiz do Buzzfeed"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Olá, Pedro, mostrar. De novo, entrar no Jupyter notebook. Se não estiver aberto. Eu tenho vários, que uso como blocos de anotações de reportagens, rascunhos de investigações.\n",
"- Eu vou fazer as coisas passo a passo aqui, espero que você esteja acompanhando/copiando. No final do módulo você vai poder usar todos os arquivos. Mas por favor, tem que fazer você mesmo.\n",
"---\n",
"- MUITO BEM, If/else é uma das coisas mais importantes\n",
"- Quiz do Buzzfeed, também.\n",
"- Um quiz é nada mais é que um programa. Ele pede um, ou vários inputs do usuário, armazena isso em uma variável e, dependendo, mostra um resultado.\n",
"- Vou marcar 3. Roda. A resposta é \"Que eu sou X\"\n",
"- Será que a gente consegue recriar isso?\n",
"- Vamos olhar de novo: \n",
"- Ou seja: if algo é zero, a reposta é essa, se é maior que zero, a resposta é outra.\n",
"- Vamos criar uma variável chamada Insuportabilidade. = 0\n",
"- If / else statement\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"O site Buzzfeed ficou famoso por seus quizzes. Exemplo de um deles: [Quão INSUPORTÁVEL você é?](https://www.buzzfeed.com/rafaelcapanema/quao-insuportavel-voce-e?utm_term=.kgPNzPa9D#.ebkRDjmBG)). A maioria desses testes dão \"pontos\" para cada resposta marcada, oferecendo uma classificação. No quiz em questão, por exemplo, se eu não marcar nenhuma opção, e clicar em \"mostrar resultado\", recebo a seguinte mensagem:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](https://i.imgur.com/f6RZpAv.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Se eu marcar as 30 respostas, inclusive, sim, \"você faz cócegas nas pessoas\", a classificação é impublicável, com várias palavras em caps lock. \n",
"\n",
"Um quiz é nada mais que um programa simples, que usa uma simples **variável** para dar o resultado. Chamemos ela de índice de insuportabilidade:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"insuportabilidade = 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"No início do quiz, cada jogador começa com um nível \"0\" de insuportabilidade. À medida que vai marcando as respostas, esse número vai aumentando. Ao final, quando o jogador clica em \"ver resultado\", o site roda um pequeno programa, mais ou menos assim:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Você é um pouco insuportável!\n"
]
}
],
"source": [
"insuportabilidade = 3\n",
"if insuportabilidade == 0:\n",
" print('Você é a pessoa MAIS LEGAL DO MUNDO')\n",
"else:\n",
" print('Você é um pouco insuportável!')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*(experimente mudar o valor de insuportabilidade e as frases para ver os diferentes resultados)*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lembrando: usamos `==` para fazer uma comparação exata. No statement acima, pedimos para o programa avaliar: se a variável `insuportabilidade` for **exatamente** igual a zero (`if ==`), ele vai mostrar um resultado na tela. Se for qualquer coisa diferente disso (`else`), o programa mostra outro resultado."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Um bom quiz tem mais de duas gradações. Ninguém é 8 ou 80. Então precisamos de colocar condições intermediárias:\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Você é meio chatinho(a), hein?\n"
]
}
],
"source": [
"insuportabilidade = 19\n",
"\n",
"if insuportabilidade == 0:\n",
" print('Você é a pessoa MAIS LEGAL DO MUNDO')\n",
"elif 0 < insuportabilidade < 10:\n",
" print('Você pode ser insuportável às vezes!')\n",
"elif insuportabilidade >= 10 and insuportabilidade < 20:\n",
" print('Você é meio chatinho(a), hein?')\n",
"else:\n",
" print('Deus me livre!')\n",
" \n",
"## Experimente colocar diferentes valores a insuportabilidade para verdiferentes resultados"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if insuportabilidade == 0:\n",
" print()\n",
"elif insuportabilidade > 0 and insuportabilidade < 10:\n",
" print()\n",
"else:\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Se o programa precisa avaliar mais que duas condições, usamos `elif` (uma boa explicação, em inglês, [aqui](https://www.tutorialspoint.com/python/python_decision_making.htm))\n",
"\n",
"Note que estamos avaliando duas condições simultaneamente (and) am cada uma das declarações. Para que o programa avalie `0 < insuportabilidade < 10` como `True`, ele faz o seguinte, na ordem:\n",
"\n",
"`insuportabilidade > 0\n",
"insuportabilidade < 10`\n",
"\n",
"Isso é o mesmo que escrever:\n",
"`insuportabilidade > 0 and insuportabilidade < 10`\n",
"\n",
"Se as duas declarações forem verdadeiras, ele retorna `True`, e mostra o resultado que esperamos. Se alguma for falsa, ele passa para a próxima declaração, (`elif`) e avalia se ambas as afirmações são verdadeiras ou falsas. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bônus: Acrescentando interatividade"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"O Python 3 tem um comando `input`, que armazena um valor dado pelo usuário do seu programa, da mesma forma que o site do Buzzfeed armazena as respostas do usuários antes de processar a pontuação no final. Vejamos um exemplo:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Você gosta de fazer cócegas nas pessoas? Responda \"x\" se sim, qualquer outra coisa se não\n",
"Você é legal!\n"
]
}
],
"source": [
"insuportabilidade = input('Você gosta de fazer cócegas nas pessoas? Responda \"x\" se sim, qualquer outra coisa se não')\n",
"if insuportabilidade == 'x':\n",
" print('Você é terrível')\n",
"else:\n",
" print('Você é legal!')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Usando o input, não declaramos um valor para a variável `insuportabilidade` logo de cara, e sim aguardamos o `input` do usuário. O valor de `insuportabilidade` é qualquer coisa que a pessoa digitar, seguido de enter."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"qual a sua cor favorita? azul\n",
"A sua cor favorita é azul\n"
]
}
],
"source": [
"cor = input('qual a sua cor favorita? ')\n",
"print('A sua cor favorita é ' + cor)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mas é claro que o nosso quiz tem diversas respostas \"certas\", e o valor de `insuportabilidade` varia dentro de uma escala. Para construir algo como um quiz completo, como está na página do Buzzfeed, poderíamos fazer:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## USAR OPERADORES\n",
"<, >, !=, >=, or and, etc // A gente vai voltar a isso"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Você gosta de fazer cócegas?S\n",
"Você tem o hábito de interromper os outros?S\n",
"Estende a mão pra cumprimentar alguém e tira no estilo \"deixa que eu toco sozinho\"N\n",
"Você é ok!\n"
]
}
],
"source": [
"# O valor começa em 0\n",
"insuportabilidade = 0\n",
"\n",
"# Fazemos uma série de perguntas, em que as respostas aceitas são 's' para sim ou qualquer outra coisa se não.\n",
"resposta_1 = input('Você gosta de fazer cócegas?')\n",
"if resposta_1 == 's':\n",
" insuportabilidade = insuportabilidade + 1\n",
"resposta_2 = input('Você tem o hábito de interromper os outros?')\n",
"if resposta_2 == 's':\n",
" insuportabilidade = insuportabilidade + 1\n",
"resposta_3 = input('Estende a mão pra cumprimentar alguém e tira no estilo \"deixa que eu toco sozinho\"')\n",
"if resposta_3 == 's':\n",
" insuportabilidade = insuportabilidade + 1\n",
" \n",
"# Agora damos o resultado:\n",
"if insuportabilidade == 3:\n",
" print('Você não está habilitado a viver em sociedade.')\n",
"else:\n",
" print('Você é ok!')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 's' é diferente de 'S'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Recapitulando:\n",
"- Tente quebrar um programa em processos menores;\n",
"- Vá testando a cada mudança;\n",
"- Estude if / elif / else. Variações dessa lógica são o coração de muitos programas"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment