Literais Python

Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Literais Python

Mensagem por bernardino »

Bem-vindo à seção dois, onde falaremos sobre literais em Python.

Literais - os dados em si

Agora que você tem um pouco de conhecimento de alguns dos recursos poderosos oferecidos pela função print(), é hora de aprender sobre alguns novos problemas e um novo termo importante - o literal.

Um literal são dados cujos valores são determinados pelo próprio literal.

Como esse é um conceito difícil de entender, um bom exemplo pode ser útil.

Veja o seguinte conjunto de dígitos:

Código: Selecionar todos

123
Você consegue adivinhar qual valor representa? Claro que você pode - são cento e vinte e três.

Mas e quanto a isso:
Isso representa algum valor? Talvez. Pode ser o símbolo da velocidade da luz, por exemplo. Também pode ser a constante de integração. Ou até mesmo o comprimento de uma hipotenusa no sentido de um teorema de Pitágoras. Há muitas possibilidades.

Você não pode escolher o caminho certo sem algum conhecimento adicional.

E esta é a pista: 123 é um literal e c não é.

Você usa literais para codificar dados e colocá-los em seu código. Vamos agora mostrar algumas convenções que você deve seguir ao usar o Python.

Vamos começar com uma experiência simples: dê uma olhada no snippet no editor.
print2.png
print2.png (8.95 KiB) Exibido 88 vezes
A primeira linha parece familiar. A segunda parece estar errada devido à visível falta de aspas.

Tente executá-lo.

Se tudo correr bem, agora você verá duas linhas idênticas.

O que aconteceu? O que isso significa?

Neste exemplo, você encontrará dois tipos diferentes de literais:
  • uma string, que você já conhece,
  • e um número inteiro, algo completamente novo.
A função print() os apresenta exatamente da mesma maneira ‒ este exemplo é óbvio, pois sua representação legível por humanos também é a mesma. Internamente, na memória do computador, esses dois valores são armazenados de formas completamente diferentes ‒ a string existe apenas como uma string ‒ uma série de letras.

O número é convertido em representação de máquina (um conjunto de bits). A função print() é capaz de mostrar ambos em um formato legível para humanos.

Agora vamos passar algum tempo discutindo literais numéricos e sua vida interna.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

Inteiros

Você já deve saber um pouco sobre como os computadores realizam cálculos em números. Talvez você já tenha ouvido falar do sistema binário e saiba que é o sistema que os computadores usam para armazenar números e que esses computadores podem realizar qualquer operação neles.

Não exploraremos as complexidades dos sistemas numéricos de posição aqui, mas vamos dizer que os números manipulados por computadores modernos são de dois tipos:
  • inteiros, ou seja, aqueles que são desprovidos da parte fracionária;
  • e números de ponto flutuante (ou simplesmente float), que contêm (ou são capazes de conter) a parte fracionária.
Essa definição não é totalmente precisa, mas é suficiente por enquanto. A distinção é muito importante, e a fronteira entre esses dois tipos de números é muito rigorosa. Esses dois tipos de números diferem significativamente na forma como são armazenados na memória do computador e na faixa de valores aceitáveis.

A característica do valor numérico que determina seu tipo, intervalo e aplicação é chamada de tipo.

Se você codificar um literal e o colocar dentro do código Python, a forma do literal determinará a representação (tipo) que o Python usará para armazená-lo na memória.

Por enquanto, vamos deixar os números de ponto flutuante de lado (vamos voltar para eles em breve) e considerar a questão de como o Python reconhece números inteiros.

O processo é quase como se você os escrevesse com um lápis no papel - é simplesmente uma sequência de dígitos que compõe o número. Mas há uma reserva - você não deve inserir caracteres que não sejam dígitos dentro do número.

Tomemos, por exemplo, o número onze milhões cento e onze mil cento e onze. Se você pegasse um lápis na mão agora, escreveria o número assim: 11,111,111, ou assim: 11.111.111, ou até mesmo assim: 11 111 111.

É claro que essa disposição facilita a leitura, especialmente quando o número consiste em muitos dígitos. No entanto, o Python não aceita coisas como essas. É proibido. O que o Python permite, porém, é o uso de sublinhados em literais numéricos.*

