Arrays – Python – Linux

Publicado: 4 de fevereiro de 2014 em Python

Uma Array também conhecido como matriz é uma lista seqüencial de itens. O tipo de item que você pode armazenar na matriz são definidas pelo tipo de matriz na declaração. Arrays podem ser simples ou multi-dimensional, e cada dimensão pode ter diferentes comprimentos.

Em Python existe dois modos de programar Arrays o primeiro é como veremos no exemplo a seguir o segundo modo necessita a importação da classe Array, a diferença é que a classe array nos da uma gama de funções extras para sua manipulação, você pode aprender mais sobre importar arrays neste link: http://docs.python.org/2/library/array.html.

No exemplo a seguir complementando o post anterior sobre looping usaremos aqui o comando Continue. este comando força transferência de controle para a proxima expressão, ou seja continua a execução do looping ignorando o ponteiro atual usado nos comandos: for e while.

Imagine o seguinte cenário:

Em uma maratona temos 16 corredores homens e mulheres cada um com uma pulseira que envia um sinal para uma rede sem fio e ao cruzar a linha de chegada e automaticamente nos é dados nome e o tempo dos corredores o que fazemos é identificar nos dados quem fez o primeiro e segundo lugar:

Reiterando: em Python os laços (loopings) necessitam de uma identanção correta para cada bloco, pois ao contrario de outras linguagens não possui inicio e fim de  bloco de instruções.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# arrays.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Declara Arrays
nomes = ['Elena', 'Tomas', 'amilton', 'Susie', 'Felipe', 'Mateus', 'Alex', 'Fabia',
         'Joao', 'James', 'Jane', 'Emilia', 'Daniel', 'Leda', 'Ariana', 'Kate']

tempos = [341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 343, 317, 265]

# Declara variaveis
primeiro = 0
segundo = 0
ganhador = ""
vice = ""

# Laço para procurar o primeiro lugar
for i in range(len(nomes)):
     print nomes[i], ":        ", tempos[i]
     if (int(tempos[i]) > primeiro):
         primeiro = tempos[i]
         ganhador = nomes[i]
     i = i +1

# Laço para procurar o segundo lugar
for i in range(len(nomes)):
     if (tempos[i] == primeiro):
         continue
     if (int(tempos[i]) > segundo):
         segundo = tempos[i]
         vice = nomes[i]
     i = i + 1

# Define o primeiro lugar
print ""
print "Primeiro lugar:", ganhador, "com segundos:", primeiro

# Define o segundo lugar
 print "Segundo lugar:", vice, "com segundos:", segundo

Exercicios: Mostrar o tempo do terceiro ganhador e customizar o código fonte para que fique mais compacto.

Comando While – Python – Linux

Publicado: 3 de fevereiro de 2014 em Python

O comando while executa uma instrução ou um bloco de instruções até que uma expressão especificada seja avaliada como falsa.

No exemplo a seguir vamos criar uma lista de números pares e outra com números impares:

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# pares.py


# Importa OS
import os


# Limpa a tela
os.system("clear")

# Coleta um numero
numero = raw_input("Digite um numero:")


# Converte para inteiro
numero = int(numero)


#Cria numeros iniciais pares e impares
npar = 0
nimpar = 1


# Cria um laço com o numero escolhido
while (npar <= numero):
           print "numeros pares:", npar, "     " , "numeros impares:", nimpar
           npar = npar + 2
           nimpar = nimpar +2


# Lembre-se que looping em Python requer a identação correta
print "Este texto não participa do laço"

Exercício:

Criar um lista de números primos menores do que 1000:

Lembrando que números primos são os números naturais que têm apenas dois divisores diferentes: o 1(um) e ele mesmo.

O resultado de ver ser uma lista numérica entre 2 e 997.

Comando FOR – Python – Linux

Publicado: 3 de fevereiro de 2014 em Python

Executa a declaração e expressão de laço repetidamente, até que a condição da expressão se torna falsa. A instrução for em Python difere um pouco do que você pode estar acostumado em C ou Pascal. Ao invés de sempre interagindo sobre uma progressão aritmética de números (como em Pascal), ou dando ao usuário a capacidade para definir tanto o passo e a condição de parada (como C), Python itera a declaração sobre os itens de qualquer sequência (uma lista ou uma string), na ordem em que aparecem na sequência.

