sábado, 5 de dezembro de 2020

Função trunc() em Python

Truncar em Python

Existem muitos módulos integrados em python. Fora desses módulos, existe um módulo interessante conhecido como módulo math que possui várias funções como teto, piso, truncar, fatorial, fabs, etc.

Destas funções, existe uma função interessante chamada trunc() que se comporta como uma função de teto para número negativo e função de piso para número positivo.

Em caso de número positivo

# script em python para demonstrar o uso
# de floor(), ceil() truncate() com um número positivo
import math

print(math.floor(3.5)) # arredonda pra baixo
print(math.trunc(3.5)) # funciona como a função floor
print(math.ceil(3.5)) # arredonda pra cima

Resultado:

3
3
4

Em caso de número negativo

# script em python para demonstrar o uso
# de floor(), ceil() truncate() com um número negativos
import math

print(math.floor(-3.5)) # arredonda pra baixo
print(math.trunc(-3.5)) # funciona como a função floor
print(math.ceil(-3.5)) # arredonda pra cima

Resultado:

-4
-3
-3

Isso ocorre porque a função de teto (ceil()) é usada para arredondar para cima, ou seja, em direção ao infinito positivo e a função de fundo é usada para arredondar para baixo, ou seja, em direção ao infinito negativo.

Mas a função trunc() é usada para arredondar para cima ou para baixo em direção a zero.

Artigo escrito por Arpit Agarwal e traduzido por Acervo Lima de trunc() in Python

Fatos interessantes sobre strings em Python

Strings são imutáveis

Depois que uma string é definida, ela não pode ser alterada.

# Programa para mostrar
# que strings não podem ser alteradas

a = 'Acervo Lima'

# mostra o valor de a
print(a) 

# tenta alterar o terceiro elemento da string
a[2] = 'E' # isso vai lançar o erro TypeError
print(a)

Resultado:

Acervo Lima
Traceback (most recent call last):
  File "/home/thor/Documentos/teste.py", line 10, in 
    a[2] = 'E' # isso vai causar um erro
TypeError: 'str' object does not support item assignment

Mas o código abaixo funciona bem.

# programa para mostrar que uma string
# pode ser concatenada com outra string

a = 'Acervo '

# mostra o conteúdo de a
print(a)
a = a + 'Lima'

print(a) # tudo funciona como deveria

Resultado:

Acervo 
Acervo Lima

No segundo programa, o intérprete faz uma cópia da string original e então trabalha nela e a modifica. Portanto, a expressão a = a + 'Lima' não muda a string, mas reatribui a variável a um novo valor (o resultado da concatenação das duas strings).

Entenda o uso da função id().
A função id() é usada para retornar a identidade de um objeto.

# script python para mostrar que
# as duas string tem o mesmo id

string1 = "Hello"
string2 = "Hello"

print(id(string1)) 
print(id(string2)) 

Resultado:

140595101158640
140595101158640

string1 e string2 apontam para o mesmo objeto ou mesmo local. Agora, se alguém tentar modificar qualquer um dos resultados da string, os resultados serão diferentes.

# Modificando a string

string1 = "Hello"

# id da string string1 
print(id(string1)) 

string1 += "World"
print(string1) 

# id da string modificada string1 
print(id(string1))

Resultado:

140495269678192
HelloWorld
140495269678832

String1 é modificado, o que contradiz o fato de que as strings são imutáveis, mas a identidade antes e depois da modificação são diferentes. Isso significa que um novo objeto da string1 é criado após a modificação, o que confirma o fato de que as strings são imutáveis, pois nenhuma mudança foi feita no objeto anterior da string1 em vez disso uma nova é criada.

Três maneiras de criar strings

Strings em Python podem ser criadas usando aspas simples, aspas duplas ou aspas triplas.

As aspas simples e duplas funcionam da mesma forma para a criação da string. Por falar em aspas triplas, elas são usadas quando temos que escrever uma string em várias linhas e imprimir como está, sem usar nenhuma sequência de escape.

