<jupyter_start><jupyter_text>EXERCÍCIOS DE TIPOS BÁSICOS DE DADOS  Tipos Simples e Declaração de Variáveis  Declaração de Variáveis, Tipagem e Verificação de Tipos Para fixação de entendimento sobre a forma como Python atribui automaticamente tipos a objetos, a partir da declaração de objetos, faça a ativida do enunciado abaixo:Nas células abaixo, declare as variáveis com os nomes indicados em comentário. Atribua a essas variáveis valores que correspondam aos tipos simples solicitados. Garanta que os tipos sejam reconhecidos pelo Python a partir da forma como os valores forem expressados. Não utilize construtores de objetos - float(), int() ou bool().  Na sequência de cada célula em que tenha declarado variável, utilize a função type() para confirmar qual o tipo do objeto na variável.<jupyter_code># declare a variável num_int, a receber um número qualquer, de tipo integer

num_int = 99999999
# utilize a função type() para verificar o tipo da variável num_int
type(num_int)
# declare a variável num_float, a receber um número qualquer, de tipo float

num_float = .9999
# utilize a função type() para verificar o tipo da variável num_float
type(num_float)
# declare a variável valor_boleano, a receber um valor lógico, verdadeiro ou falso, de tipo bool

valor_boleano = True
# utilize a função type() para verificar se o tipo da variável valor_boleano é bool

type(valor_boleano)<jupyter_output><empty_output><jupyter_text>Uso de construtores de objetos na atribuição de tipos Com vistas a manter o entendimento sobre o papel dos construtores de objeto na declaração de diferentes tipos, faça o que é pedido adiante:Nas próximas células, execute os mesmos procedimentos indicados no exercício anterior, com a diferença de utilizar os construtores de objetos: float(), int() ou bool(). Declare também uma variável chamada valor_null, que deve receber valor de tipo None.<jupyter_code># declare a variável num_int2, a receber um número qualquer, de tipo integer

num_int2 = int(1.0)
# utilize a função type() para verificar o tipo da variável num_int2

type(num_int2)
# declare a variável num_float2, a receber um número qualquer, de tipo float

num_float2 = float(1)
# utilize a função type() para verificar o tipo da variável num_float2

type(num_float2)
# declare a variável valor_boleano2, a receber um valor lógico, verdadeiro ou falso, de tipo bool

valor_boleano2 = bool(0.99)
# utilize a função type() para verificar se o tipo da variável valor_boleano2 é bool

type(valor_boleano2)
# declare a variável valor_null, que deve receber valor de tipo None

valor_null = None
# utilize a função type() para verificar o tipo da variável valor_null

type(valor_null)<jupyter_output><empty_output><jupyter_text>Alteração de Tipos  Alterando tipos Utilize construtores de variáveis para alterar os tipos armazenados nas variáveis criadas nos exercícios anteriores. Armazene os dados alterados em novas variáveis, conforme solicitado nos comentários das células seguintes.<jupyter_code># Use o construtor correspondente para aplicar o tipo float ao valor da variável num_int.
# Atribua o resultado à variável num_f


num_f = float(num_int)
# utilize a função type() para verificar o tipo da variável num_f

type(num_f)
# Use o construtor correspondente para aplicar o tipo int ao valor da variável num_float.
# Atribua o resultado à variável num_i


num_i = int(num_float)
# Use o construtor correspondente para aplicar o tipo int ao valor da variável num_float.
# Atribua o resultado à variável num_i


type(num_i)
# Use o construtor correspondente para aplicar o tipo float ao valor da variável valor_boleano.
# Atribua o resultado à variável num_i

val_f = float(valor_boleano)
# utilize a função type() para verificar se o tipo da variável val_f é float

type(val_f)
# execute esta célula para verificar o conteúdo da variável val_f

val_f<jupyter_output><empty_output><jupyter_text>Tipos Compostos  Declarando strings e listas Declare as variáveis solicitadas nos comentários das células abaixo, contendo os tipos compostos indicados.<jupyter_code># declare as variáveis faltantes, contendo strings, conforme a sequência iniciada:

m1 = 'janeiro'
m2 = 'fevereiro'
m3 = 'março'
m4 = 'abril'
m5 = 'maio'
m6 = 'junho'
m7 = 'julho'
m8 = 'agosto'
m9 = 'setembro'
m10 = 'outubro'
m11 = 'novembro'
m12 = 'dezembro'
# crie uma variavel chamada lista_meses
# Utilize colchetes para criar, na variavel lista_meses, um objeto de tipo lista que contenha...
# todas as variáveis criadas acima, de m1 a m12


lista_meses = [m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12]
# execute o código print(lista_meses) para verificar como ficou o conteúdo da lista

