2.2 Data Types and Operators

2.2.1 Conceitos Gerais

A maior parte do curso destina-se aos conceitos básicos.

  • A indentação é importante para o Python porque ele define quando termina um loop e começa o outro ou quando termina um statement do if;
  • Como muitas outras linguagens de programação o Python é case sensitive, isto é, maiúsculas e minúsculas definem variáveis diferentes;
  • Os comentários dentro do código pode ser feito a partir do uso do #. ********************************************************** ### Boas práticas

  • Utilizar os espaçamentos de maneira adequada para que as fórmulas fiquem fáceis de ler e consequentemente de entender;
  • Comentar as linhas de código, pois o maior beneficiário desses comentários será você daqui 6 meses quando estiver revisando esse código;


2.2.2 Configuração

Instalei o Anaconda e estou rodando o Spyder 3.3.1. para simular/rodar o Python. O CodeSkulptor 3 é um alternativa.

2.2.2.1 Classes de Variáveis

Define-se as variáveis conforme as suas características e do seu uso, por exemplo, um 32 pode ser um número inteiro, até mesmo um número flutuante e um caracter. Tudo dependerá de como se define ele, usando-se as aspas ter-se-á um caracter, sem o “ponto final” é um número inteiro e com o ponto final o número de ponto flutuante (mais conhecido como float).

A tabela abaixo foi retirada do 39.Summary da lesson 02.

Data Structure Ordered Mutable Constructor Example
int NA NA int() 5
float NA NA float() 6.5
string Yes No ‘’ ou " " ou str() “teste”
bool NA NA NA True ou False
list Yes Yes [ ] ou list() list[1,2]
tuple Yes No ( ) ou tuple() tuple(1,2)
set NA Yes { } ou set() set(1,2)
dictionary NA Keys: No { } ou dict() dict(“jul”:1,“jun”:2)

2.2.2.2 Inteiros e float’s

Como atribuir um integer e um float nas variáveis?

# Integer
teste_int = 100    # É um inteiro (não colocar o ponto final)
teste_int = 123    # É um inteiro (não colocar o ponto final)

# Float
teste_flo = 100.8  # É um float (só adicionar o ponto final)
teste_flo = 123.   # É um float (só adicionar o ponto final)

Note que haverá um conversão (ou data coercion ) de integer para float caso tenha alguma operação envolvendo os dois tipos de variáveis.

# A nova variável será do tipo float
teste_new = teste_int + teste_flo

Observe que as variáveis podem ser convertidas para integer, float etc. Contudo, deve-se ressaltar que para os casos de conversão de float para integer pode-se ter uma perda de informação significativa.

teste = 100.987      # Variável float

teste = int(100.987) # Convertendo para integer

print(teste)         # Note que o valor impresso é 100
                     # perdeu-se tudo o que estava após a vírgula

2.2.2.3 Boolean bool

Além de integer e float, também há o bool que se refere aos booleanos (True e False). Observe que para o Python True e False (1 e 0) devem ser escritos exatamete como está neste texto, em R eles são escritos todos em caixa alta.

2.2.2.4 Strings str

O strings é uma cadeia de letras, um exemplo é o texto que estou escrevendo agora.

print("Hello World")  # É a impressão de uma simples string "Hello World", mas poderia
                      # ser bem mais complexa.

meu_texto = "Vamos fazer um teste!111"   # Note que esse exemplo é um pouco mais complexo
print(meu_texto)                         # já que tem espaços, números e caracteres especiais.

Surpreenda-se pois no Python pode-se usar os operadores (+, * etc.) para realizar algumas funções.

  • + Une/concatena duas strings;
  • * Multiplica a string.

2.2.2.5 Containers

A list é uma estrutura de dados que pode conter integer, floats, strings e booleans. Os benefícios das lists é que elas podem ser alteradas (mutability) e também podem ser reorganizadas.