# script python parar criar
# strings de três modos diferentes
# e concatenalas 

# string com aspas simples
a = 'Acervo'

# string com aspas duplas
b = " Lima"

# string com aspas triplas
c = ''' Acervo Lima
o maior acervo de de tutoriais '''

d = '''Ele disse, "É armadilha"'''

print(a)
print(b)
print(c)
print(d)

# concatenando strings criadas
# com aspas simples, duplas e triplas
print(a + b + c) 

Resultado:

Acervo
 Lima
 Acervo Lima
o maior acervo de de tutoriais 
Ele disse, "É armadilha"
Acervo Lima Acervo Lima
o maior acervo de de tutoriais

Como imprimir aspas simples ou aspas duplas na tela?

Podemos fazer isso das duas maneiras a seguir:

  • O primeiro é usar o caractere de escape para exibir a citação adicional.
  • A segunda maneira é usando aspas combinadas, ou seja, quando queremos imprimir aspas simples, usando aspas duplas como delimitadores e vice-versa.

Exemplo:

print("Olá, senhor Alberto") 

# usando o caracter de escape
print("Ele disse, \"Bem-vindo ao Acervo Lima\"")

print('Tão feliz em estar aqui')

# Usando aspas diferentes
print ('Ele esta procurando pelo Billy "the Kid"')                

Resultado:

Olá, senhor Alberto
Ele disse, "Bem-vindo ao Acervo Lima"
Tão feliz em estar aqui
Ele esta procurando pelo Billy "the Kid"

Como imprimir o caractere de escape?

Se houver a necessidade de imprimir o caractere de escape (\), então, se o usuário mencioná-lo em um interpretador de string, pensará nele como um caractere de escape e não o imprimirá. Para imprimir o caractere de escape, o usuário deve usar o caractere de escape antes de '\' conforme mostrado no exemplo.

# imprime o caractere de escape
print ("\\ barra invertida")

Resultado:

\ barra invertida

Artigo escrito por Arpit Agarwal, melhorado por tuhinpaul e traduzido por Acervo Lima de Interesting facts about strings in Python | Set 1

Quando usar yield em vez de return em Python?

A declaração de yield suspende a execução da função e envia um valor de volta para o chamador, mas retém o estado suficiente para permitir que a função continue de onde foi interrompida. Quando retomada, a função continua a execução imediatamente após a última execução de yield. Isso permite que seu código produza uma série de valores ao longo do tempo, em vez de computá-los de uma vez e enviá-los de volta como uma lista.

Vejamos com um exemplo:

# Um programa Python simples para demonstrar o funcionamento do yield

# Uma função geradora que produz 1 pela primeira vez,
# na 2 segunda vez e 3 na terceira vez
def simpleGeneratorFun():
    yield 1
    yield 2
    yield 3

for value in simpleGeneratorFun():
    print(value) 

Resultado:

1
2
3

Return envia um valor especificado de volta para seu chamador, enquanto Yield pode produzir uma sequência de valores. Devemos usar o Yield quando queremos iterar em uma sequência, mas não queremos armazenar a sequência inteira na memória.

O Yield é usado em geradores Python. Uma função geradora é definida como uma função normal, mas sempre que precisa gerar um valor, ela o faz com a palavra-chave Yield em vez de return. Se o corpo de um def contiver yield, a função se tornará automaticamente uma função geradora.

# Um programa Python para gerar quadrados de 1
# a 100 usando yield e, portanto, gerando
# Uma função de gerador infinito que imprime o
# próximo número quadrado. Começando com 1
def nextSquare():
    i = 1; 

    # Um loop infinito gerando o quadrado de cada número 
    while True: 
        yield i*i
        i += 1

for num in nextSquare():
    if num > 100:
        break
    print(num)

Resultado:

1
4
9
16
25
36
49
64
81
100

Artigo escrito por Arpit Agarwal, melhorado por julthep e traduzido por Acervo Lima de When to use yield instead of return in Python?