print(lista_meses)<jupyter_output>['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro']<jupyter_text>Nota: Estamos em etapa de aprendizado, por isso os exercícios contam com certo nível de repetição de procedimentos bastanta simples. Devemos guardar em mente que isso é uma adaptação didática e que o trabalho de desenvolvimento em Python vai perdendo esse caráter repetitivo, quanto mais aprendemos a utilizar a ferramenta. De fato, esse design, com diversas variáveis sendo declaradas manualmente, para depois serem chamadas em uma lista, seria o tipo de coisa que um desenvolvedor experiente se sentiria constrangido de fazer, e que o levaria a criar uma rotina mais elegante e com menos digitação.  Indexando e fatiando Por meio de indexação e fatiamento, obtenha os valores requeridos nas células adiante.<jupyter_code># obtenha o primeiro mês na lista lista_meses

lista_meses[0]
# obtenha o último mês na lista lista_meses, utilizando número positivo como índice 

lista_meses[11]
# obtenha o último mês na lista lista_meses, utilizando número negativo como índice 

lista_meses[-1]
# obtenha o mês de abril a partir da lista lista_meses

lista_meses[3]
# obtenha o mês de agosto a partir da lista lista_meses

lista_meses[7]
# obtenha os três primeiros meses do ano, a partir lista lista_meses
# Salve o resultado na lista trimestre1

trimestre1 = lista_meses[0:3]
# execute esta célula, para verificar se a variável trimestre1 foi criada corretamente 

print(trimestre1)
# obtenha o meses do segundo trimestre ano, a partir lista lista_meses
# Salve o resultado na lista trimestre2

trimestre2 = lista_meses[3:6]
# execute esta célula, para verificar se a variável trimestre2 foi criada corretamente 

print(trimestre2)
# obtenha o meses do terceiro trimestre ano, a partir lista lista_meses
# Salve o resultado na lista trimestre3

trimestre3 = lista_meses[6:9]
# execute esta célula, para verificar se a variável trimestre1 foi criada corretamente 

print(trimestre3)
# De lista_meses, obtenha os meses do último trimestre do ano, utilizando índice negativo aplicado ao primeiro mês a retornar
# para o último mês a retornar, lembre-se do que ocorre quando omitimos um índice posicional na notação de fatiamento
# Salve o resultado na lista trimestre4

trimestre4 = lista_meses[-3:]
# execute esta célula, para verificar se a variável trimestre4 foi criada corretamente 

print(trimestre4)
# obtenha o intervalo de todos os meses do ano, a partir do fatiamento da lista:meses
#utilize notação com omissão de índices

lista_meses[:]
# dê continuidade à criação da lista lm, contendo apenas as três primeiras letras de cada mês

lm =  [m1[0:3], m2[0:3], m3[0:3], m4[0:3], m5[0:3], m6[0:3], m7[0:3], m8[0:3], m9[0:3], m10[0:3], m11[0:3], m12[0:3]]
# execute esta célula, para verificar se a variável trimestre4 foi criada corretamente 

print(lm)
# observe como notações sucessivas fazem a indexação de uma lista e, a partir dela, o fatiamento da respectiva string

pri_trimestre = [trimestre1[0][0:3], trimestre1[1][0:3], trimestre1[2][0:3]]

print(pri_trimestre)
# Faça o mesmo procedimento realizado acima, mas agora com a variável trimestre4

quarto_trimestre = [trimestre4[0][0:3], trimestre4[1][0:3], trimestre4[2][0:3]]

print(quarto_trimestre)<jupyter_output>['out', 'nov', 'dez']<jupyter_text>Encadeamento de objetos compostos Declare listas compostas por outras listas, conforme solicitado adiante.<jupyter_code># Atribua à variável trimestres uma lista, contendo as listas trimestre1, trimestre2, trimestre3 e trimestre4

trimestres = [trimestre1, trimestre2, trimestre3, trimestre4]
# execute esta célula, para verificar se a variável trimestres foi criada corretamente 

print(trimestres)
# Execute esta célula e observe seu resultado

trimestres[0][0]
# com base no comportamento acima, obtenha o mês de dezembro a partir da variável trimestres

trimestres[-1][-1]
# obtenha a lista que contém todos os meses do segundo trimestre a partir da variável trimestres

trimestres[1]<jupyter_output><empty_output><jupyter_text>Tuplas Em relação às tuplas, faça o que é pedido adiante:<jupyter_code># Declare a tupla tupla_meses, contendo os valores contidos na lista lm

tupla_meses = tuple(lm)
# execute esta célula para verificar se a operação acima foi correta

print(tupla_meses)
# na variável tp, atribua os dois primeiros meses armazenados na variável tupla_meses

tp = tupla_meses[:2]
# execute esta célula para verificar se a operação acima foi correta

print(tp)
# Por meio da técnica tuple unpacking, atribua os meses de janeiro e fevereiro, em tp, às variáveis m01 e m02


m01, m02 = tp
# execute esta célula para verificar se a operação acima foi correta

