Curso de Python – Aula 14 (Orientação a Objetos – Herança)

Uma das vantagens da orientação a objetos é a reutilização de código. A herança se aproveita bem desta vantagem. Vamos a seguinte situação: você quer criar uma agenda em Python e, ao salvar um contato, o usuário poderá optar se este contato será pessoal, profissional ou familiar. Concorda que muitos dados (como nome, telefone e endereço) se repetirão em todos estes tipos de contato? Seria um desperdício de tempo se eu tivesse que repetir todos estes atributos em
todas estas classes, então eu crio uma classe pai chamada Pessoa e declaro atributos como nome, endereço e telefone e faço com que as classes Pessoal, Profissional e Familiar herdem dela. Abaixo segue como seria esta implementação:

class Pessoa:
    nome = ""
    telefone = ""
    endereco = ""

    def __init__(self, nome, telefone, endereco):
        self.nome = nome
        self.telefone = telefone
        self.endereco = endereco

Agora vamos criar a classe filha (vou pegar apenas uma como exemplo, no caso a classe Familiar):

from Pessoa import Pessoa

class Familiar(Pessoa):
    parentesco = ""

    def __init__(self, parentesco, nome, telefone, endereco):
        self.parentesco = parentesco
        Pessoa.__init__(self, nome, telefone, endereco)

Para herdar de alguma classe basta apenas colocar o nome da classe pai entre parenteses na frente do nome da classe filha.

Note que, se a classe pai tem um construtor, ele deve ser chamado no construtor da classe filha.

Vamos colocar a mão na massa!
Crie uma classe pai chamada FormaGeometrica e crie suas classes filhas que se chamarão Quadrado, Retangulo, Triangulo e Circulo. A classe FormaGeometrica deve ter os métodos calculaArea() e calculaPerimetro() e cada uma de suas classes filhas deve sobrescrever estes métodos aplicando-os adequadamente para cada tipo de forma geométrica. Instancie as classes filhas em um arquivo separado, chame seus métodos e mostre os resultados obtidos na tela.

Qualquer dúvida comente o post ou me envie um email.

Boa semana a todos! 😀

Curso de Python – Aula 13 (Orientação a Objetos – Classes)

Classes são basicamente moldes para criação de objetos. É como uma planta de uma casa, a partir dela várias casas podem ser construídas seguindo o mesmo modelo. Em Python uma classe é declarada da seguinte forma:

class NomeClasse:
    # atributos

    # métodos

Vamos criar um exemplo real. Em um arquivo chamado Aluno.py crie a classe abaixo:

class Aluno:
    nome = ""
    ra = 0

    def mostraAluno(self):
        print("Nome: %s" % self.nome)
        print("R.A.: %d" % self.ra)

Em um outro arquivo chame a classe que acabamos de criar:

# O código abaixo significa basicamente o seguinte:
# Do arquivo Aluno importe a classe Aluno.
# Nota: Um arquivo .py pode conter mais de uma classe
from Aluno import Aluno

# diferente de java, não usamos a palavra reservada "new"
# para instanciar um objeto.
aluno = Aluno()

aluno.nome = "Roberto Carlos"
aluno.ra = 1234567890

aluno.mostraAluno()

O resultado será:

Nome: Roberto Carlos
R.A.: 1234567890

O argumento self é utilizado para referenciar a própria instância onde os métodos e atributos se aplicam. Se eu não o utilizasse no método mostraAluno() o interpretador iria entender que os atributos nome e ra pertencem ao método e não a classe.

Apesar de eu ter declarado o argumento self no método mostraAluno(), note que ao chamá-lo não há nada entre os parênteses (na chamada do método não passei nada como parâmetro), isso porque o argumento self sempre será implícito na chamada de um método.

No Python o método contrutor da classe é chamado de __init__ (dois underscore antes e dois depois da palavra init). Ele será executado assim que a instância for criada. Ex:

