terça-feira, 18 de março de 2014

RECAPITULANDO

O nosso próximo conteúdo será estrutura de repetição... Estrutura de repetição é uma parte de python que requer do programador um pouco mais de lógica. Sabendo-se que python nada mais é do que uma linguagem cumulativa, isto é, seus assuntos dependem um do outro, apenas acumulam-se, para que se entenda com perfeição o próximo conteúdo, é necessário que saibamos os conteúdos estudados até aqui. Você pode enviar sua dúvida para meu e-mail pessoal: anonimo_individuo@hotmail.com.
Eu estava observando que, nas quantidades de visualizações, os estadunidenses são quem mais veem minhas postagens, portanto:
If you're American, you can submit your question in English to my email!
Bom, de qualquer modo, aí vai uma lista de exercícios:

REVISÃO

1 - Escreva um programa que leia dois números inteiros. Imprima a soma desses dois números na tela.
2 - Escreva um programa que leia um valor em metros e o exiba convertido em milímetros.
3 - Escreva um programa que leia o valor de três produtos. Exiba a soma dos valores na tela.
4 - Sabendo que o imposto é de 25%, faça um programa que leia o salário de um funcionário e exiba o imposto a ser pago.
5 - Escreva um programa que leia a quantidade de horas, minutos e segundos de uma partida de tênis. Calcule o total e segundos.
6 - Receba do usuário um número, se positivo armazene-o em A, se for negativo, em B. No final mostrar o resultado.
7 - Ler um número e verificar se ele é par ou ímpar. Quando for par armazenar esse valor em P e quando for ímpar armazenar esse valor em I. Exibir P e I no final do processamento.
8 - Ler uma variável numérica N e imprimí-la com o valor zero.
9 - Tendo como dados de entrada a altura e o sexo de uma pessoa, Construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:
-> Para homens: (72.7 x altura) - 58
-> Para mulheres: (62.1 x altura) - 44.7

Estrutura de decisão

Provavelmente já tenhamos sentido falta de algo mais eficiente para que possamos programar... Por exemplo... Digamos que criemos um programa para fazer o saque de uma conta bancária... Se a senha que passarmos estiver errada... Nada será feito. Mas como fazer isso? Como fazer um programa que execute trechos apenas em determinadas circunstâncias? Bom... Isso é possível com a ajuda de um trecho do conteúdo denominado estrutura de decisão.
Em estrutura de decisão, ocmo já foi dito, executamos um trecho de código em determinadas circunstâncias... Para que isso possa ser feito, temos que ter noção de algumas técninas, chamadas de comparação. Vejamos os termos comparativos:
  1. == - Igual
  2. != - Diferente
  3. > - Maior que
  4. < - Menor que
  5. >= - Maior ou igual a
  6. <= - Menor ou igual a
Perceba que para uma comparação caso dois dados sejam iguais, não utilizamos o =, mas sim o ==. Cuidado para não se confundir, isso é motivo de muitos erros por aí.
O resto, é fácil de memorizar.
Agora, quais são os códigos para estrutura de decisão? Veja-os:
if -> No português significa "se", tem a seguinte estrutura:
if (condição):
     bloco
elif -> No português é uma abreviação do que seria "senão se". O elif só é utilizado depois de um if, ele não pode ser a primeira condição de um código. Ele tem a seguinte estrutura:
elif (condição):
     bloco
else -> No português significa "senão". O else é a última condição a ser utilizada em uma determinada situação, como se representasse a única possibilidade restante disponível. Portanto, sendo representante da única possibilidade restante disponível, ele não necessita de condição. Vejamos:
else:
     bloco