Portanto, você pode escrever este número da seguinte forma: 11111111/b] ou desta forma: 11_111_111.

Observação *O Python 3.6 introduziu sublinhados em literais numéricos, permitindo a colocação de sublinhamentos únicos entre dígitos e especificadores de base para melhorar a legibilidade. Esse recurso não está disponível em versões mais antigas do Python.

E como codificamos números negativos em Python? Como de costume - adicionando um sinal de menos. Você pode escrever: -11111111 ou -11_111_111.

Os números positivos não precisam ser precedidos pelo sinal de mais, mas é permitido, se você quiser fazer isso. As seguintes linhas descrevem o mesmo número: +11111111 e 11111111.

Números octais e hexadecimais

Há duas convenções adicionais em Python que são desconhecidas para o mundo da matemática. A primeira nos permite usar números em uma representação octal.

Se um número inteiro for precedido por um prefixo 0O ou 0o (zero-o), ele será tratado como um valor octal. Isso significa que o número deve conter dígitos retirados apenas do intervalo [0..7].

0o123 é um número octal com um valor (decimal) igual a 83.

A função print() faz a conversão automaticamente. Tente isto:

Código: Selecionar todos

print(0o123)
0o123.png
0o123.png (8.64 KiB) Exibido 83 vezes
A segunda convenção nos permite usar números hexadecimais. Esses números devem ser precedidos pelo prefixo 0x ou 0X (zero-x).

0x123 é um número hexadecimal com um valor (decimal) igual a 291. A função print() também pode gerenciar esses valores. Tente isto:
0x123.png
0x123.png (8.61 KiB) Exibido 83 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

Floats

Agora é hora de falar sobre outro tipo, que é projetado para representar e armazenar os números que (como diria um matemático) têm uma fração decimal não vazia.

Eles são os números que têm (ou podem ter) uma parte fracionária após o ponto decimal e, embora essa definição seja muito ruim, certamente é suficiente para o que queremos discutir.

Sempre que usamos um termo como dois e meio ou menos o ponto zero quatro, pensamos em números que o computador considera números de ponto flutuante:

Código: Selecionar todos

2.5
-0.4
Nota: dois e meio parecem normais quando você o escreve em um programa, embora se o seu idioma nativo preferir usar vírgula em vez de um ponto no número, você deve garantir que seu número não contenha nenhuma vírgula.

O Python não aceitará isso, ou (em casos muito raros, mas possíveis) pode interpretar mal suas intenções, pois a própria vírgula tem seu próprio significado reservado em Python.

Se você quiser usar apenas um valor de dois e meio, escreva-o como mostrado acima. Observe mais uma vez: há um ponto entre 2 e 5, não uma vírgula.

Como você provavelmente pode imaginar, o valor de zero ponto quatro poderia ser escrito em Python como:

0.4

Mas não se esqueça desta regra simples - você pode omitir zero quando for o único dígito antes ou depois da vírgula.

Em essência, você pode escrever o valor 0.4 como:

.4

Por exemplo: o valor de 4.0 pode ser escrito como:

4.

Isso não mudará seu tipo nem seu valor.

Int e. flutua

O ponto decimal é essencial para reconhecer números de ponto flutuante no Python.

Veja estes dois números:

Código: Selecionar todos

4
4.0
Você pode pensar que eles são exatamente iguais, mas Python os vê de uma maneira completamente diferente.

4 é um número inteiro, enquanto 4.0 é um número de ponto flutuante.

O ponto é o que faz um ponto flutuante.

Por outro lado, não são apenas os pontos que fazem um float. Você também pode usar a letra e.

Quando você quiser usar números muito grandes ou muito pequenos, use notação científica.

Veja, por exemplo, a velocidade da luz, expressa em metros por segundo. Escrito diretamente, ficaria assim: 300000000.

Para evitar escrever tantos zeros, os livros de física usam uma forma abreviada, que você provavelmente já viu: 3 x 108.

Diz: Três vezes dez à potência de oito.

Em Python, o mesmo efeito é obtido de uma maneira ligeiramente diferente - veja:

Código: Selecionar todos

3E8
A letra E (você também pode usar a letra minúscula e - vem da palavra expoente) é um registro conciso da frase vezes dez à potência de.