minha_lista = [33 , "anderson" , True , 123.45] # Pode ser tudo misturado
minha_lista[0]                                  # Começa no zero - zero index based
minha_lista[-1]                                 # Tem os seus truques! Último elemento.
minha_lista[2:]                # Slicing        # Retorna os elementos cujo index é maior que 2
minha_lista[:2]                # Slicing        # Retorna os elementos cujo index é menor ou igual a 2
minha_lista[2:3]               # Slicing        # Retorna os elementos cujo index é maior que 2 e menor ou igual a 3

Uma variable da classe tuple é um tipo de lista imutável, isto é, não tem como usar .sorted(). Eles possuem uso específico, por exemplo, em latitude e longitude, pois sempre estão juntos.

# Defining a tuple variable
my_name = "anderson","uyekita"

# Tuple unpacking
pri_nom,sob_nom = my_name

# Editing/Updating a tuple variable
my_name = "jose","silva"

Observe que não é necessário o uso dos parêntesis. Há a particularidade do “tuple unpacking” que é atribuir todos os valores do tuple de uma só vez em outras variáveis, conforme o exemplo.

Uma variável do tipo set possui algumas características marcantes como: é mutável, portanto, pode-se alterar os valores desse container de elementos, mas ela não é ordenada, ou seja, não se tem ideia de quem é o primeiro ou último elemento. Além dessas características, ela não admite valores duplicados.

# Definição de uma lista simples
minha_lista = [1,2,3,1,2,3,4,5,6] # há valores duplicados

meu_set = set(minha_lista)        # {4, 3, 2, 1, 5, 6}
                                  # Agora é um <class 'set'>

Como o set é unordered todas as vezes que imprimir essa variável dessa classe a sequencia dos elementos alterará. Ressalta-se que o in funciona nas variáveis da classe set. Además, há methods específicos para essa classe que será descrita adiante.

O dictionary é uma estrutura de dados peculiar que possui um key que pode ser usado para mapear sendo esse key tendo um value.

# Example dictionary
elements = {"anderson": 1, "hitoshi": 2, "uyekita": 3}

elements["key"] = "value"      # Add value mapped by key
elements["teste"] = 9          # Add a new variable in the dictionary
elements["uma_lista"] = [1,2]  # Add a list
elements["100"] = "a"          # Other example

Observe que o dictionary é bem eclético, tem de tudo e aceita tudo. Pode-se usar o operador in o qual terá um retorno booleano. O método .get() é usado para ter o retorno do value da um dado key.

O nested dictionary é o uso de um dictionary tendo os seus values um outro dictionary.

# Exemplo retirado do site da Udacity.
elements = {"hydrogen": {"number": 1,
                         "weight": 1.00794,
                         "symbol": "H"},
              "helium": {"number": 2,
                         "weight": 4.002602,
                         "symbol": "He"}}

Sendo assim possível organizar informações estruturadas.


2.2.3 Operadores

São os operadores matemáticos básicos:

2.2.3.1 + Adição

Adiciona dois elementos.

print(5 + 3) # Somando dois números inteiros

print("Hello" + " " + "World") # Somando três strings

2.2.3.2 - Subtração

Subtrai dois elementos.

print(5 - 3)

2.2.3.3 * Multiplicação

Multiplica dois elementos.

print(5 * 3)

print("Ha" * 5)  # Terá como saída HaHaHaHaHa

2.2.3.4 / Divisão

Divide dois elementos.

print(5 / 3) # Retorna um float

2.2.3.5 % Resto da Divisão

Divide dois elementos e retorna o resto da divisão.

print(5 % 3) # Retorna 2

2.2.3.6 ** Exponenciação

Eleva o primeiro termo ao segundo (normalmente anotamos como 5^3).

print(5 ** 3) # Retorna cinco elevado à terceira potência 5^3

2.2.3.7 // Retorna o Quociente da Divisão

Divide dois elementos e retorna o quociente da divisão.

