Prof. Rogério Fontes / @rogeriofontes
Criado por Guido Van Rossum em meados dos anos 90, o Python é uma linguagem de programação de alto nível, multiplataforma e open source. Ela é multiparadigma, suportando diversos paradigmas de desenvolvimento, como, orientado a objetos, funcional, imperativo, interpretado, entre outros.
Python, possui tipagem dinâmica, ou seja ela não exigige que os tipos de dados sejam declarados, pois são capazes de realizar esta escolha dinamicamente. Com isso, durante a execução ou na compilação, o tipo de uma variável poderá ser alterado.
Python possui como característica a tipagem forte, isso quer dizer que a linguagem não realiza conversões automaticamente entre os tipos suportados.
O conceito de variável em Python é representado sempre por um objeto, tudo Python é objeto, alem disso toda variável é uma referência. Em Python as variáveis armazenam endereços de memória e não os valores, como em outras linguagens.
nome_treinamento = "THS" print(nome_treinamento) # THS
As regras de nomeação das constantes no Python segue o padrão das variáveis. A diferença de que todas as letras são maiúsculas e separadas por underline “_”
VALOR_TEMPERATURA = 10 print(VALOR_TEMPERATURA) # 10
Para imprimir variáveis em Python usa-se a função print (). Com ela é possível imprimir tanto constantes, como nos comandos:
print ("Minha primeira mensagem em Python")
print (34+56)
É possível definir a aparência de um número que será impresso na tela. Para tanto, pode-se usar um comando de formatação dentro de uma string como no trecho
a=3.2
print("Valor = %6.3f " %a)
que gerará como saída a mensagem
Valor = 3.200
Python possui vários tipos básicos ou fundamentais: números inteiros, números de ponto flutuante, booleanos, números complexos, cadeias de caracteres, etc.
O tipo inteiro é representado por toda e qualquer informação numérica que pertença ao conjunto de números inteiros relativos (números positivos, negativos ou o zero).
inteiro = 15 print(type(inteiro)) #
O tipo float é representado por números decimais.
ponto_flutuante = 25.10 print(type(ponto_flutuante)) #
String é uma cadeia de caracteres.
nome = 'THS' print(type(nome)) #
texto = "THS" texto = """THS e um grupo de entuiastas de codigo e hardware e no nivel mais baixo possivel""" print(nome)
meu_nome = "Rogerio Fontes"
meu_nick = '@rogeriofontes'
print ("Nome: %s, Nick: %s" % (meu_nome.upper(), meu_nick))
print ("Meu nome comeca com a letra ", meu_nome[0])
print ("Meu nome comeca com a letra ", meu_nome[0].lower())
print ("Meu primeiro nome é ", meu_nome[0:7])
| Formato do Símbolo | Conversão |
|---|---|
| %c | Caractere |
| %s | String convertida pelo método str() tem prioridade |
| %i | Sinal decimal inteiro |
| %d | Sinal decimal inteiro |
| %u | Decimal inteiro sem negativos (unsigned) |
| %o | Octal inteiro |
| %x | Hexadecimal Inteiro (letras em caixa baixa) |
| %X | Hexadecimal Inteiro (Letras em Caixa ALTA) |
| %e | Notação exponencial (Para letras minúsculas ‘e’) |
| %E | Notação exponencial (Para letras MAIÚSCULAS ‘E’) |
| %f | Ponto flutuante (Números reais) |
| %g | O mais curto de ‘f%’ e ‘%e’ |
| %G | O mais curto de ‘f%’ e ‘%E’ |
Variáveis booleanas armazenam valores lógicos que podem ser verdadeiro ou falso.
booleano = True print(type(booleano)) #
As variáveis de tipo complexo armazenam dados com formato misto, ou seja, dados de diferentes tipos em uma mesma sentença.
numero_complexo = 25 + 3j print(type(complexo)) #
Em Python, a leitura de dados do teclado é feita através das funções raw_input e input, como mostra o exemplo da Listagem 6. Contudo, em versões superiores a 3.0, a função raw_input não funciona.
import sys
nome = input("Digite seu nome: ")
idade = input("Digite sua idade: ")
print("Digite seu sexo: ")
sexo = sys.stdin.readline()
print("Nome:"+nome + "\n" + "Sexo: %s Idade: %s" %(sexo,idade))
Resume como são utilizados os operadores na linguagem.
| Aritméticos | Comparação | Lógicos |
|---|---|---|
| + | == | and |
| - | != | or |
| * | > | not |
| / ou // (parte inteira) | < | |
| % | >= | |
| += -= *= /= | <= | |
| ** | in in not | |
| is |
Condicionais em Python tem uma estrutura básica:
if CONDIÇÃO :
BLOCO DE CÓDIGO
elif CONDIÇÃO :
BLOCO DE CÓDIGO
else :
BLOCO DE CÓDIGO
Em Python não usamos as chaves {} basta identar o código para ter o bloco.
# coding:utf-8
idade = int(input("Você tem quantos anos? "))
if idade == 18:
print("Você tem 18 anos")
elif idade > 18:
print("Você tem mais de 18 anos")
else:
print("Você é menor de idade”)
Outra forma de utilizar o if, elif e else, é implementando-o como uma estrutura switch, onde cada elif vai ter um case dentro do switch.
# coding: utf-8
temperature = int(input("Digite a temperatura:"))
if temperature > 30:
print("Ligue o ar condicionado")
elif temperature > 50:
print("Liga o Alarme de Aviso")
elif temperature < 18:
print("Alarme Desligado")
else:
print("Alarme Desligado")
Existe também a função range(), que retorna um array, ou seja, os elementos são representados em uma sequência
print (range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print (range(5, 10)) # [5, 6, 7, 8, 9]
print (range(10, 0)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
i=int(input("Digite um Número"))
if i in range(0,10):
print("Está Contido")
else:
print("Não está Contido")
No laço de repetição for é implementado em Python e pode ser utilizado de diversas maneiras
# coding: utf-8
alunos = ["Daniela Peixoto", "Rafaela Vieira", "Catarina Barbosa",
"Carlos Eduardo Monteiro", "Laís Barbosa", "Bernardo Alves", "Felipe Pereira", "Sophia Correia",
"Yuri Gonçalves", "Julia das Neves"]
for aluno in alunos:
print("Aluno : " + aluno)
print("------------------------------")
for name in range(2, 8): # range de informaceo
print(alunos[name])
print("------------------------------")
for i in range(0, 10): # (Inclui o Zero, NÃO INCLUI O 10)
print("i = " + str(i))
print("------------------------------")
for i in range(0, 10):
print('Não realizado1')
if i == 0:
break
print('Realizado')
O laço de repetição while no Python tem basicamente a mesma estrutura do for, porém, como no for ou if, não se utilizam os parênteses para definir a condição e seu bloco de instrução também é definido com a identação.
i = 0
while i < 10:
print ("i = ",i)
i += 1
while True:
pass
As exceções podem ser tratadas utilizando o recurso do try...catch tem uma estrutura básica.
try:
print (1 + 'st try')
except:
print ("Isto é uma exceção")
Uma lista é um conjunto de valores indexados por um número inteiro chamado de índice, que se
inicia em zero.
Os elementos contidos em uma lista podem ser de qualquer tipo, até mesmo outras listas, e
não precisam ser todos do mesmo tipo. Uma lista é delimitada por colchetes e seus elementos
separados por vírgulas.
lista = [1, 2, 3]
print ("Tamanho de lista:", len(lista))
lista[0]=9
print("-----------")
for i in range(len(lista)):
print (lista[i])
Usar índices negativos, as posições são acessadas a partir do final da lista.
lista = [1, 2, 3] print (lista[0]) imprime 1; print (lista[1]) imprime valor 2; print (lista[-1]) imprime 3; print (lista[-2]) imprime 2; print (lista[0:2]) imprime [1,2]; print (lista[:2]) imprime [1,2]; print (lista[1:]) imprime [2,3];
A função capitalize() deixa a string em caixa alta.
frutas=['laranja','banana','abacaxi'] frutas.sort() print (frutas) frutas[0]='caju'; for item in frutas: print (item.capitalize())
O código é responsável por criar uma lista adicionando elementos, exibir os convidados e remover um deles, exibindo logo após uma lista atualizada dentro do laço for.
alunos = ["Daniela Peixoto", "Rafaela Vieira", "Catarina Barbosa", "Carlos Eduardo Monteiro", "Laís Barbosa",
"Bernardo Alves", "Felipe Pereira", "Sophia Correia", "Yuri Gonçalves", "Julia das Neves",
"Manuela Aragão"] # define uma lista vazia
print("Tenho ", len(alunos), " Convidados")
alunos.sort()
print("Sao eles:")
print(alunos)
print("O primeiro aluno eh o ", alunos[0])
alunos.remove("Bernardo Alves"); # aqui tiramos o Exemplo 4 da lista
print("Agora tenho somente ", len(alunos), " Convidados")
print("Sao eles:")
for aluno in alunos:
print(aluno)
Até agora foram vistos dois tipos compostos: strings, que são compostos de caracteres; e
listas, que são compostas de elementos de qualquer tipo. Uma das diferenças que notamos é
que os elementos de uma lista podem ser modificados, mas os caracteres em uma string não. Em
outras palavras, strings são imutáveis e listas são mutáveis.
Em Python existem uma tipo chamado tupla (tuple), que é similar a uma lista, exceto por ser
imutável. Sintaticamente, uma tupla é uma lista de valores separados por vírgulas e com
aspas simples.
frutas=('laranja','banana','abacaxi')
frutas.sort()
print (frutas)
frutas[0]='framboesa';
for item in frutas:
print (item.capitalize())
Um mapeamento é uma coleção de associações entre pares de valores, onde o primeiro elemento do par é chamado de chave e o outro de conteúdo. De certa forma, o mapeamento é uma generalização utilizada para acessar os dados das listas pelas suas chaves que funcionariam como índices, contudo estas chaves necessitam ser imutáveis.
veiculo = {}
veiculo['marca'] = 'Puma'
veiculo['modelo'] = 'GTB'
veiculo['ano'] = 1978
print (veiculo['marca'])
dicionario = {"chave":"17,532","chave2": "17,365" }
print (dicionario ["chave"]) #imprime valor (17,532)
Python o conceito de arrays multidimensionais não existe. O que existe é uma alternativa, que são os arrays encadeados, ou seja, cada elemento do array corresponde a outro array, ou como uma list de list em Java.
#Criando uma matriz de 10x5 inicializada com 0
lin=10
col=5
matriz=[]
for i in range(0,lin):
linha=[]
for j in range(0,col):
linha.append(0)
matriz.append(linha)
#varrendo a matriz
for i in range(0,len(matriz)):
for j in range(0,len(matriz[0])):
print (matriz[i][j])
Assim como em outras linguagens, uma função pode receber alguns parâmetros e devolver um resultado. A sintaxe inicia-se com a palavra def, seguida do nome da função e dos parênteses que podem conter seus parâmetros. As funções também são consideradas objetos e têm alguns atributos, dentre os quais os mais úteis são __doc__, o qual contém a documentação da função, e __name__, que contém o nome (apelido) da função.
Mas antes de entrar diretamente no código, é importante abordar sobre a recursividade da linguagem e sobre a documentação da função. Recursividade de uma função basicamente é a definição de uma sub-rotina, seja ela função ou método, que tem a capacidade de invocar a si mesmo como, por exemplo, o fatorial.
Outro recurso é a documentação, que nada mais é do que um comentário dentro da função que é exibido quando utiliza-se o método __doc__
def fatorial (numero): #função recursiva
"""
Funcao recursiva
As três aspas duplas é a documentação
"""
if numero <= 1:
return 1
else:
return (numero * fatorial (numero - 1 ))
for n in range ( 1, 11 ):
print ("Fatorial de",n," eh ", fatorial(n))
print ("\nDoc. da função:\n"+fatorial.__doc__)
Também é possível utilizar função em Python com parâmetros opcionais como, por exemplo, uma função que calcula a potência, onde poderíamos ou não informar o expoente.
def potencia(base,exp=2): # função com parâmetro opcional
if exp==0:
return 1
pot=base;i=1;
while i < exp:
pot=pot*base
i=i+1
return pot
print("Começa aqui!")
print (potencia(2)) # imprime 4
print (potencia(2,8)) #imprime 256
Mas antes de entrar diretamente no código, é importante abordar sobre a recursividade da linguagem e sobre a documentação da função. Recursividade de uma função basicamente é a definição de uma sub-rotina, seja ela função ou método, que tem a capacidade de invocar a si mesmo como, por exemplo, o fatorial.
Em Python, os arquivos são tratados em dois modos como texto ou binário. O arquivo pode estar no formato texto ou binário, e cada linha de um arquivo termina com o caractere especial.
Portanto, uma operação de arquivo pode ser feita na seguinte ordem.
arq=open('/home/rogerioz/meuarquivo.txt', 'w')
arq.write('gravando em um arquivo é simples o')
arq.close ()
arq = open('/home/rogerioz/meuarquivo.txt') # r é default
leitura = arq.read(3)
print(leitura)
restante=arq.read()
print(restante)
| Argumento | Ação |
|---|---|
| W | Sempre cria um novo arquivo para escrita. |
| w+ | O mesmo que “w”, mas abre para escrita e leitura. |
| R | Abre para leitura. |
| A | Abre o arquivo para escrita, mantendo o conteúdo e posiciona o cursor no final do arquivo, utilizado para adicionar conteúdos. |
| a+ | O mesmo que ‘a’, mas abre para leitura e escrita. |
| B | Em combinação com os modos acima, manipula os arquivos binários (wb, rb, ab+,...). |
O Python é uma linguagem de programação orientada à objetos, o que significa que ela possui recursos que dão suporte à programação orientada à objetos (POO).
Classe sempre são repesentaçãos do mundo real. No Python, todas as classes devem, por boas práticas, possuir nomes que comecem com letra maiúscula e, caso sejam compostos, a primeira letra de cada palavra deve ser maiúscula, o que chamamos de formato CamelCase.
class AlunoPresentes() # atributos e metodos vem aqui
Uma classe é representada por atributos e métodos, esses representam as características da classe e os métodos definem o comportamento da classe. Para declarar um atributo em uma classe definimos o nome do atributo no método especial chamado __init__, este método define o construtor da classe. Para definir os atributos de uma classe em seu construtor, basta passá-los como parâmetro
class Aluno: def __init__(self, nome, sexo, cpf): self.nome = nome self.sexo = sexo self.cpf = cpf
Para instanciar um objeto no Python, só precisamos chamar a Classe informando os valores referentes aos seus atributos
class Aluno:
def __init__(self, nome, sexo, cpf):
self.nome = nome
self.sexo = sexo
self.cpf = cpf
if __name__ == "__main__":
pessoa1 = Pessoa("João", "M", "123456")
print(pessoa1.nome)
Para criarmos um método, utilizamos a palavra reservada def
class Aluno:
def __init__(self, nome, sexo, cpf, ativo):
self.nome = nome
self.sexo = sexo
self.cpf = cpf
self.ativo = ativo
def naoPresente(self):
self.ativo = False
print("O aluno não esta presente Hoje")
if __name__ == "__main__":
pessoa1 = Pessoa("João", "M", "123456", True)
pessoa1.naoPresente()
Encapsulamento visa definir o que pode ou não ser acessado de forma externa da classe. para isso precisamos definir os atributos como privado usando (__), com isso precisamos ter metodos para acessar esses atributos get e set.
class Aluno:
def __init__(self, nome, sexo, cpf, ativo):
self.__nome = nome
self.__sexo = sexo
self.__cpf = cpf
self.__ativo = ativo
def naoPresente(self):
self.ativo = False
print("O aluno não esta presente Hoje")
def get_nome(self):
return self.__nome
def set_nome(self, nome):
self.__nome = nome
...
if __name__ == "__main__":
pessoa1 = Pessoa("João", "M", "123456", True)
pessoa1.naoPresente()
# Utilizando geters e setters
pessoa1.set_nome("José")
print(pessoa1.get_nome())
A @property é um decorator integrado à função property() em Python (texto em inglês). Ela é usada para dar uma funcionalidade "especial" a certos métodos para fazer com que ajam como getters, setters ou deleters quando definimos as propriedades em uma classe.
class Aluno:
def __init__(self, nome, sexo, cpf, ativo):
self.__nome = nome
self.__sexo = sexo
self.__cpf = cpf
self.__ativo = ativo
@property
def nome(self):
return self.__nome
@nome.setter
def nome(self, nome):
self.__nome = nome
A @property é um decorator integrado à função property() em Python (texto em inglês). Ela é usada para dar uma funcionalidade "especial" a certos métodos para fazer com que ajam como getters, setters ou deleters quando definimos as propriedades em uma classe.
...
if __name__ == "__main__":
pessoa1 = Pessoa("João", "M", "123456", True)
# Utilizando properties
pessoa1.nome = "José"
print(pessoa1.nome)