Nota:
  • o expoente (o valor após o E) tem que ser um número inteiro;
  • a base (o valor na frente do E) pode ser um número inteiro ou um valor flutuante.
Codificação de flutuantes

Vamos ver como essa convenção é usada para registrar números muito pequenos (no sentido de seu valor absoluto, que é próximo de zero).

Uma constante física chamada constante de Planck (e indicada como h), de acordo com os livros didáticos, tem o valor de: 6,62607 x 10-34.

Se você gostaria de usá-lo em um programa, escreva desta forma:

Código: Selecionar todos

6.62607E-34
Nota: o fato de você ter escolhido uma das formas possíveis de codificação de valores flutuantes não significa que o Python a apresentará da mesma forma.

Às vezes, o Python pode escolher uma notação diferente da sua.

Por exemplo, digamos que você decidiu usar o seguinte literal de flutuação:

Código: Selecionar todos

0.0000000000000000000001
Quando você executa esse literal pelo Python:

Código: Selecionar todos

print(0.0000000000000000000001)
esse é o resultado:

Código: Selecionar todos

1e-22
O Python sempre escolhe a forma mais econômica de apresentação do número, e você deve levar isso em consideração ao criar literais.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

Strings

Strings são usadas quando você precisa processar texto (como nomes de todos os tipos, endereços, romances, etc.), não números.

Você já sabe um pouco sobre eles, por exemplo, que strings precisam de aspas assim como floats precisam de pontos.

Esta é uma string muito típica: "Eu sou uma string."

No entanto, há um porém. O problema é como codificar uma citação dentro de uma string que já está delimitada por aspas.

Vamos supor que queremos imprimir uma mensagem bem simples dizendo:

Eu gosto de "Monty Python"

Como fazemos isso sem gerar um erro? Há duas soluções possíveis.

A primeira é baseada no conceito que já conhecemos do caractere de escape, que você deve lembrar que é representado pela barra invertida. A barra invertida também pode escapar das aspas. Uma citação precedida por uma barra invertida muda seu significado ‒ não é um delimitador, mas apenas uma citação. Isso funcionará como pretendido:

Código: Selecionar todos

print("Eu gosto \"Monty Python\"")
Nota: há duas aspas com escape dentro da string - você consegue ver as duas?

A segunda solução pode ser um pouco surpreendente. O Python pode usar um apóstrofo em vez de uma aspas. Qualquer um desses caracteres pode delimitar cadeias de caracteres, mas você deve ser coerente.

Se você abrir uma sequência com aspas, será necessário fechá-la com aspas.

Se você iniciar uma sequência de caracteres com um apóstrofo, precisará terminá-la com um apóstrofo.

Este exemplo também funcionará:

Código: Selecionar todos

print('Eu gosto "Monty Python"')
Nota: você não precisa de usar escape aqui.

Codificando strings

Agora, a próxima pergunta é: como você incorpora um apóstrofo em uma string colocada entre apóstrofos?

Você já deve saber a resposta ou, para ser mais preciso, duas respostas possíveis.

Tente imprimir uma string contendo a seguinte mensagem:

Eu sou Monty Python.
monty.png
monty.png (10.42 KiB) Exibido 68 vezes
Você sabe como fazê-lo?

Solução 1

Código: Selecionar todos

print('I\'m Monty Python.')
Solução 2

Código: Selecionar todos

print("I'm Monty Python.")
Como você pode ver, a barra invertida é uma ferramenta muito poderosa - ela pode escapar não apenas de aspas, mas também de apóstrofes.

Já mostramos isso, mas queremos enfatizar mais uma vez esse fenômeno: uma string pode estar vazia - pode não conter caracteres.

Uma string vazia ainda permanece uma string:

Código: Selecionar todos

''

Código: Selecionar todos

""
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

Valores booleanos

Para concluir com os literais do Python, há dois adicionais.

Elas não são tão óbvias quanto as anteriores, pois são usadas para representar um valor muito abstrato - a veracidade.

Cada vez que você pergunta ao Python se um número é maior que outro, a pergunta resulta na criação de alguns dados específicos - um valor booleano.