Retornando vários valores em Python

Em Python, podemos retornar vários valores de uma função. A seguir estão maneiras diferentes:

Usando Object: É semelhante a C / C++ e Java, podemos criar uma classe (em C, struct) para conter vários valores e retornar um objeto da classe.

# Um programa Python para retornar vários
# valores de um método usando classe
class Teste:
    def __init__(self):
        self.str = "Acervo Lima"
        self.x = 20

# Essa função retorna um objeto da classe Teste
def fun():
    return Teste() 
 
t = fun()
print(t.str)
print(t.x)

Resultado:

Acervo Lima
20

Usando Tupla: Uma Tupla é uma sequência de itens separados por vírgulas. Ele é criado com ou sem (). As tuplas são imutáveis.

# Um programa Python para retornar vários
# valores de um método usando tupla

# Esta função retorna uma tupla
def fun():
    str = "Acervo Lima"
    x = 20

    return str, x;

str, x = fun()
print(str)
print(x) 

Resultado:

Acervo Lima
20

Usando uma lista: uma lista é como um conjunto de itens criados com colchetes. Eles são diferentes dos arrays, pois podem conter itens de diferentes tipos. As listas são diferentes das tuplas porque são mutáveis.

# Um programa Python para retornar vários
# valores de um método usando lista

# Esta função retorna uma lista
def fun():
    str = "Acervo Lima"
    x = 20

    return [str, x];

list = fun()
print(list)

Resultado:

['Acervo Lima', 20]

Usando um Dicionário: Um Dicionário é semelhante ao hash ou mapa em outras línguas.

# Um programa Python para retornar vários
# valores de um método usando dicionário

# Esta função retorna um dicionário
def fun():
    d = dict();
    d['str'] = "Acervo Lima"
    d['x'] = 20

    return d

d = fun()
print(d)

Resultado:

{'str': 'Acervo Lima', 'x': 20}

Usando a classe de dados (Python 3.7+): No Python 3.7 e superior, a classe de dados pode ser usada para retornar uma classe com métodos exclusivos adicionados automaticamente. O módulo Data Class tem um decorador e funções para adicionar automaticamente métodos especiais gerados, como __init__() e __repr__() nas classes definidas pelo usuário.

from dataclasses import dataclass

@dataclass
class Book_list:
    name: str
    perunit_cost: float
    quantity_available: int = 0

    # Função para calcular o preço total
    def total_cost(self) -> float:
        return self.perunit_cost * self.quantity_available

book = Book_list("Introduction to programming.", 300, 3)
x = book.total_cost()

# mostra o preço total do livro
print(x)

# imprime os detalhes do livro
print(book)

# 900
Book_list(
    name='Python programming.',
    perunit_cost=200,
    quantity_available=3
)

Resultado:

900
Book_list(name='Introduction to programming.', perunit_cost=300, quantity_available=3)

Referência: How do I return multiple values from a function?

Artigo escrito por Shubham Agrawal e traduzido por Acervo Lima de Returning Multiple Values in Python

Python String - split()

O método split() retorna uma lista de strings após quebrar a string dada pelo separador especificado.

Sintaxe: str.split(separador, maxsplit)
Parâmetros:
Separador: este é um delimitador. A string se divide neste separador especificado. Se não for fornecido, qualquer espaço em branco será um separador. maxsplit: é um número, que nos diz para dividir a string no máximo do número de vezes fornecido. Se não for fornecido, não há limite.
Retorna: Retorna uma lista de strings depois de quebrar a string fornecida pelo separador especificado.

CÓDIGO 1:

texto = 'Bem-vindo ao Acervo Lima'

# separa a string nos espaços entre as palavras
print(texto.split())

palavra = 'Bem-vindo, ao, Acervo, Lima'

# separa em ','
print(palavra.split(','))

palavra = 'Bem-vindo: ao: Acervo: Lima'

# separa em ':'
print(palavra.split(':'))