O que o texto acima quer dizer é que o conteúdo dos laços do Python são definidos pela identação do bloco de código ao contrario das outras linguagens em que o conteúdo laços é definido por marcação de inicio e fim.

Você pode visualizar a diferença entre o comando for Python e de outras linguagens clicando aqui

No exemplo a seguir vamos diferenciar os números primos dos números compostos

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# decisao.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Coleta um numero
 numero = raw_input("Digite um numero:")

# Converte para inteiro
numero = int(numero)

# Cria um laço com o numero escolhido
for n in range(2, 10):
for x in range(2, n):
         if n % x == 0:
             print n, "é um numero composto"
             break
     else:
             print n,"é um numero primo"

A  segunda linha # -*- coding: latin-1 -*- parametriza um code page único e previne erros de codificação pois quando você cruza plataformas  arquivos com codificações diferentes independente da sintaxe correta contém caracteres invisíveis que são identificados como erro pelo interpretador do sistema operacional nativo.

Condição IF e ELSE – Python -Linux

Publicado: 3 de fevereiro de 2014 em Python

IF é um dos comandos mais comuns e um dos mais importantes na programação, este comando é responsável pelas tomadas de decisões.

Imagine o seguinte cenário:  nossos colaboradores estão autorizados a fazer um tipo de empréstimos na folha de pagamento, mas o empréstimo é habilitado apenas se o ganho mensal não ultrapassar R$ 1000,00.

Assim devemos verificar o valor do salario e exibir uma mensagem referente ao empréstimo.

Python

#!/usr/bin/env python
# Desenvolvimento Aberto
# decisao.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Cria e alimenta variaveis
codigo = 10
nome = "Joao da Silva"
ativo = True
salario = 1556.00

# Usando mascaras e convertendo
# Imprime as variaveis usando mascaras

print "Codigo:  valor int     %d " % codigo
print "Nome:    valor strig   %s " % nome
print "Ativo:   valor boolean %r" % ativo
print "Salario: valor float   %4.2f" % salario
print ""

# Coleta valor do desconto
desconto = raw_input("Digite o valor do desconto:")

# Calcula e converte desconto
salario = salario - float(desconto)

# Imprime salario liquido
print "Valor do salario liquido: %4.2f" % salario
print ""

# Decide o emprestimo
if (salario >= 1000) :

print "Emprestimo desabilitado"

else:

print "Emprestimo habilitado"

Executar comandos Shell em Python – Linux

Publicado: 3 de fevereiro de 2014 em Python

O Python permite executar uma linha de comando usando a função system importando o modulo os.

#!/usr/bin/env python
# Desenvolvimento Aberto
# shell.py

# Importar modulo do sistema operacional
import os

# Usa o comando do shell ls
#Apaga a tela
os.system("clear")

# Lista arquivos do diretorio
os.system("ls")

Comando de Entrada Python – Linux

Publicado: 3 de fevereiro de 2014 em Python

Seguindo nosso exemplo anterior vamos criar um desconto no salario de nosso colaborador, para isto precisamos perguntar ao usuário qual o valor de desconto desejado.

Usaremos neste caso o comando raw_input:

raw_input: lê do teclado uma string, e a retorna.

#!/usr/bin/env python
# Desenvolvimento Aberto
# entrada.py

# Cria e alimenta variaveis
codigo = 10
nome = "Joao da Silva"
ativo = True
salario = 1556.00

#Usando mascaras e convertendo
#imprime as variaveis usando mascaras
print "Codigo:  valor int     %d " % codigo
print "Nome:    valor strig   %s " % nome
print "Ativo:   valor boolean %r" % ativo
print "Salario: valor float   %4.2f" % salario

#Coleta valor do desconto
desconto = raw_input("Digite o valor do desconto:")

#Calcula e converte desconto
salario = salario - float(desconto)

#Imprime o resultado
print "Valor do salario liquido: %4.2f" % salario

Em Python podemos usar conversores e flags para formatar mensagens.

Lista de conversores e mascaras Python:

%d int mostra um número inteiro
%c char mostra um caracter
%f float ou double mostra um número decimal
%i int mostra um número inteiro
%ld long int mostra um número inteiro longo
%e float ou double mostra um número exponencial (número científico)
%E float ou double mostra um número exponencial (número científico)
%o int mostra um número inteiro em formato octal
%x int mostra um número inteiro em formato hexadecimal
%X int mostra um número inteiro em formato hexadecimal
%s char mostra uma cadeia de caracteres (string)
%b boolean mostra true or false