class Aluno:
    nome = ""
    ra = 0

    def __init__(self, nome="", ra=0):
        self.nome = nome
        slef.ra = ra

    def mostraAluno():
        print("Nome: %s" % self.nome)
        print("R.A.: %d" % self.ra)

Agora instancie a classe e chame seu método mostraAluno():

from Aluno import Aluno

aluno = Aluno("Roberto Carlos", 1234567890)

aluno.mostraAluno()

O resultado será:

Nome: Roberto Carlos
R.A.: 1234567890

Bora praticar? 😀
O exercício de hoje será bem simples, apenas crie uma classe chamada Calculadora onde esta terá quatro métodos: somar, subtrair, multiplicar e dividir. Cada método deverá conter pelo menos dois parâmetros (num1, num2, etc). Instancie esta classe em um arquivo de código separado e chame seus métodos.

Por hoje é só! Qualquer dúvida comente o post ou me envie um email.

Um abraço e até a próxima 😉

Curso de Python – Aula 12 (Funções)

Funções são blocos de código identificados por um nome; elas podem receber argumentos e retornar (ou não) um valor. A sintaxe de uma função é basicamente como o exemplo a seguir:

def funcao(valor=0):
    valor = valor + 10
    return valor

Note que em python não declaramos o tipo de retorno da função.

Como já foi dito, uma função também pode não retornar nenhum valor e também podem não ter nenhum valor passado como parâmetro. Ex:

def funcao():
    print("Esta é uma função sem parâmetros e sem retorno.")

Vamos ver mais sobre funções quando entrarmos em orientação a objetos.

Agora vamos praticar!
1 – Faça um programa, com uma função que necessite de três argumentos, e que forneça a soma desses três argumentos.
2 – Faça um programa, com uma função que necessite de um argumento. A função retorna o valor de caractere ‘P’, se seu argumento for positivo, e ‘N’, se seu argumento for zero ou negativo.
3 – Reverso do número. Faça uma função que retorne o reverso de um número inteiro informado. Por exemplo: 127 -> 721.

Qualquer dúvida comente o post ou me envie um email. Boa semana e até a próxima 😉

Curso de Python – Aula 11 (Estruturas de Repetição – For e While)

A estrutura for é a mais utilizada em Python, ela funciona da seguinte maneira: a cada iteração do laço é atribuído o valor a variável declarada no for. Ex:

lista = [1, 2, 3]

for item in lista:
    print(item)

O resultado será:

    1
    2
    3

Outra forma de utilizar o laço for é a seguinte:

for i in range(0,5):
    print(i)

O resultado será:

    0
    1
    2
    3
    4

A função range() gera uma sequência numérica. No nosso caso, uma sequência de 5 números iniciando em 0. É muito comum utilizar-se desta função juntamente com o laço de repetição for em python.

Outro laço existente em Python é o while. Ele executa um bloco de código enquanto a condição for verdadeira. Ex:

item = 1
lista = []

while item <= 10:
    lista.append(item)
    item = item + 1

print(lista)

O resultado será:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Deve-se apenas tomar cuidado para que a condição não seja sempre verdadeira, pois caso isso ocorrer o resultado será um loop infinito.

Now, let’s practice! 😀
1 – Faça um programa que leia 5 números e informe o maior deles.
2 – Faça um programa que peça dois números, base e expoente, calcule e mostre o primeiro número elevado ao segundo número. Não utilize a função de potência da linguagem.
3 – Faça um programa que calcule o mostre a média aritmética de N notas.
4 – Sendo H= 1 + 1/2 + 1/3 + 1/4 + … + 1/N, Faça um programa que calcule o valor de H com N termos.

Qualquer dúvida comente o post ou me envie um email.

Uma boa semana e até a próxima 😉

Curso de Python – Aula 10 (Operadores Aritméticos, Lógicos e Estrutura de Decisão “IF”)

