<jupyter_start><jupyter_text>Capítulo 02 - Básico de Python  2.1. Blocos Em python, os blocos de código são delimitados pelo uso de identação, que deve ser constante no bloco de código, porém é considerada uma boa prática manter a consistência no projeto todo e evitar a mistura tabulações e espaços.A linha anterior ao bloco sempre termina com dois pontos `(:)` e representa uma estrutura de controle da linguagem ou uma declaração de uma nova estrutura (uma função, por exemplo). Comandos que aceitam blocos:- **if/elif/else**- **for/else**- **while/else**- **try/except**- **try/finally**- **class**- **def** Se o bloco conter apenas um comando, pode-se escrever tudo me uma linha:```pythonif n < 0: print("Valor Inválido")```**Exemplos:**<jupyter_code># Exemplo 1
lista = [19, 48, 88, 128, 255]

# Para i na lista
for i in lista:
    # Se o resto da divisão for igual a 0, imprime i
    if i % 2 == 0:
        print(i)
# Exemplo 2:

def spam():
    eggs = 12
    return eggs

print(spam())<jupyter_output>12<jupyter_text>2.1. Tipos de dados básicos - **Números:** int, float, long, complex- **Strings:** str e unicode- **Listas e tuplas:** list, tuple- **Dicionários:** dict- **Arquivos:** file- **Booleanos:** bool (True, False)- **Conjuntos:** set, frozenset- **None** A função `type()` mostra o tipo de dado, veja os exemplos:<jupyter_code>type("texto")  # <class 'str'>
type(10)  # <class 'int'>
type(9.8)  # <class 'float'>
type(complex(-1.0, 0.0))<jupyter_output><empty_output><jupyter_text>**É possível elaborar as seguintes expressões:**<jupyter_code>type(10) == int
type(9.8) == float
type(complex(-1.0, 0.0)) == complex<jupyter_output><empty_output><jupyter_text>2.2. Expressões Aritiméticas       2.3. Nome de variáveis e palavras reservadas Nós programadores geralmente escolhemos nomes significativos para nossas variáveis, pois os nomes documentam para o que a variável é usada.Nomes de variáveis podem ser arbitrariamente longos.Podem conter tanto letras, quanto números, mas têm de começar com uma letra. Embora seja válida a utilização de letras maiúsculas, por convenção, não usamos.O caractere sublinhado **(_)**. É utilizado em nomes com múltiplas palavras, tal como em `meu_nome` ou `valor_da_passagem`.Se você der a uma variável um nome inválido, isso irá causar um erro de sintaxe:<jupyter_code>10nomedeumafruta = "banana"
class = "Introdução ao Python"
numero$ = 1000000000000<jupyter_output><empty_output><jupyter_text>`10nomedeumafruta` é inválida por não começar com uma letra.`numero$` é invalida por conter um caractere ilegal, o cifrão.E o `class`?`class` é uma **palavra reservada** em Python. Palavras reservadas definem as regras e a estrutura da linguagem e não podem ser usadas como nomes de variáveis. **Palavras reservadas em Python:**<jupyter_code>import keyword

print(keyword.kwlist)
print(len(keyword.kwlist))<jupyter_output>['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
33<jupyter_text>2.4. Manipulação de Strings Uma **string** é uma sequência de caractere.**Tipos de dados compostos**Vimos alguns dados nativos como: **int**, **float**, **bool** e **str**. Os tipos int, float e bool são considerados tipos de dados simples ou primitivos, pois seus valores não são compostos por outras partes menores.Eles não podem ser quebrados. Por outro lado, strings assim como listas, são qualitativamente diferentes desses tipos, pois eles são contruídos de pedaços menores. No caso de strings, eles são construídos de strings menores, cada um contendo um **caractere**. Esses tipos que são compostos de pedaços menores são chamados **tipos de dados compostos**. Dependendo do que estamos fazendo, a gente pode querer tratar um tipo composto como uma entidade única (o todo), ou a gente pode querer acessar suas partes. Essa ambiguidade é útil. **Operações com strings:**De maneira geral, você não pode executar operações matemáticas com strings, mesmo que as strings, se pareçam com números. Algumas **operações ilegais** (assumindo que `mensagem` seja uma string).<jupyter_code>mensagem + 1
"Olá" / 1
mensagem * "Olá"
"21" + 2<jupyter_output><empty_output><jupyter_text>**Caracteres de escape:**<jupyter_code># Dando um tab (espaçamento) entre as palavras
print("Olá\tmundo")
# Pulando uma linha
print("Olá\nmundo")<jupyter_output>Olá
mundo<jupyter_text>**Acessando um caractere de cada vez dentro de uma string:**<jupyter_code>fruta = 'banana'
letra = fruta[1]

print(letra)<jupyter_output>a<jupyter_text>A segunda instrução seleciona o caractere número 1 de fruta e atribui a letra.A expressão entre conchetes chama-se índice. O índice aponta qual caractere da sequência você quer (daí o nome).    Para a maior parte das pessoas, a primeira letra de `'banana'` é b, não a. Mas, para os cientistas da computação, o índice é uma referência do começo da string, e a referência da primeira letra é zero.<jupyter_code>letra = fruta[0]

print(letra)<jupyter_output>b<jupyter_text>É possível utilizar uma expressão que contenha variáveis e operadores como índice:<jupyter_code>i = 1
print(fruta[i])

print(fruta[i+1])<jupyter_output>a
n<jupyter_text>Porém, o valor do índice tem que ser um número inteiro. Se não for, é isso que aparece:<jupyter_code>letra = fruta[1.5]
print(fruta)<jupyter_output><empty_output><jupyter_text>Função `len` que devolve o número de caracteres em uma string:<jupyter_code>tamanho = len(fruta)

print(tamanho)<jupyter_output>6<jupyter_text>**Concatenando strings:**<jupyter_code>span = 'Açai' + ' com granola.'
print(span)
print(span + 'É bom demais!')
print('1' + '2')<jupyter_output>12<jupyter_text>**Fatiamento de strings:**Um segmento de uma string é uma fatia. Selecionar uma fatia é como selecionar um caracter:<jupyter_code>s = 'Monty Python'

print(len(s))
print(s[0:5])
print(s[6:12])<jupyter_output>12
Monty
Python
{'fraction_non_alphanumeric': 0.11760797342192691, 'fraction_numerical': 0.015448504983388704, 'mean_word_length': 5.742441209406495, 'pattern_counts': {'":': 0, '<': 52, '<?xml version=': 0, '>': 51, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '639361', 'license': 'MIT', 'n_tokens_mistral': 2280, 'n_tokens_neox': 2191, 'n_words': 730, 'path': 'ipynb/Capitulo-02.ipynb', 'repo_name': 'LimaEduardo/curso-introdutorio-de-python', 'size': '6020'}