O nome vem de George Boole (1815-1864), autor da obra fundamental, The Laws of Thought, que contém a definição de álgebra booleana ‒ uma parte da álgebra que faz uso de apenas dois valores distintos: True e False, denotados como 1 e 0.

Um programador cria um programa, e o programa faz perguntas. Python executa o programa e fornece as respostas. O programa deve ser capaz de reagir de acordo com as respostas recebidas.

Felizmente, os computadores sabem apenas dois tipos de respostas:
  • Sim, isso é verdade;
  • Não, isso é falso.
Você nunca receberá uma resposta como: Não sei ou Provavelmente sim, mas não tenho certeza.

Python, então, é um réptil binário.

Esses dois valores booleanos têm denotações estritas em Python:

Código: Selecionar todos

True
False
Você não pode mudar nada. É necessário aceitar esses símbolos como eles são, inclusive distinção entre maiúsculas e minúsculas.

Desafio: Qual será a saída do trecho de código a seguir?

Código: Selecionar todos

print(True > False)
print(True < False)
Execute o código no editor para verificar. Você pode explicar o resultado?
booleano.png
booleano.png (11.23 KiB) Exibido 63 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

LAB - Literais Python - strings

Cenário

Escreva um código de uma linha usando a função de print(), bem como os caracteres de nova linha e de escape, para corresponder ao resultado esperado gerado em três linhas.

Saída esperada

Código: Selecionar todos

"Eu sou"
""aprendizado""
"""Python"""
Solução
lab_string.png
lab_string.png (12.15 KiB) Exibido 62 vezes
Solução 2
lab_string2.png
lab_string2.png (12.88 KiB) Exibido 61 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

RESUMO DA SEÇÃO

1. Literais são notações para representar alguns valores fixos no código. Python tem vários tipos de literais - por exemplo, um literal pode ser um número (literais numéricos, por exemplo, 123) ou uma string (literais de string, por exemplo, "Eu sou um literal".).

2. O sistema binário é um sistema de números que emprega 2 como base. Portanto, um número binário é composto de 0s e 1s apenas, por exemplo, 1010 é 10 em decimal.

Os sistemas de numeração octal e hexadecimal, da mesma forma, empregam 8 e 16 como suas bases respectivamente. O sistema hexadecimal usa os números decimais e seis letras extras.

3. Inteiros (ou simplesmente ints) são um dos tipos numéricos compatíveis com o Python. São números escritos sem um componente fracionário, por exemplo, 256 ou -1 (números inteiros negativos).

4. Ponto flutuante (ou simplesmente float) são outro dos tipos numéricos compatíveis com o Python. São números que contêm (ou são capazes de conter) um componente fracionário, por exemplo, 1.27.

5. Para codificar um apóstrofo ou uma aspas dentro de uma string, você pode usar o caracter de escape, por exemplo, 'I\'m happy.' ou abrir e fechar a string usando um conjunto oposto de símbolos aos que você deseja codificar, por exemplo, "I'm happy." para codificar um apóstrofo e 'Ele disse "Python", não "typhoon"' para codificar uma aspas (dupla).

6. Valores booleanos são os dois objetos constantes True e False usados para representar valores de verdade (em contextos numéricos, 1 é True, enquanto 0 é False.

Extra

Há mais um literal especial usado em Python: o literal None. Esse literal é um objeto NoneType e é usado para representar a ausência de um valor. Vamos contar mais sobre isso em breve.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 685
Registrado em: 28 Ago 2020, 15:11

Re: Literais Python

Mensagem por bernardino »

TESTE DA SEÇÃO

Pergunta 1: Que tipos de literais são os dois exemplos a seguir?

"Olá ", "007"

Resposta: Ambos são strings/strings literais.

Pergunta 2: Que tipos de literais são os quatro exemplos a seguir?

"1.5", 2.0, 528, False

Resposta: O primeiro é uma string, o segundo é um literal numérico (um float), o terceiro é um literal numérico (um inteiro) e o quarto é um literal booleano.

Pergunta 3: Qual é o valor decimal do seguinte número binário?

1011

Resposta: Está 11, porque (2**0) + (2**1) + (2**3) = 11

Continuar a leitura: Seção 3 - Operadores - ferramentas de manipulação de dados
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Responder