Abaixo segue uma lista com os operadores aritméticos utilizados em Python:

    + → soma
    → subtração
    * → multiplicação
    / → divisão
    // → divisão de inteiros
    ** → potenciação
    % → módulo (resto da divisão)

Segue também os operadores lógicos:

    > → maior
    = → maior ou igual
    <= → menor ou igual
    == → igual
    != → diferente
    not → Operador lógico que representa a negação (inverso) da variável atual. Se ela for verdade, torna-se falsa, e vice-versa.
    and → Operador lógico onde a resposta da operação é verdade se ambas as variáveis de entrada forem verdade.
    or → Operador lógico onde a resposta da operação é verdade se e somente se pelo menos uma das variáveis de entrada for verdade.

Em Python a estrutura de um if é basicamente a seguinte:

if <condição>:
    #código aqui
elif <condição>:
    #código aqui
else:
    #código aqui

Note que não há, como em boa parte das linguagens, algo como {} para delimitar o escopo, pois em Python a própria identação tem essa função.

Abra um editor de sua preferência e digite o código abaixo:

# -*- coding: latin1 -*-

var = raw_input(“Digite um número inteiro: ”)

if int(var) > 5:
    print(“O número digitado é maior que 5”)
elif int(var) < 5:
    print(“O número digitado é menor que 5”)
else:
    print(“O número digitado é 5”)

Salve o arquivo como decisao.py e execute-o. Teste as 3 possibilidades para verificar se o código realmente funcionou. Note que utilizei uma função diferente chamada raw_input(), ela serve para pegar um valor informado pelo usuário, porém este valor sempre será uma string, por isso utilizei o método int() para converter o valor digitado pelo usuário para inteiro. Existem ainda outras funções para conversão explícita, como float() e complex().

Nota: Uma maneira mais fácil de desenvolver este exemplo acima seria, ao invés de utilizar a função raw_input(), utilizar apenas a função input(), pois esta “pega” o valor digitado pelo usuário e, utilizando-se da tipagem dinâmica do Python, identifica qual o tipo do valor digitado, assim não precisaríamos utilizar conversão explícita. Apenas escrevi o código desta forma para, além de explicar a estrutura de um if, explicar também o funcionamento de funções que realizam conversão explícita.

Agora vamos aos exercícios!
1 – Faça um Programa que peça dois números e imprima o maior deles.
2 – Faça um Programa que leia três números e mostre o maior e o menor deles.
3 – Faça um Programa que leia um número e exiba o dia correspondente da semana. (1-Domingo, 2- Segunda, etc.), se digitar outro valor deve aparecer valor inválido.
4 – Faça um Programa que peça um número correspondente a um determinado ano e em seguida informe se este ano é ou não bissexto.
5 – Faça um Programa que peça um número inteiro e determine se ele é par ou impar. Dica: utilize o operador módulo (resto da divisão).

Qualquer dúvida comente o post ou me envie um email.

Boa semana e até a próxima 😉

Curso de Python – Aula 9 (Comentários e DocStrings)

A partir de agora vamos utilizar menos o interpretador interativo e vamos trabalhar mais com arquivos de extensão .py. Abra um editor de texto de sua preferência (menos editores rich como MS Word e libreoffice-writer) e digite o código abaixo:

# -*- coding: latin1 -*-

# Exemplo de código com comentários e docstrings

'''
Este arquivo está bem documentado
'''

print("Meu primeiro código em arquivo!!!")

Salve como hello.py e execute-o da seguinte forma: abra o terminal e vá até a pasta onde se encontra o arquivo e digite python hello.py. O resultado deverá ser o seguinte:

    Meu primeiro código em arquivo!!!

Tudo o que vier após o símbolo # e entre três aspas simples (”’ ”’) ou duplas (“”” “””) será ignorado pelo interpretador. O símbolo # é utilizado para comentários e palavras entre as três aspas são docstrings (documentação).
Comentários e documentações são boas práticas de programação, pois auxiliam na interpretação do código. Para acessar docstrings utilizamos o método __doc__. Ex: Crie um novo arquivo e digite o código abaixo:

