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 duasstrings
;*
Multiplica astring
.
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