sábado, 14 de junho de 2014

Estrutura de Repetição

Para se dá início a este conteúdo, vamos ver um exemplo:
Digamos que você precise receber o nome e a idade de 20 pessoas, e, ao final, o programa deve mostrar a quantidade de pessoas maior de idade (quantidade de pessoas com mais de 20 anos).
Se, com os nossos presentes conhecimentos, elaborássemos este programa ele ficaria basicamente assim:
Note como isso poderia dá um imenso trabalho, então, não seria possível, portanto, escrever este código sem muitas repetições? Sim! Mas, para isso, devemos conhecer o que se chama de "Estrutura de Repetição".
Estrutura de repetição, à princípio, pode ser escrito em python de duas formas: através de for (significa para) ou de while (significa enquanto). Vejamos como é a estrutura de cada um:
for variavel in range(quantidade de repetições):
     código
while (condição):
     código
Bom, com isso, já podemos ter uma ideia de como pode ser feito nosso programa acima. Vamos, posteriormente, elaborá-lo com o laço de for e com o laço de while. Para início, vamos ver, mais aprofundamente, como funciona o for, iniciando com um teste. Façamos isso:
numero = 10
for var in range(numero):
     print(var)
Execute o código acima e observe que o resultado será este:
Ora, vejamos por partes, neste momento existem muitas coisas a serem observadas. Vamos começar por um pequeno detalhe: print(var). Este print é a melhor forma de explicar o como a variável var se comporta dentro do for. Esta variável recebe os números, iniciando-se do 0, até a quantidade informada. Isto é: se a nossa quantidade foi 10, a variável var recebeu, na ordem crescente, os números 0,1,2,3,4,5,6,7,8 e 9. Isso mesmo! Ela não chega a receber o valor 10. Se quiséssemos poupar a memória RAM (onde ficam armazenadas as variáveis), poderíamos fazer o seguinte:
for var in range(10):
      print(var)
O resultado seria o mesmo. Bom, mas se quiséssemos imprimir esses números na ordem decrescente? É possível? Claro! Veja:
for var in range(10,-1,-1):
      print(var)
Bom, analisarmos a saída do programa (o resultado), teremos:
Primeiramente vamos entender o que fizemos para que depois você mesmo possa tirar algumas conclusões. Note que no código eu dividi o range em três partes: Início, Fim, e Passo. O início indica de onde deve iniciar a contagem. O fim representa o último número a ser representado, e, por fim, o Passo, representa de quantos em quantos números será a representação na variável var. Com isso, eu acabo declarando que a contagem iniciará em 10, terminará em -1 e será de 1 em 1, em ordem regressiva (por isso o sinal de negatividade). Bom, mas se é de 10 até -1, porque só fomos até o 0? Isso porque existe uma certa regra, na qual o último número representado será um número a menos que o que se espera. No caso, se esperávamos que fôsse até o -1, foi até o 0. Se digitássemos que fosse, em ordem regressiva, até o 5, iria até o 6. Se fosse em ordem progressiva, e digitássemos 20, seria até o 19. E assim sucessivamente.
Com isso, já analisamos como, basicamente funciona o for. Vamos agora compreender o while.
Para início, o while não é necessariamente utilizado para uma contagem pré-determinada. Isto é, não podemos fazer o seguinte:
while 5:
     print('Se você definiu o 5 para repetir esta frase 5 vezes, dá erro de semântica')
Se você copiou e executou o código acima, vc perceber que a frase "Dá erro de semântica" se repete infinitamente. Em outras palavras este é o que chamamos que é um "loop infinito". Para fazer-mos isso é necessário um pouco mais de lógica, vamos, por exemplo, imprimir os números de 1 a 10, e, depois, de 10 a 1. Vejamos:
Agora se depare com a última linha: num_inicial += 1. Este trecho de código é feito o que chamamos de concatenação. Isso é a mesma coisa que fazer num_inicial = num_inicial + 1. Note que a saída foi exatamente como queríamos que fosse, os números de 1 até 10. Agora, para fazer em ordem regressiva, talvez você já tenha em mente como deve ser feito. Veja:
Perceba como, novamente, foi executado exatamente o que queríamos. Note, novamente, que na última linha, existe: num_inicial -= 1. Isso puxa o mesmo princípio de contagem, só que agora regressivo. Bom, isso é o mesmo que: num_inicial = num_inicial - 1.
Vamos agora para um pequeno problema que pode surgir agora: perceba que os números são impressos somente um abaixo do outro. Seria possível imprimir um ao lado do outro? Claro! Vejamos:
Se você é um bom observador, vc notou algo de diferente lá no print: end=' '. Certo? Pois é, é isso, na verdade, o que marca como está sendo feita a impressão. Isto é, quando não colocamos nada, esse end= fica sendo o '\n' que pula uma linha. Logo, quando não colocamos nada disso no nosso print, está sendo posto, na verdade, ao final da linha de print o end='\n', onde pula-se uma linha a cada linha. Com isso, não necessariamente podemos colocar somente um espaçamento entre os números. Pode ser, ainda, qualquer coisa, caractere ou não.
Agora que conhecemos uma boa parte do while e do for, vamos voltar àquele nosso problema? Lembra?
"Receber o nome e a idade de 20 pessoas, e, ao final, o programa deve mostrar a quantidade de pessoas maior de idade (quantidade de pessoas com mais de 20 anos)."
Com o for, temos:
Perceba que, se você executar o código acima, será feito exatamente o que se pede, sem nenhuma necessidade de repetições, assim como seria proposto sem o conhecimento da estrutura de repetição. Vamos agora elaborar este mesmo programa com o while. Vejamos:
 
Note que, do mesmo modo de for, o código acima funciona, sem nenhuma qualquer diferença, a não ser no código.
Aparentemente o while parece ser mais complexo e difícil, mas haverá algumas situações que ele pode ser mais eficiente que o for assim como haverá situações que o for será mais eficiente que o while.
Por enquanto é só. Fiquem ligados nas novidades do site lucasfb1995.wix.com/mundo-python, lá encontra-se disponível, inclusive, o python para celulares S60, assim como alguns jogos e programas para windows.


segunda-feira, 19 de maio de 2014

Novidades

Como você pode ver, estamos com uma nova interface, com novas cores... E agora foi criado um site oficial do nosso grupo, ele é bem mais complexo, envolvendo downloads, e obtem ainda tudo o que este blog contém (as mesmas postagens). O novo site é: http://lucasfb1995.wix.com/mundo-python#
Um site inovador e bem mais confortável para os nossos internautas.

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.