# -*- coding: latin1 -*-

def documentacao():
    '''
    Dica do dia:
    Sempre documente seu código!
    '''

print(documentacao.__doc__)

Salve como documentacao.py e execute-o. O resultado deverá ser como mostrado abaixo:

    Dica do dia:
    Sempre documente seu código!

Voltando ao nosso arquivo hello.py, note que a documentação fica fora de um método, para acessá-la abra o interpretador interativo do python apenas digitando python no terminal. Utilize o comando import para importar o arquivo hello.py e acesse sua documentação pelo método __doc__ como no exemplo abaixo:

>>> import hello
>>> print(hello.__doc__)

Este arquivo está bem documentado

>>>

Agora vamos praticar!
Refaça um dos exercícios já sugeridos neste curso, porém agora documente-o bem e tente acessar esta documentação.

Qualquer dúvida comente o post ou me envie um email.

Um abraço e até a próxima 😉

Curso de Python – Aula 8 (Tipos de Dados – Strings)

String é uma sequência imutável que armazena uma cadeia de caracteres. Existem apenas 2 tipos de strings:
• String padrão
• String unicode
Para converter uma string padrão para unicode usa-se o método unicode().

Para inicializar uma string pode-se fazer de 3 formas: utilizando aspas simples (), aspas duplas (“”) ou, se a string ocupar várias linhas, utilizar 3 aspas simples ou duplas(“”” “”” ou ”’ ”’). Ex:

>>> simples = 'hello'
>>> duplas = "world"
>>> varias_linhas = '''Hello
... Beautiful
... World!!!'''
>>> print(simples)
hello
>>> print(duplas)
world
>>> print(varias_linhas)
Hello
Beautiful
World!!!
>>>

Para obter um caracter em determinada posição basta fazer como abaixo:

>>> nome = "Astrogildo"
>>> print(nome[0])
A
>>>

Se você quiser obter o intervalo de uma string basta fazer como o exemplo abaixo:

>>> nome = "Ronaldo"
>>> intervalo = nome[2:7]
>>> print(intervalo)
naldo
>>>

A variável intervalo recebeu o conteúdo da string nome no intervalo entre o índice 2 e o índice 7.

Se você tiver a certeza de que o primeiro ou o último caractere fará parte do intervalo pode-se omitir um destes na declaração. Ex:

>>> nome = "Hebe"
>>> intervalo1 = nome[2:]
>>> intervalo2 = nome[:3]
>>> print(intervalo1)
be
>>> print(intervalo2)
Heb
>>>

Você também pode acrescentar um incremento, por exemplo, se eu quiser uma string do índice 2 ao 10 e com intervalo de 3 posições eu faço como o exemplo abaixo:

>>> palavra = "Inconstitucionalissimamente"
>>> intervalo = palavra[2:10:3]
>>> print(intervalo)
cst
>>>

Para formatar strings usa-se o operador %. Segue um exemplo abaixo:

>>> inteiro = 5
>>> item = "chocolate"
>>> print("Joaozinho possui %d barras de %s" % (inteiro, item))
Joaozinho possui 5 barras de chocolate
>>>

Note que após o operador % segue um outro símbolo, no nosso caso o d e o s. Eles, junto ao operador %, servem para informar o tipo de dado e a posição em que ele será apresentado na string. O %s serve para apresentar strings, já o %d inteiros. Abaixo segue todos os outros tipos:

    %s → string
    %d → inteiro
    %f → real, ponto flutuante
    %o → octal
    %x → hexadecimal
    %e → exponencial
    %% → porcentagem

Pode-se também ter o controle sobre o número de casas que serão apresentadas na string. Ex:

>>> preco = 50.75789632511
>>> print("O valor total será de R$ %.2f" % preco)
O valor total será de R$ 50.76
>>>

