Last active
November 22, 2017 12:39
-
-
Save BurgosNY/2b75fdd092c84b47a0564f031fb5415e to your computer and use it in GitHub Desktop.
Lógica de programação através de um quiz do Buzzfeed
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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