<jupyter_start><jupyter_text><jupyter_code>#VARIÁVEIS COMPOSTAS

# Listas Dicionários e Tuplas

# 1º LISTA
# Uso de Colchetes ou list()
# Mutável ********
# Métodos de Listas
# Descompactando 
# Fatiamento

#list.append(x)
#Adiciona um item ao fim da lista
lista = [1, 2, 3]
lista.append(2)

#list.extend(iterable)
#Prolonga a lista, adicionando no fim todos os elementos do argumento 

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l1.extend(l2)
#print(l1)

#list.index(x[, start[, end]])
#Devolve o índice base-zero do primeiro item cujo valor é igual a x, levantando ValueError se este valor não existe.

#list.insert(i, x)
#Insere um item em uma dada posição. O primeiro argumento é o índice do elemento antes do qual será feita a inserção

lista2 = [2, 3, 4]
lista2.insert(1, 'Bom dia')
#print(lista2)

#list.remove(x)
#Remove o primeiro item encontrado na lista cujo valor é igual a x. Se não existir valor igual, uma exceção ValueError é levantada.

lista_meses = [ 'Janeiro', 'Fevereiro', 'Março' , 'Abril', 'Março']
lista_meses.remove('Março')
#print(lista_meses)


#list.pop([i])
#Remove um item em uma dada posição na lista e o retorna. Se nenhum índice é especificado, a.pop() remove e devolve o último item da lista. (Os colchetes ao redor do i na demonstração do método indica que o parâmetro é opcional, e não que é necessário escrever estes colchetes ao chamar o método. Você verá este tipo de notação frequentemente na Biblioteca de Referência Python.)

lista3 = [1, 2, 3]
lista3.pop(0)
#print(lista3)

#list.clear()
#Remove todos os itens de uma lista. Equivalente a del a[:].

lista4 = [1, 2, 3, 4, 5]
lista4.clear()
#print(lista4)

#Os argumentos opcionais start e end são interpretados como nas notações de fatiamento e são usados para limitar a busca para uma subsequência específica da lista. O índice retornado é calculado relativo ao começo da sequência inteira e não referente ao argumento start.

#list.count(x)
#Devolve o número de vezes em que x aparece na lista.

lista5 = [1, 1, 1, 2, 3, 2, 1,  4, 3, 1, 2]
#print(lista5.count(1))

#
#list.sort(key=None, reverse=False)
#Ordena os itens na lista (os argumentos podem ser usados para personalizar a ordenação, veja a função sorted() para maiores explicações).

lista6 = [1, 3, 2, 32, 1 , 45, 6, 5,78, 43, 1, 2, 3,5 ,8]
sorted_list = sorted(lista6)
#print(sorted_list)

#list.reverse()
#Inverte a ordem dos elementos na lista.
#
#lista7 = [1, 2, 4, 5, 3, 2]
#lista8 = lista7.reverse()
#print(lista8)


l3 = [1, 2, 3, 4, 5, 6]

n1, n2, n3, *_ = l3

# print(n1)
# print(n2)
# print(n3)
# print(_)

# print(l3)

l4 = [1, 2, 3]
l5 = l4[:]
l4.append(4)

# print(l4)
# print(l5)

# 2º Dicionários
# Chave : Valor
# Com chaves {} ou dict()
# Como iterar sobre Dicionários ?

dicionario = {
    'Joel' : '1C',
    'Oliver' : '1C',
    'Elisa' : '1B'
}

#for k in dicionario.keys():
 # print(k)

##for v in dicionario.values():
  #print(v)

#for k, v in dicionario.items():
 # print(k , v)

#Métodos de Dicionários

#dict.get(k, value) key como argumento e retorna o valor

joel = dicionario.get('Joel')
#print(joel)

# no qual podemos passar como parâmetros a chave que queremos e um valor padrão para retornar caso essa chave não seja encontrada:
# Adicionar items no dicionário
# dict[k] = v

#dicionario['Chave'] = 'valor'
#print(dicionario)

# Remover Itens
# del dict[k}

del dicionario['Oliver']
print(dicionario)

#1 peça as quatro notas de 10 alunos, 
#2 calcule e armazene num vetor=lista a média de cada aluno, 
#3 imprima o número de alunos com média maior ou igual a 7.0.

notas = {}
medias = {}
quantidade_de_estudantes = 2
notas_temporarias = []
# pegando inputs
for i in range(1, quantidade_de_estudantes + 1):
  nome_do_aluno = input('Digite o nome do aluno: ')
  for n in range(1, 5):
    #validando notas
    while True:
      try: 
        nota = float(input(f'Digite a {n}º nota: '))
      except:
        print('Digite números.')
        continue
      else:
        if nota < 0 or nota > 10:
          print('Digite notas entre 0 e 10.')
          continue
        else:
          notas_temporarias.append(nota)
          break
  print('-' * 30)
  #armazenando notas
  notas[nome_do_aluno] = notas_temporarias[:]
  notas_temporarias.clear()
#calculando media e aprovando/reprovando
for k, v in notas.items():
  media = sum(v) / 4
  situacao = "aprovado" if media >= 7 else "reprovado" 
  medias[k] = [f"Média : {media} Situação : {situacao}"]
#exibindo
for k, v in medias.items():
  print('-' * 30)
  print(k, ':', v)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12179487179487179, 'fraction_numerical': 0.030061892130857647, 'mean_word_length': 3.839572192513369, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '239650', 'license': 'MIT', 'n_tokens_mistral': 1891, 'n_tokens_neox': 1838, 'n_words': 602, 'path': 'Listas&Dicionarios.ipynb', 'repo_name': 'miguelsndc/Exercicios-Python', 'size': '4524'}