Agora vejamos algumas coisas... Em primeiro lugar, note a presença da palavra condição. E nesse local (dentro ou fora de parentesis) que vamos colocar a nossa condição com ajuda dos termos comparativos. Veremos um exemplo mais adiante, para que isso fique mais claro.
Em segundo lugar, perceba que abaixo da linha que será posta o nosso código, existe a palavra bloco. Esse é um novo termo para nós, e é motivo de muitos erros de programação. O bloco representa o código que será executado sob as circunstâncias descritas na condição. Note que o início da palavra bloco está mais a direita... Isso é o que chamamos de identação. Em outras palavras, o código que será executado sob tais circunstâncias, deve está identado. Mas o que é, na verdade, a identação. Identação trata-se de iniar uma linha mais a frente do início da folha. No início da linha clicamos em TAB (logo acima de Caps Lock), e será dado um espaço entre o início da página e o cursor. Por questão de organização, o python exige que todo o código que será salvo em determinadas circunstâncias (dentro de uma estrutura de decisão), seja posto com identação.
Vamos ao exemplo seguinte, e, posteriormente, tiraremos algumas dúvidas, com o que vou chamar de "perguntas frequentes".
Fazer um programa que peça o nome e a idade de uma pessoa, e caso ele tenha uma idade maior ou igual a 15 anos, mostrar na tela: Você já é maior de idade.
Vejamos:
nome = input("Nome: ")
idade = int(input("Idade: ")
if (idade >= 15):
     print("Você já é maior de idade")
Percebe como é simples? Agora ao perguntas frequentes:
1 - Pode ser colocado mais que um 'if' dentro do código? Resposta: Sim, mas existe uma coisa interessante nessa ocasião. Quando colocamos o if (apenas 1), o elif e o else, o python testa as condições até que elas sejam verdadeiras. Quando isso acontecer, ele para de testar. Enquanto isso, colocando-se apenas "if's", mesmo que já exista uma condição correta, o python continuará testando as outras condições.
2 - Pode ser colocado mais que um 'elif' dentro do código? Resposta: Sim, esse é, dependendo da ocasião, o mais recomendado. Por que dependendo da ocasião? As vezes temos necessidade de trabalhar com duas condições, mas de modo que essas duas podem estar corretas simultaneamente. Quando isso ocorrer, o ideal é que seja posto dois "if's". Por exemplo:
nome = input("Nome: ")
idade = input("Idade: ")
if (nome == "Adrian"):
     print("Seu nome é Adrian.")
if (idade > 15):
     print("Você é maior de idade.")
Note que o nome pode ser Adrian e a idade pode ser maior que 15 anos, portanto, nessa ocasião os dois "if's" estariam verdadeiros, logo os dois "print's" seriam executados. Assim, do mesmo modo tais informações poderiam está erradas, deixando de executar o código com a condição falsa.
3 - Pode existir uma estrutura de decisão dentro de outra? Sim! Mas cuidado com a identação. Veja o exemplo:
nome = input("Nome: ")
idade = input("Idade: ")
if (nome == "Tales"):
     if (idade == 8):
          print("Seu nome é Tales e você tem 8 anos.")
     else:
          print("Seu nome é tales e você não tem 8 anos.")
Note a presença do else. Perceba que ele foi utilizado no seguinte contexto: se a idade não é 8, logo ela é diferente de 8 anos.
4 - Qual a diferença de utilizar vários "if's" e utilizar um "if" e vários "elif's"? A diferença é simples, com os "if's" o python encontrará a condição verdadeira, executará o código dentro dela, e continuará testando as demais condições. Enquanto isso, utilizando um "if" e vários "elif's" o python buscará a condição verdadeira, e quando acabar, ele para de testar as demais condições.
Vejamos agora uma coisa que você talvez já tenha percebido... Neste trecho do conteúdo, estamos trabalhando muito com verdadeiro e falso, certo? Isso porque, entra aí um novo type: boolean. O boolean ele contém apenas dois possíveis valores: true ou false. Essas duas palavras vêm do inglês e significam, respectivamente: verdadeiro ou falso.
Portanto, para cada condição utilizada, não só em estrutura de decisão, mas você verá mais adiante as estruturas de repetição, o python retorna um valor do tipo boolean, e ele só executa o bloco de código pertencente a esta condição caso o valor retornado seja true.
Já está na hora de saber o seguinte: podemos utilizar várias condições em uma só estrutura de repetição? Sim! Mas para isso, vejamos o seguinte:
and - significa "e"
or - significa "ou"
As palavras acima são os principais elementos de junção de condições de uma estrutura condicionada (que contém uma condição). É aí que muita gente tem dificuldade em utilizar o or ou o and. Algumas vezes iremos precisar utilizar o or, e outras precisaremos utilizar o and. Vejamos um exemplo:
idade = int(input("Idade: "))
altura = float(input("Altura: "))
if (idade > 18 and altura < 2):
     print("Você é um adulto normal.")
Note que, se na execução do meu pequeno código, eu dizer que minha idade é 15 e que minha altura é 1.75, o print não será executado, pois para que o código seja executado as duas condições devem ser true. Vejamos o mesmo exemplo, de outro modo:
idade = int(input("Idade: "))
altura = float(input("Altura: "))
if (idade > 18 or altura < 2):
      print("Você é um adulto normal.")
Perceba que, se na execução do meu código, eu dizer que minha idade é 15 e que minha altura é 1.75, o código será executado. Isso porque, para que o código seja executado, ou uma condição ou outra deve retornar true. Logo, com o uso do or, ao menos uma condição deverá ser verdadeira.
 
Atividade
 
1 - Faça um programa capaz de converter velocidade de m/s para km/h ou vice versa, conforme o desejo do usuário. Para converter de m/s para km/h temos que multiplicar a velocidade por 3.6, e para converter de km/h para m/s temos que dividir a velocidade por 3.6.
2 - Peça ao usuário o nome e a senha, caso sejam iguais informe que os dados são inválidos.
3 - Seja criativo! A criatividade é uma das grandes qualidades do programador! Elabore seus próprios problemas, e, por meio da programação, resolva-o!

segunda-feira, 17 de março de 2014

Nomenclatura de Variáveis

Agora não posso deixar de passar essa aula, que já deveria ter sido passada, mas por motivos de esquecimento acabei me esquecendo... De qualquer modo é um tema simples:
Existem algumas regras para nomenclatura de variáveis, vejamos:
Não podem ser utilizados palavras separadas da linguagem (os códigos)
O primeiro caractere de uma variável não pode ser número
Podem ser utilizados nas variáveis somente letras, números e o underline (_), por exemplo:
  1. nome_user1
  2. _nome
  3. nome_
  4. _nome_

Operações com Variáveis e o Input

Neste trecho de aula, vamos aprender:
  1. Pedir um dado para o usuário
  2. Realizar operações com variáveis
Em primeiro lugar, perceba que até agora, não pedimos para o usuário nada, estamos fazendo programas para nós mesmos. Mas se... Começassemos a pedir valores para o usuário e mais... Realizásse-mos operações com os dados recebidos, retornando novos valores! Vamos lá! Mãos à obra!
Para saber pedir um determinado dado para o usuário, devemos saber o tipo de dado que estamos pedindo e saber que podemos converter tipos de dados. Vejamos:
decimal = 1.523
inteiro = int(decimal)
texto = str(inteiro)
print("Float: %f Inteiro: %i String: %s" %(decimal,inteiro,texto))
Note que, antes de definir a variável, tivemos que especificar, com as três letras iniciais, o tipo de variável que queremos, e, em seguida, o nome da variável entre parenteses... Note que a saída do programa será a seguinte:
Float: 1.523 Inteiro: 1 String: 1
Mas por que o inteiro ficou como 1? Isso se deve ao fato de que o inteiro, como já foi passado na aula passada, não pode compreender números decimais. Com isso ele corta a parte decimal e fica com a parte inteira para si. E é essa parte inteira que a string imprime. Mas porque estamos falando isso? Tenhamos em mente o seguinte problema: eu vou fazer um programa que receba a altura e a idade de uma pessoa, e calcule o Índice de Massa Corporea (IMC). Detalhe: O cálculo do IMC é feito dividindo o peso (em quilogramas) pela altura (em metros) ao quadrado. Ao final deve ser mostrado para o usuário o resultado.
Então temos alguns problemas, que ainda não sabemos solucionar... Em primeiro lugar, como receber um dado do usuário? Para receber um dado do usuário, temos que utilizar o input() (pra quem tem o python 2.x, não é input, mas sim: raw_input()).
Vejamos:
idade = input("Digite sua idade: ")
Percebeu que o input é semelhante ao print? As diferenças são que o input é utilizado diretamente na variável, para que logo possamos armazenar o valor digitado pelo usuário, o nome em si, que é diferente de print e que o input nada mais faz que esperar que o usuário digite algo.
Entretanto, existe um pequeno problema: o valor recebido pelo input, sempre será string. Logo temos que converter essa string para o type que queremos, existem dois modos, vejamos:
idade = input("Digite sua idade: ")
idade = int(idade)
OU
idade = int(input("Digite sua idade: "))
Em ambos os casos estamos fazendo exatamente a mesma coisa, só que o segundo modo de solucionar tal problema é mais "direto".
Agora que sabemos recolher informações do usuário, podemos partir para a parte de operações, já que também é necessário que conheçamos para que possamos atingir a meta desta aula (resolver a questão citada acima).
Assim como em uma calculadora qualquer (como própria a calculadora do computador), as Linguagens de Programação dispõem de calculadora. As principais operações a fazermos é:
+ (soma)
- (subtrai)
* (multiplica)
/ (divide)
** (eleva a um determinado número)
% (extrai o resto de uma determinada divisão)
Vejamos agora uma aplicação, dando continuidade à nossa resolução do problema:
idade = int(input("Digite sua idade: "))
altura = float(input("Digite sua altura: "))
soma = idade + altura
subtracao = idade - altura
multiplicacao = idade * altura
divisao = idade/altura
exponenciacao = idade ** altura
resto = idade%altura
print("Idade: %i\nAltura: %.1f\nSoma: %.1f\nSubtração: %.1f\nMultiplicação: %.1f\nDivisão: %.1f\nExponenciação: %.1f\nResto: %.1f" %(soma,subtracao,divisao,exponenciacao,resto))
A soma, a subtração, a multiplicação e a divisão não é novidade para ninguém... Isso é fato. Mas temos coisas novas: ** e %. Já vimos antes que % é utilizado na impressão de variáveis, mas não é só isso! O símbolo % retorna o resto da divisão existente entre o número que vem à esquerda do símbolo pelo número que vem à direita do símbolo. Enquanto isso, temos que ** retorna o resultado da potenciação existente entre o número que vem à esquerda do símbolo elevado ao número que vem à direita do símbolo.
Com isso, já temos um bom empenho e já somos capazes de resolver muitos problemas... Mas precisamos de algo amais...
Python é capaz de solucionar expressões, e é capaz de resolver conforme às regras da matemática (primeiro o que vier entre parêntesis e com potenciação e coisas do tipo), portanto, se temos uma determinada expressão, podemos pôr um parêntesis para "forçar" o python a solucionar primeiro tal cálculo (o que estiver entre parêntesis).
Vejamos então:
peso = int(input("Digite seu peso: "))
altura = float(input("Digite sua altura: "))
imc = altura/(peso**2)
print("Seu IMC é %.2f" %(imc))
Veja como nossa capacidade de programar já evoluiu! Partimos de um simples "Hello World" e já estamos fazendo este tipo de cálculo.
Agora vamos praticar, já que a prática é a melhor e mais eficiente maneira de aprender... Mesmo errando, mas é pelo erro que aprendemos como não cometê-lo novamente.
 
Atividade
 
  1. Faça um programa que peça a idade do usuário, e imprima a idade na tela
  2. Faça um programa que seja capaz de resolver uma soma com dois números informados pelo usuário
  3. Faça um programa que seja capaz de realizar potenciação, pedindo para o usuário a base e o expoente.
  4. Faça um programa que seja capaz de solucionar uma equação de 2° grau, pedindo o valor correspondente a A, o valor correspondente a B e o valor correspondente a C.
  5.  

Introdução à Variáveis

Para que saibamos do que se trata uma variável, necessitamos saber de algumas coisas:
  1. A partir de agora será quase que impossível ter um programa sem variáveis, isso porque variável, de uma maneira breve, e ainda, equívoca, armazena valores que o usuário ou o próprio programador utilizará.
  2. Vejamos um exemplo breve e muito comum: como um usuário qualquer consegue abrir um e-mail, digitando e-mail e senha, sem armazenar essas informações em algum local? Para isso, necessitamos de uma variável.
Variáveis, agora, de uma maneira complexa, se trata do "apelido" cedido ao espaço da memória ram que armazenará uma informação qualquer. Vejamos a imagem:
Agora, para pôr nosso conhecimento em prática, devemos ter noção de types... Type (ou tipo) é o tipo de dado com o qual estamos trabalhando. Os principais types são:
String = Seriam os textos... Estes textos devem ser postos entre aspas (duplas ou simples), para que a linguagem possa compreender que o que estamos digitando seja realmente texto.
Int = Seriam os inteiros... Estes inteiros, assim como na matemática, podem ser negativos e positivos, e nem decimais. (Não necessita de aspas).
Float = Seriam os decimais... Estes decimais podem ser positivos, negativos, e com vírgulas (contendo décimos, originando o nome decimais). (Não necessita de aspas).
Agora, vamos saber que, para atribuir um dado para a memória, temos que especificar o dado, e temos que especificar a variável, isto é, o apelido (que é a identidade) do espaço da memória onde desejamos armazenar tal dado. Para que armazenemos, ainda, temos que obter o seguinte sinal: =
OBS: Não confunda esse sinal com IGUALDADE, em python, igualdade é representado por ==, que veremos a frente.
Vamos então utilizar o nosso conhecimento em python? Veja um exemplo:
nome = 'João'
Simples, não? Com isso, atribuimos a string João para o espaço da memória nomeada como nome. Vejamos mais exemplos:
nome = "Gustavo"
idade = 20
altura = 1.6
nome = "Farias"
idade = 10
altura = 1.75
Note que utilizamos duas vezes cada variável. A partir do momento que redeclaramos uma variável ela perde o seu antigo valor e ganha o novo.
Mas será que não é possível mostrar o valor dessas variáveis para o usuário? Claro que sim! Vejamos dois modos de imprimir variáveis:
print("O nome dele é %s" %(nome))
print("O nome dele é",nome)
print("A idade dele é %i" %(idade))
print("A idade dele é",idade)
print("A altura dele é %f" %(altura))
print("A altura dele é",altura)
Note que para cada ocasião temos dois modos de imprimir variáveis e o resultado é o mesmo. E note ainda a presença de termos novos para nós: %s, %i, %f... O símbolo %, quando dentro do que será impresso, espera o tipo da variável para imprimir (logo, se queremos imprimir na tela o símbolo %, temos que digitar tal símbolo duas vezes). O 's', o 'i', e o 'f' não é tão novo para nós, já que vimos a não muito tempo. O 's' representa a primeira letra do tipo String. O 'i' representa a primeira letra do tipo Int e o 'f' representa a primeira letra do tipo Float.
Fora da área que será impressa, o símbolo % espera o nome das variáveis que deve está entre parentesis em seguida, conforme foi mostrado durante os exemplos.
Note, ainda, que no segundo caso, de como imprimir a variável, apenas fechamos aspas, ao acabar o bloco que será impresso, e separamos com vírgula o nome da variável da área a ser impressa. Em primeira vista, esse modo parece melhor e mais eficiente, mas logo você verá que nem sempre esse é o melhor método de imprimir uma variável.
Agora podemos nos deparar com uma situação: se, por acaso, temos um número de casas infinitas para imprimir? Temos que imprimir todas? Claro que não! Python e outras linguagens de programação, nos permite que possamos escolher quantas casas decimais será impressa em um float. Para isso, basta que coloquemos entre o símbolo % e a letra f quantas casas decimais queremos, seguindo um ponto. Veja o exemplo:
pi = 3.1415
print("%.2f" %(pi))
Perceba ainda que em python, na separação da parte inteira e decimal de um número, não existe vírgula, mas sim um ponto. Isso porque python é uma linguagem estadunidensse, em que a separação entre a parte inteira e decimal de um número é feita com um ponto. Portanto, cuidado na hora de programar e digitar um número decimal.

HELLO WORLD - Meu primeiro programa em python

Vamos começar a programar? Já está na hora, não? Vamos lá!
Como você já deve está com o python instalado, o ideal é que saibamos abrir a nossa IDE. Para isso basta-nos procurar pelo arquivo por nome IDLE, e, ao abrir, clicar: Ctrl + n. Feito isso, você verá a sua frente a nossa IDE, prontinha para iniciar-mos a programação!
Vamos ao que interessa.
Como primeiro programa em python, temos a missão de imprimir na tela a frase "Hello World", que significa "Olá Mundo".
Para cumprir tal missão devemos ter conhecimento de um comando chamado print. Esse comando imprime uma determinada frase na tela. Junto ao print, devemos ter os parentesis () e as aspas (simples ou duplas) ' ' ou " ". Vejamos:
print("")
Colocamos entre as aspas a frase que queremos imprimir. Logo teremos:
print("Hello World")
E para executar? O que devemos fazer? Para executar, basta apenas clicar no botão F5.
Mas note, que, antes de executar o programa, temos que salvá-lo. Lembre-se da extensão .py, ela é de suma importância para que nosso programa rode, e para que o nosso código tenha cor.
Mas, ao fechar, abra novamente o programa... Note que ao clicar no programa, ele abre e fecha rapidamente. Para abrí-lo novamente, basta-nos que clique com o botão direito do mause e cliquemos na opção edit with IDLE. Feito isso, será aberto o código do nosso programa e para que executemos, como já foi dito, basta clicar F5.

Curiosidade:
print("Hello World") de python, fica do seguinte modo em C:

C:
#include<stdio.h>
main(){
     printf("Hello World");
     getch();
}

E esse mesmo programa de python, fica do seguinte modo em Java:

Java:
class olamundo{
     public static void main(String[] args){
          System.out.println("Hello World");
     }
}

Atividade:

1 - Imprima o seu nome
2 - Imprima seu primeiro nome em uma linha, e seu sobrenome em outra linha

OBS: Em python é possível, assim como em outras linguagens, imprimir várias linhas em um só 'print'. Isso por meior do comando: '\n', exemplo: print("Hello\nWorld"), veja que o saída do programa será:
Hello
World
OBS: Em python é possível ainda, em dois ou mais 'prints' imprimir uma só linha. Isso por meio do comando end= ' ', exemplo:
print("Hello",end= ' ')
print("World")
A saída será:
Hello World
Note que a frase está em uma só linha!