print(5 // 3) # Retorna 1

2.2.3.8 in e not it Possui/Pertecen/Tem

O retorno desse operador é um valor booleano resultante da busca do primeiro elemento no segundo.

print("hitoshi" in ["anderson","hitoshi","uyekita"])       # Retorna True
print("hitoshi" not in ["anderson","hitoshi","uyekita"])   # Retorna False

2.2.4 Assignment Operators

Conforme abordado em sala de aula, essa forma de notação é para simplificar o código. É muito parecido com o i++(que é o mesmo que i=i+1) do C++.

2.2.4.1 +=

Atualização da variável a partir de soma.

teste = teste + 100   # Como eu faço
teste += 100          # Como um programador faz

2.2.4.2 -=

Atualização da variável a partir de uma subtração.

teste = teste - 100   # Como eu faço
teste -= 100          # Como um programador faz

2.2.4.3 *=

Atualização da variável a partir de uma multiplicação.

teste = teste * 100   # Como eu faço
teste *= 100          # Como um programador faz

2.2.4.4 /=

Atualização da variável a partir de uma divisão.

teste = teste / 100   # Como eu faço
teste /= 100          # Como um programador faz

2.2.4.5 //=

Atualização da variável pelo quociente de uma divisão.

teste = teste // 100   # Como eu faço
teste //= 100          # Como um programador faz

2.2.4.6 %=

Atualização da variável pelo resto de uma divisão.

teste = teste % 100   # Como eu faço
teste %= 100          # Como um programador faz

2.2.4.7 **=

Atualização da variável pelo resto de uma divisão.

teste = teste ** 100  # Como eu faço
teste %= 100          # Como um programador faz

Há outros mais complicados no site do Programiz.


2.2.5 Comparison Operators

Lógica básica de comparação entre dois argumentos, igual a qualquer outra linguagem de programação.

2.2.5.1 < Menor

Compara dois elementos e retorna True ou False.

100 < 90  # 100 é menor que 90
False     # Não

2.2.5.2 > Maior

Compara dois elementos e retorna True ou False.

100 > 90  # 100 é maior que 90
True      # Sim

2.2.5.3 <= Menor ou igual

Compara dois elementos e retorna True ou False.

100 <= 90  # 100 é menor ou igual a 90
False      # Não

2.2.5.4 >= Maior ou igual

Compara dois elementos e retorna True ou False.

100 > 90  # 100 é maior ou igual a 90
True      # Sim

2.2.5.5 == Igual

Compara dois elementos e retorna True ou False.

100 == 90  # 100 é igual (ou idêntico) a 90
False      # Não

2.2.5.6 != Diferente (ou não igual)

Compara dois elementos e retorna True ou False.

100 != 90  # 100 é differente de 90
True       # Sim

2.2.6 Logical Operators

O Python possui 3 operadores de lógica que são: and, or e not. Eles devem ser escritos necessariamente em letras minúsculas.

2.2.6.1 and

Comporta-se conforme a tabela abaixo

a b s
0 0 0
0 1 0
1 0 0
1 1 1

2.2.6.2 or

Comporta-se conforme a tabela abaixo

a b s
0 0 0
0 1 1
1 0 1
1 1 1

2.2.6.3 not

Retorna o booleano contrário.

a s
0 1
1 0

2.2.7 Built-in functions

Esta será um lista das funções e qualquer outra coisa que foi apresentado em sala de aula.

2.2.8 print()

print("Hello World")  # Imprime Hello World

Imprime a variável.

2.2.9 type()

teste = type(100)    # Atribui o resultado da função em teste
print(teste)         # Imprime a classe da variável dentro do type()
                     # que no caso é 100. Logo, será <class 'int'>

Retorna o tipo de variável.

2.2.10 len()

print(len("Hello World"))  # Retorna 11, pois conta o espaço também.

Retorna o comprimento de uma strings, isto é, a quantidade de caracteres. E para os casos de um vetor retorna o comprimento.

2.2.11 int()

int(43.3)

Converte o elemento declarado na função para um integer.

2.2.12 str()

str(43.3)

Converte o elemento declarado na função para um string.

2.2.13 float()

str(43)

Converte o elemento declarado na função para um float.

2.2.14 max()

print(max([100,40,50,30,20]))                                       # Retorna 100
print(max(["anderson","hitoshi","uyekita","mogi","das","cruzes"]))  # Retorna uyekita

Retorna o maior número dentro de uma lista. Note que só funcionará quando a lista for só de um tipo de variável.

2.2.15 min()

print(min([100,40,50,30,20]))                                       # Retorna 20
print(min(["anderson","hitoshi","uyekita","mogi","das","cruzes"]))  # Retorna anderson

Retorna o maior número dentro de uma lista. Note que só funcionará quando a lista for só de um tipo de variável.

2.2.16 sorted()

print(sorted(["anderson","hitoshi","uyekita","mogi","das","cruzes"]))                  # Retorna uma lista começando por anderson e terminando com uyekita
print(sorted(["anderson","hitoshi","uyekita","mogi","das","cruzes"], reverse = True))  # Retorna uma lista começando por uyekita e terminando com anderson

Conforme a sua tradução, ordenará a lista de forma alfabética ou do menor para o maior. Ele pode reverter a forma de ordenar os retornos “setando” o argumento reverse para True.

2.2.17 Methods

Como o Python é uma linguagem orientada a objeto, há alguns methods relacionado a alguma classe. O funcionamento de um método é similar ao de uma função, contudo o método está ligado a alguma classe e só será útil para essa classe. Isto quer dizer que não há possibilidade de usar o .title() num número integer ou float.

2.2.18 .title()

meu_nome = "anderson uyekita"
print(meu_nome.title())

O retorno da aplicação do método .title() é a substituição das primeiras letras minúsculas do meu nome para maiúsculas, ficando assim " Anderson Uyekita "

2.2.19 .islower()

meu_nome = "anderson uyekita"
print(meu_nome.lower())

O retorno da aplicação deste método retorna um booleano e significa se há ou não alguma letra maiúscula, se sim False senão True.

2.2.20 .format()

# Exemplo 1
print("Eu sou o Hitoshi e tenho {} anos".format(33))

# Exemplo 2 (retirado das notas de aula)
animal = "dog"
action = "bite"
print("Does your {} {}?".format(animal, action))

O retorno desse método é a substituição dos {} pelo 33.

2.2.21 .split()

meu_nome = "anderson hitoshi uyekita"

print(meu_nome.split())  # Como resultado tem-se uma lista
                         # ['anderson', 'hitoshi', 'uyekita']

Conforme o nome diz, divide uma string baseado em algum separador que pode ser o espaço (default), tabulação, traços, pontos, etc.

2.2.22 .join()

print(" ".join(["anderson","hitoshi","uyekita","mogi","das","cruzes"])) # Retorna uma string com espaços separando os elementos da lista.

É o inverso do .split(). Atente-se que o “separador” é declarado antes do método .join(), neste exemplo é o " " é o espaço.

2.2.23 .append()

meu_nome = ["anderson","hitoshi"] # Minha lista
meu_nome.append("uyekita")        # Agregando na minha lista o meu sobrenome

Esse method altera a lista original meu_nome.

2.2.24 .add()

meu_nome = {"anderson","uyekita"}  # Para criar um set basta usar os {}

meu_nome.add("hitoshi")            # {"anderson","uyekita","hitoshi"}

A função adiciona um novo elemento (ou novos elementos) na variável set designada.

2.2.25 .pop()

meu_nome = {"anderson","uyekita","hitoshi"}  # Para criar um set basta usar os {}

meu_nome.pop("hitoshi")                      # Retira um elemento randomicamente

Isso é um pouco bizarro, mas o método .pop() remove um elemento aleatório do set designado.

2.2.26 .get()

meu_nome = {"anderson":1,"uyekita":2,"hitoshi":3}  # Para criar um set basta usar os {} e adicionar os values

print(meu_nome.get("hitoshi"))                     # Retorna 3

Isso é um pouco bizarro, mas o método .pop() remove um elemento aleatório do set designado. Deve-se ressaltar também que caso o .get() nenhum valor que procurar ele poderá retornar um valor default, sendo assim .get("hitoshi",0) ao invés de retornar “None”, retornará 0.

2.2.27 Referências

 

A work by AH Uyekita

anderson.uyekita[at]gmail.com