Agora vamos praticar! Para isso faça programas que atendam as especificações abaixo:
1 – Ler uma frase (string ) e contar o número de palavras dessa frase. Considere que as palavras estão separadas por espaços brancos ou vírgulas.
2 – Ler duas strings e retirar da primeira string todas as letras que ocorrem na segunda string. Exemplo: Sejam as strings “chocolate” e “oca”, então a primeira string ficará “hlte”.
3 – Ler uma string e copiar seu conteúdo invertido em uma outra variável do tipo string. Exemplo: Se a string digitada for “JANELA”, então a outra string deverá conter: “ALENAJ”.
4 – Ler duas strings e verificar se as mesmas são iguais.

Boa sorte! Bom trabalho! Qualquer dúvida comente o poste ou me envie um email.

Um abraço e até a próxima 😉

Curso de Python – Aula 7 (Tipos de Dados – Coleções – Dicionários)

Os dicionários são um pouco diferente das listas e tuplas, pois seus itens não são acessados via índices, mas sim via palavras chaves. A sintaxe de um dicionário é a seguinte:

>>> dicionario = {'dahora':'legal, bacana', 'a casa caiu':'deu errado'}
>>>

Como já foi dito, utiliza-se as palavras chaves (exatamente como foram inseridas) para acessar um elemento de um dicionário. Ex:

>>> print(dicionario['a casa caiu'])
deu errado
>>> print(dicionario['dahora'])
legal, bacana
>>>

Para inserir novos valores basta informar a nova chave a atribuir um valor a ela. Ex:

>>> dicionario['supimpa'] = 'demais, legal'
>>>
Para apagar um elemento do dicionário utiliza-se o método del(). Ex:
>>> del(dicionario['a casa caiu'])
5>>> print(dicionario)
{'dahora': 'legal, bacana', 'supimpa': 'demais, legal'}
>>>

Abaixo segue alguns dos principais métodos do dicionário:
items(), que retorna todos os itens contidos no dicionário. Ex:

>>> dicionario = {'show de bola':'demais, bom demais'}
>>> dicionario['massa'] = 'muito legal'
>>> dicionario.items()
[('show de bola', 'demais, bom demais'), ('massa', 'muito legal')]
>>>

keys(), que retorna todas as chaves do dicionário. Ex:

>>> dicionario.keys()
['show de bola', 'massa']
>>>

values(), que retorna todos os valores contidos no dicionário. Ex:

>>> dicionario.values()
['demais, bom demais', 'muito legal']
>>>

Pra finalizar vamos praticar um pouco:
Faça um programa que cadastre no mínimo 10 palavras em um idioma de sua escolha e exiba a tradução (para português) de cada uma delas.

Qualquer dúvida comente o post ou me envie um email.

Um abraço e até a próxima 😉

Curso de Python – Aula 6 (Tipos de Dados – Coleções – Tuplas)

As tuplas são basicamente como as listas, porém são imutáveis. Para declarar uma tupla basta fazer como no exemplo abaixo:

>>> tupla = (1, 2, 3)
>>>

Para acessar um item da tupla usa-se a mesma sintaxe que se usa na lista:

>>> print(tupla[2])
3
>>>

Para adicionar apenas um item a tupla utiliza-se a seguinte sintaxe:

>>> tupla = (1, )
>>>

Para verificar o tamanho de uma tupla utiliza-se o método len() (este método se aplica também a strings, listas e dicionários):

>>> tupla = (1, 2, 3, 5, 9, 20)
>>> len(tupla)
6
>>>

Bom, como não temos muita coisa para ver em tuplas vamos fazer alguns exercícios:
1 – Faça um programa que leia uma tupla que contenha 10 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes.
2 – Faça um programa que leia uma tupla com 5 números inteiros e escolha 2 operações aritméticas para aplicar a eles.

Qualquer dúvida comente o post ou me envie um email.

Um abraço e até nossa próxima aula 😉