Vamos utilizar o exemplo de código que usamos no post sobre “variáveis”:

Python

#!/usr/bin/env python
# Desenvolvimento Aberto
# mascaras.py

# Cria e alimenta variaveis
codigo = 10
nome = "Joao da Silva"
ativo = True
salario = 1556.00

#Usando mascaras e convertendo
#imprime as variaveis usando mascaras

print "Codigo:  valor int     %d " % codigo
print "Nome:    valor strig   %s " % nome
print "Ativo:   valor boolean %r" % ativo
print "Salario: valor float   %4.2f" % salario

Observe que na impressão do salario formatamos o valor para duas casas decimais.

Converter Arquivo Texto Entre Windows e Linux

Publicado: 3 de fevereiro de 2014 em Linux

O formato de arquivos de texto Windows e Unix são um pouco diferentes. No Windows, as linhas terminam com caracteres ASCII tanto o avanço de linha e retorno de carro, mas Unix utiliza apenas uma linha de alimentação. Como consequência, alguns aplicativos do Windows não vão mostrar as quebras de linha em arquivos formato Unix. Da mesma forma, programas Unix pode exibir os retornos de carro em arquivos de texto do Windows com (^ H) caracteres no final de cada linha.

Há vários métodos para converter os formatos dos arquivos entre os dois sistemas operacionais, em nosso caso vamos usar o seguinte método:

Windows:

Notepad + + é  um software livre, open source,  editor de código fonte e substituição ao Notepad que suporta várias línguas. Em execução no ambiente MS Windows, o seu uso é regido pela licença GPL.

Site oficial: http://notepad-plus-plus.org/

  1. Abra o texto no Notepad++
  2. Já de primeira você pode visualizar o texto corretamente mas ainda possui o formato unix.
  3. Selecione todo o texto
  4. Va no menu: Editar/Conversão Final de Linha/Converter para formato Windows.
  5. Salvar texto.

Para retornar o texto ao formato original escolha a opção: Converter para formato Unix.

Linux:

No Linux vamos usar o comandos dos2unix e unix2dos, algumas versões do Linux não possui estes comandos por default para instalar digite:


sudo apt-get install dos2unix

Para converter um arquivo do Windows para um arquivo Unix, digite:


dos2unix arquivo.txt

Para converter um arquivo Unix para Windows, digite:


unix2dos  arquivo.txt

Tipos de Variaveis Python – Linux

Publicado: 3 de fevereiro de 2014 em Python

Tipos (Types)

O que precisamos saber antes de estudar Tipos?

Precisamos conhecer o significado do termo “variável”  na área da computação.

O que é uma variável?

Na programação, uma variável é um objeto (uma posição, frequentemente localizada na memória) capaz de reter e representar um valor ou expressão. Enquanto as variáveis só “existem” em tempo de execução, elas são associadas a “nomes”, chamados identificadores, durante o tempo de desenvolvimento.

Quando nos referimos à variável, do ponto de vista da programação de computadores, estamos tratando de uma “região de memória (do computador) previamente identificada cuja finalidade é armazenar os dados ou informações de um programa por um determinado espaço de tempo”. A memória do computador se organiza tal qual um armário com várias divisões. Sendo cada divisão identificada por um endereço diferente em uma linguagem que o computador entende.

O computador armazena os dados nessas divisões, sendo que em cada divisão só é possível armazenar um dado e toda vez que o computador armazenar um dado em uma dessas divisões, o dado que antes estava armazenado é eliminado. O conteúdo pode ser alterado, mas somente um dado por vez pode ser armazenado naquela divisão.

O computador identifica cada divisão por intermédio de um endereço no formato hexadecimal, e as linguagens de programação permitem nomear cada endereço ou posição de memória, facilitando a referência a um endereço de memória. Uma variável é composta por dois elementos básicos: o conteúdo, o valor da variável e identificador, um nome dado à variável para possibilitar sua utilização

O que são Tipos?

São diferentes espécies de  valores que podem ser armazenados e manipulados em uma variável.

Quais são os principais tipos?

boolean: valor de verdade (verdadeiro ou falso).

int: Inteiro (0, 1, -47).

