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 expressões.
Cód. 1. Código ilustrando a declaração de variáveis inteiras e flutuantes. |
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.
Vamos ilustrar expressões com um operador especial do Python 3, o quociente da divisão inteira que é obtido com o operador binário // (de modo complementar, o resto da divisão inteira é obtido com o operador binário %). Assim, 5//2 resulta no valor 2 (e 5%2 resulta no valor 1, pois 2*2 + 1 = 5).
Desse modo, se um trecho de código tem uma variável n inteira (e.g. n = 5), como a constante 2 também é inteira, então a atribuição i = n//2, tem como lado direito a expressão n//2 que é um valor inteiro (e.g., se n=5, então 5//2 resulta no valor 2), portanto a variável i é declarada como inteira.
Por outro lado, o código
x = 2*
Entretando, o conversor
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, ou seja, o quociente q vezes o denominador b recupera o valor do numerador 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 ilustrar 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 3
Na versão 3 do Python a função
Desse modo, se o usuário deseja trabalhar com um valor inteiro, deve convertê-lo para inteiro logo após a leitura
usando a função
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 um "real" como primeira entrada, ele receberá uma mensagem de erro.
Abaixo a mensagem de erro após digitar o número 5.16:
File "codigos/introducao_leituras_python_3.py", line 2, in leia1
a = int(input()); b = float(input());
ValueError: invalid literal for int() with base 10: '5.16'
4. Saída de dados formatada: inteiro, "real" e caractere em Python 3
Em Python é possível fazer impressões mais sofisticadas utilizando um
m = 2; x = 2.3; t = 'A';
que ao ser interpretado pelo Python resulta na impressão
m=2, x=2.300000, t=A
Devemos destacar que o quarto caractere percentagem (%), 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 (inteira), o segundo %f é associado à segunda variável t (que é "flutuante") 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 criar um arquivo cod_formatadores_1.py com as linhas abaixo:
m = 2; x = 2.3; t = 'A';
Ela deverá produzir a seguinte saída:
m= 2, x= 2.300, t= A
$ python cod_formatadores_1.py m= 2, x= 2.300, t= A
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 3, que precisa diferenciar a divisão inteira (e.g. a // b) da divisão flutuante (e.g. a / b).
Python 3: 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 programador desejar inserir várias entradas com uma única linha deve-se, após o comando input(.), utilizar algumas funções especiais, como discutido na seção seguinte.
5. Entrada de dados: vários valores em uma só linha no Python 3
Como citado acima, a versão 3 do Python passou a fazer a leitura dos dados como uma sequência de caracteres ("string"). Assim, se for necessário tratar alguma entrada como valor numérico, o resultado devolvido pelo input() deverá necessáriamente passar por alguma conversão.
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 (número de linhas e de colunas) em uma única linha (como 3 2 ENTER),
pode-se usar a seguinte sequência de comandos:
m, n = map(int, input().split()); |
Cód. 4. Código para digitar 2 inteiros em uma única linha (único ENTER). |
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 digitar 2 inteiros seguindos por 2 "flutuantes" (com um único ENTER). Nesse caso pode-se converter todos para "flutuante" (pois o contrário poderia implicar em perder os decimais) e depois conveter o que interssa para inteiro:
m, n, x, y = map(float, |
Cód. 5. Código para digitar 2 inteiros e 2 "flutuantes" em uma única linha (único ENTER), arquivo cod_formatadores_2.py. |
Para o código anterior, se rodá-lo com o Python 3, supondo que seja digitado 2 4 3.1 6.1 (com um único ENTER), produzirá o seguinte resultado:
$ python cod_formatadores_2.py 2 4 3.1 6.1 m=2, n=4 m=2, n=4, x=3.100000, y=6.100000
Para um exemplo mais sofisticado, podemos elaborar um código para digitar as dimensões de uma matriz
(número de linhas e de colunas) e todos seus elementos em
uma única linha, como 3 2 0 1 2 3 4 5 ENTER.
Para isso podemos usar a seguinte sequência de comandos:
lista = list(map(float, |
Cód. 6. Código para digitar em uma única linha todos os dados de uma matriz, iniciando por número de linhas e colunas. |
Note que no código 2 foi necessário um "truque" adicional para quebrar os elementos da lista em linhas para compor uma matriz. Desse modo foi necessário construir linhas (via append(.)) e a cada linha deve-se anexá-la à matriz (via mat.append(.)).
Leônidas de Oliveira Brandão
http://line.ime.usp.br