palavra = 'CatBatSatFatOr'

# separa a cada três caracteres
print([palavra[i:i+3] for i in range(0, len(palavra), 3)])

Resultado :

['Bem-vindo', 'ao', 'Acervo', 'Lima']
['Bem-vindo', ' ao', ' Acervo', ' Lima']
['Bem-vindo', ' ao', ' Acervo', ' Lima']
['Cat', 'Bat', 'Sat', 'Fat', 'Or']

CÓDIGO 2

texto = 'Bem-vindo ao Acervo Lima'

# maxsplit: 0
print(texto.split(' ', 0))

# maxsplit: 4
print(texto.split(' ', 4))

# maxsplit: 1
print(texto.split(' ', 1))

Resultado:

['Bem-vindo ao Acervo Lima']
['Bem-vindo', 'ao', 'Acervo', 'Lima']
['Bem-vindo', 'ao Acervo Lima']

Artigo escrito por pawan_asipu e traduzido por Acervo Lima de Python String | split()

Adicionando nova coluna ao DataFrame existente no Pandas

Vamos discutir como adicionar novas colunas ao DataFrame existente no Pandas. Existem várias maneiras de fazermos essa tarefa.

Método #1: Declarando uma nova lista como uma coluna.

# Importa o módulo pandas
import pandas as pd

# Defina um dicionário contendo dados de Alunos
data = {
        'Nome': ['Jai', 'Princi', 'Gaurav', 'Anuj'],
        'Altura': [5.1, 6.2, 5.1, 5.2],
        'Qualificação': ['Msc', 'MA', 'Msc', 'Msc']
        }

# Converta o dicionário em DataFrame
df = pd.DataFrame(data)

# Declare uma lista que deve ser convertida em uma coluna
address = ['Delhi', 'Bangalore', 'Chennai', 'Patna']

# Usando 'Address' como o nome da coluna
# e igualando-o à lista
df['Address'] = address

# observe o resultado
print(df)

Resultado:

     Nome  Altura Qualificação    Address
0     Jai     5.1          Msc      Delhi
1  Princi     6.2           MA  Bangalore
2  Gaurav     5.1          Msc    Chennai
3    Anuj     5.2          Msc      Patna

Observe que o comprimento da sua lista deve corresponder ao comprimento da coluna do índice, caso contrário, ele mostrará um erro.

Método #2: usando DataFrame.insert()

Isso dá a liberdade de adicionar uma coluna em qualquer posição que quisermos e não apenas no final. Ele também fornece opções diferentes para inserir os valores da coluna.

# Importa o módulo pandas
import pandas as pd

# Defina um dicionário contendo dados de Alunos
data = {
        'Nome': ['Jai', 'Princi', 'Gaurav', 'Anuj'],
        'Altura': [5.1, 6.2, 5.1, 5.2],
        'Qualificação': ['Msc', 'MA', 'Msc', 'Msc']
        }

# Converta o dicionário em DataFrame
df = pd.DataFrame(data)

# Usando DataFrame.insert() para adicionar uma coluna
df.insert(2, "Idade", [21, 23, 24, 21], True)

# observe o resultado
print(df)

Resultado:

     Nome  Altura  Idade Qualificação
0     Jai     5.1     21          Msc
1  Princi     6.2     23           MA
2  Gaurav     5.1     24          Msc
3    Anuj     5.2     21          Msc

Método #3: Usando o método Dataframe.assign()

Este método criará um novo dataframe com uma nova coluna adicionada ao antigo dataframe.

# Importa o módulo pandas
import pandas as pd

# Defina um dicionário contendo dados de Alunos
data = {
        'Nome': ['Jai', 'Princi', 'Gaurav', 'Anuj'],
        'Altura': [5.1, 6.2, 5.1, 5.2],
        'Qualificação': ['Msc', 'MA', 'Msc', 'Msc']
        }

# Converta o dicionário em DataFrame
df = pd.DataFrame(data)

