1. Qual a diferença entre declarar e usar uma variável?
Uma variável nada mais é que um nome associado à uma posição de memória do computador: a posição de seu bit inicial e o número de bits usados para representar aquele tipo de variável. Como a linguagem Python é interpretada, pode-se em qualquer parte declarar uma variável e depois pode-se usá-la, recebendo valores ou em expressões.
Cód. 1. Código ilustrando a declaração de variáveis inteiras e flutuantes.def main () : i = 3;# declara variavel inteira 'i' (i sendo iniciada com valor 3) x = 0.5;# declara variavel inteira 'x' (iniciada com 0.5) y = i/2;# declara variavel inteira 'y' (pois i e' inteiro => recebera' 3/2 = 1) # %d e' formatador para imprimir inteiro, %f para flutuante - y=%f e' para comprovar que 3/2 = 1 "i=%d, x=%f, y=%f" % (i, x, y)); ... main();
Outro conceito essencial às variáveis é o de atribuição de valor. Sua sintaxe em Python, e em muitas outras linuguagens, é usar do lado esquerdo da atribuição um nome de variável e do lado direito da atribuição uma expressão aritméitca válida. No código 1, i=0 e x=0.5 são atribuições, então funciona no Python como declaração de variável, desse modo i será variável inteira e x flutuante. tendo como lado esquerdo as variáveis i e x e como lado direito as expressões constantes 0 e 0.5.
Ainda usando como estrutura o código 1, outro exemplo de atribuição poderia ser i = n/2, que tem como
lado direito a expressão n/2.
Como no código 1 a variável n é do tipo inteiro, o mesmo para a constante 2 (se desejasse flutuante deveria usar 2.0),
então seu resultado é o quociente da divisão inteira da divisão.
Mas vale adiantar outra possibilidade de "forçar" o resultado a ser flutuante, usar o coversor de tipo:
x =
2. O que são "entradas de dados" e "saídas de dados"?
Um algoritmo é uma sequência finita de passos, que ao ser aplicado à um conjunto de dados (entradas) deve produzir sempre as mesmas saídas. Por exemplo, o algoritmo da divisão ao ser aplicado sobre valores fixados a e b, deve produzir sempre o mesmo valor q (de tal forma que q * b = a).
Por outro lado, um programa, em Python ou em qualquer outra linguagem, nada mais é que a implementação de um algoritmo na referida linguagem. Desse modo, para este programa ser usado, o usuário (aquele que está executando) deve fornecer um conjunto de dados de entrada, na ordem adequada (pois a/b geralmente não é o mesmo que b/a), para que o programa possa ser executado e produzir as saídas desejadas.
Podemos usar o mesmo exemplo da divisão para ilustar a necessidade dos dados de entrada adequados. Para que um algoritmo para a divisão de dois números reais seja adequadamente executado, devem ser fornecidos os dois valores reais, o primeiro será o numerador e o segundo será o denominador. Assim, se o usuário digitar apenas um valor, o programa ficará parado até que ele digite o segundo valor.
Saber mais3. Entrada e saída de dados simples: inteiro e "real" em Python 2
Na versão 2 do Python a função
Desse modo, se o usuário deseja trabalhar com um valor inteiro, pode tentar forçar a conversão do que for digitado
para inteiro com
O análogo deve ser feito para "reais", flutuantes, usando-se
O código 2 mostra a entrada de um valor inteiro (um Enter), seguido pela entrada de um valor "real" (outro Enter).
Cód. 2. Código ilustrando a entrada para valor inteiro e para "flutuante".def leia1 () : a =int (input ()); b =float (input ());# o primeiro ';' e' obrigatorio para poder usar 2 atribuicoes em uma unica linha # o finalizador ';' e' opcional leia1();# chama a funcao para leitura
Vale notar que, para o código 2, se o usuário digitar uma "cadeia de caracteres" (com letras) como primeira entrada,
ele receberá uma mensagem de erro.
Abaixo a mensagem de erro após digitar o número s1:
File "codigos/introducao_leituras_python_2.py", line 2, in leia_imprima
a = int(input()); b = float(input());
File "
NameError: name 's1' is not defined
4. Saída de dados formatada: inteiro, "real" e caractere em Python 2
Em Python é possível fazer impressões mais sofisticadas utilizando um
m = 2; x = 2.3; t = 'A';
Vale notar que o quarto caractere %, imediatamente antes de (m, x, t) é para separar o texto a ser
impresso dos valores a serem usados nos formatadores.
Os valores estão na lista de valores (m, x, t) (que poderia usar alguma expressão em qualquer deles)
a ser impressa, sendo a ordem importante.
No exemplo, o primeiro formatador %d será usado para imprimir a primeira variável m, o segundo %f
é associado à segunda variável t "real" e o terceiro %c é para t (caractere).
Os formatadores podem facilitar a impressão de tabelas, utilizando valores entre o símbolo de porcentagem e o tipo de
variável a ser impressa, por exemplo: %3d usa 3 espaços, ajutando à direita o último,
%8.3f usa 8 espaços, ajutando à direita o último e colocando o ponto decimal na terceira posição (da direita para
esquerda). Experimente a linha abaixo:
Na tabela 1, apresentamos códigos ilustrativos para entrada e saída de valores inteiros e flutuantes. Outro aspecto importante que é ilustrado é o tratamento de divisão no Python 2, que pode forçar a divisão inteira com a // b (assim 3.2 // 2 resulta 1). No Python 3, existe uma diferença no tratamento de a / b, que será sempre a divisão de "real".
Python 2: código com formatador | Exemplo para entradas e respectivas saídas | |
---|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18 20 21 22 23 24 25 26 |
|
|
Se o usuário desejar inserir outra coisa (em geral uma cadeia de caracteres - "string") deve-se usar uma função especial (vide raw_input a seguir).
5. Entrada de dados: vários valores em uma só linha no Python 2
Como citado acima, a versão 2 do Python dá prioridade às entradas serem valores numéricos, assim
usando apenas input() automaticamente tenta-se interpretar o que foi digitado como número.
Se forem digitados vários valores ou alguma palavra ocorre erro (File "
Assim, se for necessário entrar vários valores de uma só vez deve-se usar uma sequência de comandos:
Por exemplo, para digitar as dimensões de uma matriz e seu maior e menor valor em um único ENTER, pode-se usar o comando:
m, n = map(int,A primeira linha corresponde a uma sequência de passos:raw_input ().split());# raw_input pega a "string" digitada "2 4"
Mas com a conversão é uniforme na função map, se tiver misturas de valores seria necessário algum "truque". Por exemplo, suponha que precise ser digitado 2 inteiros seguindos de 2 "floats" (em um único ENTER), pode-se usar o conversor para o tipo de "maior tamanho" ("float" no caso) e depois fazer mais uma conversão:
m, n, x, y = map(float,A primeira linha tem comportamento análogo ao código anterior, mas convertendo para "float" (e não "int"):raw_input ().split());# raw_input pega a "string" digitada "2 4 3.1 6.1" m, n = map(int, [m, n]);# gere uma lista [m,n] e a converta para inteiro
Para o código anterior, se rodá-lo com o Python 2, supondo a primeira linha de entrada ser 2 4 e a segunda 2 4 3.1 6.1, produzirá o seguinte resultado:
2 4 m=2, n=4 2 4 3.1 6.1 m=2, n=4, x=3.100000, y=6.100000
Leônidas de Oliveira Brandão
http://line.ime.usp.br