print(f'A variável m01 armazena "{m01}" e a variável m02 armazena "{m02}".')<jupyter_output>A variável m01 armazena "jan" e a variável m02 armazena "fev".<jupyter_text>Note que os valores constantes dentro da tupla passaram a integrar valores das variáveis lat e long com apenas uma operação de atribuição.Suponha que, precisando apenas da latitude e da longitude, a tupla de origem dos dados ainda desse outros dois valores, altitude e população. Como poderíamos fazer a atribuição das variáveis lat e long, deixando de lado a altitude?Isso pode ser feito, utilizando _underscore_ "_" como uma variável descartável, que recebe os valores de altitude e de população.  Dicionários Declare as variáveis solicitadas nos comentários das células abaixo, contendo os dicionários indicados.<jupyter_code># declare uma variável chamada dict_dias_semana, contendo um dicionário vazio
# para tanto, pode utilizar apenas os delimitadores do dicionário, ou o construtor desse tipo de objeto

# dict_dias_semana = {} é possível

dict_dias_semana = dict()<jupyter_output><empty_output><jupyter_text>Nas próximas células, adicione pares chave:valor ao dicionário dict_dias_semana, contendo nome e ordem do dia da semana, conforme o exemplo da próxima adiante.<jupyter_code># declare o valor 1, para a chave 'domingo', segundo o padrão: dict_dias_semana['domingo'] = 1

dict_dias_semana['domingo'] = 1
# declare o valor 2, para a chave 'segunda', segundo o padrão: dict_dias_semana['segunda'] = 2

dict_dias_semana['segunda'] = 2
#repita o processo para terça e 3

dict_dias_semana['terça'] = 3
#repita o processo para quarta e 4

dict_dias_semana['quarta'] = 4
#repita o processo para quinta e 5

dict_dias_semana['quinta'] = 5
#repita o processo para sexta e 6

dict_dias_semana['sexta'] = 6
#repita o processo para sábado e 7

dict_dias_semana['sábado'] = 7
# execute esta célula

print(dict_dias_semana)<jupyter_output>{'domingo': 1, 'segunda': 2, 'terça': 3, 'quarta': 4, 'quinta': 5, 'sexta': 6, 'sábado': 7}<jupyter_text>Aproveite abaixo o dict_dias_semana para consultar a ordem de alguns dias.<jupyter_code># consulte a ordem do dia da semana correspondente à quarta

dict_dias_semana['quarta']
# consulte a ordem do dia da semana correspondente à sexta

dict_dias_semana['sexta']
# consulte a ordem do dia da semana correspondente ao sábado

dict_dias_semana['sábado']
# na variável ordem_hoje, armazene a ordem do dia de hoje a partir de chave correspondente no dicionário dict_dias_semana

ordem_hoje = dict_dias_semana['sábado']<jupyter_output><empty_output><jupyter_text>Uma vez que um valor armazenado em um dicionário pode ser consultado ao se<jupyter_code>ordem_hoje = dict_dias_semana['sábado']
# execute esta célula

print(f'Hoje é o {ordem_hoje}º dia da semana')
#continue a declarar dict_mes com pares chave:valor formadas por ordem do mês em integers e nome correspondente, respectivamente.
# faça isso somente entre fevereiro e dezembro


dict_mes = {2:'fevereiro', 3:'março', 4:'abrill', 5:'maio', 6:'junho', 7:'julho', 8:'agosto', 9:'setembro', 10:'outubro', 11:'novembro', 12:'dezembro'}
# execute esta célula para conferir o resultado da atividade anterior
print(dict_mes)
# insira o mês de janeiro no dicionário dict_mes

dict_mes[1] = 'janeiro'
# execute esta célula para conferir o resultado da atividade anterior

print(dict_mes)<jupyter_output>{2: 'fevereiro', 3: 'março', 4: 'abrill', 5: 'maio', 6: 'junho', 7: 'julho', 8: 'agosto', 9: 'setembro', 10: 'outubro', 11: 'novembro', 12: 'dezembro', 1: 'janeiro'}<jupyter_text>Não se preocupe se o resultado da função acima não parecer na ordem dos meses no ano. Usualmente, dicionários não são utilizados para manter ordem específicas, pois o retorno à consulta de seus elementos é feito a partir das chaves, não de suas posições.<jupyter_code># corrija o valor correspondente à chave 4, no dicionário dict_mes, fazendo uma nova atribuição de chave:valor


dict_mes[4] = 'abril'
# execute esta célula para conferir o resultado da célula anterior

print(dict_mes[4])
# Entre as chaves, insira o número correspondente ao mês corrente 

print(f'Estamos no mês de {dict_mes[9]}.')
# Entre as chaves, insira o número correspondente ao próximo mês 

print(f'Mês que vem será {dict_mes[10]}.')<jupyter_output>Mês que vem será outubro.
{'fraction_non_alphanumeric': 0.0679363689433742, 'fraction_numerical': 0.018242848803269117, 'mean_word_length': 5.61119150988905, 'pattern_counts': {'":': 0, '<': 43, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '635799', 'license': 'Apache-2.0', 'n_tokens_mistral': 5088, 'n_tokens_neox': 4991, 'n_words': 1803, 'path': '_notebooks/preview/1.2_tipos_basicos_exercicios_respostas.ipynb', 'repo_name': 'augustogeog/augustogeog', 'size': '13704'}