Curso de Python – Aula 5 (Tipos de Dados – Coleções – Listas)

Em Python há basicamente 3 tipos de coleções:

    Listas
    Tuplas
    Dicionários

Listas são coleções de objetos. É basicamente a mesma idéia de um vetor em outras linguagens. Uma lista pode conter quaisquer valores, inclusive tipos mistos (inteiros e strings, por exemplo) e outras listas dentro dela. No exemplo abaixo vou declarar um tipo lista e imprimir seus valores:

>>> lista = [5, "Foo", 3.14, [1, 2, 3]]
>>> print(lista)
[5, 'Foo', 3.14, [1, 2, 3]]
>>>

Para acessar um elemento da lista basta informar sua posição (lembrando que em Python os elementos sempre iniciam em 0). Ex:

>>> print(lista[0])
5
>>>

Utilizando o operador + posso concatenar duas listas. Ex:

>>> lista1 = [1, 2, 3]
>>> lista2 = [4, 5, 6]
>>> lista3 = lista1 + lista2
>>> print(lista3)
[1, 2, 3, 4, 5, 6]
>>>

Para adicionar um elemento ao final da lista utiliza-se o método append(). Ex:

>>> lista3.append(7)
>>> print(lista3)
[1, 2, 3, 4, 5, 6, 7]
>>>

Ou você pode concatenar o elemento a lista. Ex:

>>> lista4 = lista3 + [8]
>>> print(lista4)
[1, 2, 3, 4, 5, 6, 7, 8]
>>>

Para remover um item de sua lista utiliza-se os seguintes métodos: remove() ou pop(). O método remove() irá remover o primeiro item da lista que contenha o valor informado no método, já o pop() irá remover o item da lista pelo índice informado. Ex:

>>> print(lista4)
[1, 2, 3, 4, 5, 6, 7, 8]
>>> lista4.remove(8)
>>> print(lista4)
[1, 2, 3, 4, 5, 6, 7]
>>> lista4.pop(0)
1
>>> print(lista4)
[2, 3, 4, 5, 6, 7]
>>>

Outros métodos importantes são:
insert(), que irá inserir um item na posição informada. Ex:

>>> lista = [1, 2, 3]
>>> index = 3
>>> lista.insert(index, 4)
>>> print(lista)
[1, 2, 3, 4]
>>>

extend(), que é semelhante ao método append(), porém ao invés de um valor qualquer ele adiciona uma lista ao final da sua lista. Ex:

>>> lista1 = [1, 2, 3]
>>> lista2 = [4, 5, 6]
>>> lista1.extend(lista2)
>>> print(lista1)
[1, 2, 3, 4, 5, 6]
>>>

index(), que retorna o índice do item informado. Ex:

>>> lista = ['A', 'B', 'C']
>>> lista.index('B')
1
>>>

count(), que retorna o número de vezes que o valor se repete na lista. Ex:

>>> lista = ['A', 1, 'B', 1, 'C', 'A', 1, 'D']
>>> lista.count(1)
3
>>> lista.count('A')
2
>>>

sort(), que ordena os itens da lista. Ex:

>>> lista = [3, 4, 1, 0, 2, 5]
>>> lista.sort()
>>> print(lista)
[0, 1, 2, 3, 4, 5]
>>>

reverse(), que inverte a ordem dos itens da lista. Ex:

>>> lista = [0, 1, 2, 3, 4, 5]
>>> lista.reverse()
>>> print(lista)
[5, 4, 3, 2, 1, 0]
>>>

Agora chegou a hora mais esperada: hora de praticar 😀
Dada a seguinte lista: [0, 10, 9, 4, 6, 8, 7, 3, 1, 5, 2]
1 – Ordene-a de forma que ela fique assim: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0].
2 – Remova todos os números ímpares e insira os valores removidos em outra lista.
3 – Concatene as duas listas criadas.

Qualquer dúvida comente o post ou me envie um email.

Um abraço e até a próxima 😉