# Usando 'endereço' como o nome da coluna e igualando-a à lista
df2 = df.assign(endereço = ['Delhi', 'Bangalore', 'Chennai', 'Patna'])

# observe o resultado
print(df2)

Resultado:

     Nome  Altura Qualificação   endereço
0     Jai     5.1          Msc      Delhi
1  Princi     6.2           MA  Bangalore
2  Gaurav     5.1          Msc    Chennai
3    Anuj     5.2          Msc      Patna

Método #4: usando um dicionário

Podemos usar um dicionário Python para adicionar uma nova coluna no DataFrame do pandas. Use uma coluna existente como os valores-chave e seus respectivos valores serão os valores da nova coluna.

# Importa o módulo pandas
import pandas as pd

# Defina um dicionário contendo dados de Alunos
data = {
        'Nome': ['Jai', 'Princi', 'Gaurav', 'Anuj'],
        'Altura': [5.1, 6.2, 5.1, 5.2],
        'Qualificação': ['Msc', 'MA', 'Msc', 'Msc']
        }

# Converta o dicionário em DataFrame
df = pd.DataFrame(data)

# Defina um dicionário com os valores-chave de
# uma coluna existente e seus respectivos
# pares de valores como os valores para nossa nova coluna.
endereço = {
            'Delhi': 'Jai', 'Bangalore': 'Princi',
            'Patna': 'Gaurav', 'Chennai': 'Anuj'
            }

# Converta o dicionário em DataFrame
df = pd.DataFrame(data)

# Forneça 'Endereço' como o nome da coluna
df['Endereço'] = endereço

# Observe a saída
print(df)

Resultado:

     Nome  Altura Qualificação   Endereço
0     Jai     5.1          Msc      Delhi
1  Princi     6.2           MA  Bangalore
2  Gaurav     5.1          Msc      Patna
3    Anuj     5.2          Msc    Chennai

Artigo escrito por Chaitanya Tyagi e traduzido por Acervo Lima de Adding new column to existing DataFrame in Pandas

Recebendo entrada em Python

Os desenvolvedores geralmente precisam interagir com os usuários, seja para obter dados ou fornecer algum tipo de resultado. A maioria dos programas hoje usa uma caixa de diálogo como uma forma de solicitar ao usuário algum tipo de entrada. Já o Python nos fornece duas funções embutidas para ler a entrada do teclado.

  • input(prompt)
  • raw_input(prompt)

input(): esta função primeiro obtém a entrada do usuário e, em seguida, avalia a expressão, o que significa que o Python identifica automaticamente se o usuário inseriu uma string ou um número ou lista. Se a entrada fornecida não estiver correta, o erro de sintaxe ou a exceção é gerado pelo python.

Por exemplo

# Programa python monstrando
# como usar a função input()

val = input("Entre com um valor: ")
print(val)

Resultado:

Entre com um valor: um valor          
um valor

Como a função input funciona em Python

Código:

num = input("Entre com um número: ")
print(num)
name1 = input("Entre com um nome: ")
print(name1)
  
# Printing type of input value 
print ("tipo de num", type(num)) 
print ("tipo de name", type(name1)) 

Resultado:

Entre com um número: 2
2
Entre com um nome: nome
nome
tipo de num <class 'str'>
tipo de name <class 'str'>

raw_input(): Esta função funciona em versões anteriores (como Python 2.x). Esta função pega exatamente o que foi digitado no teclado, converte em string e depois retorna para a variável na qual queremos armazenar.

Exemplo:

g = raw_input("Entre com seu nome: ") 
print g

Resultado:

Entre com seu nome: Bob
Bob

Aqui, g é uma variável que obterá o valor da string, digitada pelo usuário durante a execução do programa. A digitação de dados para a função raw_input() é encerrada pela tecla enter. Podemos usar raw_input() para inserir dados numéricos também. Nesse caso, usamos typecasting.

Artigo escrito por ABHISHEK TIWARI 13 e traduzido por Acervo Lima de Taking input in Python