float: número Real (3,14, 1,0, -2,1).

String: Texto “Olá”, “exemplo”.

Em Python e também algumas outras linguagens de programação podemos ter tipos que coincidem como é o caso do exemplo abaixo:

Python


#!/usr/bin/env python
# Desenvolvimento Aberto
# variaveis.py

# Cria e alimenta variaveis
codigo = 10
nome = "Joao da Silva"
ativo = True
salario = 1556.00

# convertendo variaveis para concatenar
#converter inteiro para string
codigo = str(codigo)

#converter boolean para string
ativo = str(ativo)

#converter float para string
salario = str(salario)

#imprime as variaveis
print "Codigo:" , codigo , "Nome:" , nome , "Ativo:" , ativo , "Salario:", salario

Lembre-se a primeira linha do código faz com que o script procure e execute o interpretador Python, experimente rodar o script sem ela.

Exercício:

Amplie o exemplo dado e crie um cadastro de pessoa com dados pessoais, nome de pai e mãe e endereço completo, usando os diferentes tipos de variáveis.

Como a Comentar Corretamente Seu Código

Publicado: 2 de fevereiro de 2014 em C#, C/C++, Java, Python

Imagine o seguinte cenário:

Uma fabrica de software que esta há vários anos no mercado e desenvolve aplicativos para Windows em 5 linguagens de programação  diferentes entre elas: C++, Java, C#, Delphi e Python. A fabrica conta com 5 equipes com 10 desenvolvedores cada. Acontece que ao longo dos anos cada sistema sempre teve sua própria autonomia de desenvolvimento havendo muitos códigos redundantes entre elas. O novo CEO da empresa resolveu  projetar um framework* único em C++  pretendendo poupar horas de programação de código entre as equipes.

O gerente de projeto responsável pelo framework* baixa no gerenciador de código fonte o seguinte código enviado pelo  líder da equipe de Python:

 cidade = raw_imput("Entre uma cidade")
 while cidade[-1]==" " :
         cidade = cidade[:-1]
 temp=raw_input("Entre uma temperatura in farenheit: ")
 temp = float (temp)
 temp = (temp - 32.0) * (100.0/180.0)
 temp = round(temp,3)
 temp = srt(temp)
 print "Na "+cidade+" é "+temp+ " graus celsius!"

Há um monte de problemas com este código fonte. Um rápido exame e nenhuma informação é revelada sobre qual dos nossos funcionários escreveu este código. Qual é o nome do arquivo? O que ele faz? À primeira vista, estamos perdidos. Este código iria receber uma nota 10?

O código fonte é devolvido e reformulado por uma desenvolvedora da equipe,  seguindo as melhores praticas de programação de software e retorna assim:

#Alicia P. Hacker
#Fah_para_Celsius.py

#coleta a cidade
cidade = raw_imput("Entre uma cidade")

#trunca espaços em branco
while cidade[-1]==" " :
cidade = cidade[:-1]

#coleta a temperatura
temp=raw_input("Entre uma temperatura in farenheit: ")

#converte string para float
temp = float (temp)

#Converte graus farenheith para graus celsius
temp = (temp - 32.0) * (100.0/180.0)

#Arredonda para três casas decimais
temp = round(temp,3)

#reconverte string para concatenação
temp = srt(temp)

#imprime o resultado
print "Na "+cidade+" são "+ temp + " graus celsius!"

Podemos ver claramente o nome de Alicia e o nome do seu arquivo. Além disso, ela comentou bem as linhas do seu programa. Este código iria receber uma nota 10.

Você deve ser como Alicia! Você deve comentar onde você puder colocar comentários que explicam o que está fazendo, e se você está fazendo algo complicado ou original não se esqueça de explicar bem.

Uma boa meta é ter um comentário a cada 1-4 linhas de código. Certifique-se de não só documentar o que o código está fazendo, mas, quando você começa a escrever um código mais avançado, você deve documentar o que foi deixado intencionalmente de fora, otimizado, testados e rejeitados, etc, basicamente, qualquer decisão de projeto que você faz.

Uma atividade simples que muitas fabricas de software ignoram  mas que possibilita o entendimento de códigos complicados com mais rapidez , encontrar facilmente os bugs, melhorar a comunicação entre equipes de desenvolvimento, facilidade de visualização além de embelezar o código(code beautifier).

* Framework é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica