Buscar

Python introdução modulos

Prévia do material em texto

Módulos
Módulos
Módulo 1.1.1 – Codewars	3
Resolvendo um Kata	3
Módulo 1.2 - Variáveis	10
Tipos Básicos e Variáveis	11
Nomenclatura das Variáveis	12
Palavras Reservadas	13
Tipos primitivos	14
Tipos básicos:	15
Agrupadores de dados:	16
Módulo 1.2.1 - Atividade Prática Variáveis	20
1. Variable assignment	20
2. Grasshopper - Messi Goals	20
Módulo 1.3 - Estruturas de Decisão	21
Operadores Relacionais	25
Operadores Lógicos	27
Módulo 1.3.1 - Atividade Prática Estruturas de Decisão	31
1. Drink about	31
2. Is he gonna survive?	33
Boa diversão!!! 🥤	34
Módulo 2.1 - String	35
Strings	35
Indexação e Fatiamento	37
Índices:	37
Fatiamento	38
Métodos de Strings	39
Módulo 2.1.1 - Atividade Prática String	52
1. Reversed Words	52
2. Short Long Short	53
Módulo 2.2 - Listas	54
Listas e métodos de lista	54
Criando uma Lista	55
Acessando os Itens de uma Lista	55
Removendo os Itens de uma Lista	56
Métodos da Lista	57
Ordenando Listas	68
Módulo 2.2.1 - Atividade Prática Listas	73
1. Find the smallest integer in the array	73
2. Grasshopper - Array Mean	74
Boa Diversão!! 😄	76
Módulo 1.1.1 – Codewars
Aqui é onde você executará grande parte dos exercícios e práticas do curso.  Para utiliza-la basta acessar o site do Codewars. Agora é preciso criar uma conta clicando em SignUp. Você terá que selecionar a linguagem Python.
Depois a ferramenta irá te propor um desafio para liberar seu login.
O Codewars irá pedir para você corrigir o que não está funcionando perfeitamente em um Kata(desafio). Nele, falta um return para então retornar a multiplicação entre a e b.
Após isso é só criar seu nome de usuário e pronto. Já conseguirá acessar todos os exercícios!
No Codewars, temos diversos problemas separados conforme a dificuldade para solucioná-los, indo do 8 kyu(Fácil) - 1 kyu(Díficil), então para você que está começando é recomendado focar nos Katas de 8 kyu e os de 7 kyu. Depois que tiver um pouco mais de prática avançar para os desafios mais complexos.
Resolvendo um Kata
Vamos verificar como funciona um Kata e resolver ele juntos, o que estaremos resolvendo é o Convert a Boolean to a String, que é um introdutório e pode ser encontrado nesse link.
Ao acessar esse Kata teremos a seguinte tela 
Do lado esquerdo temos a Instructions que ira descrever o problema e o que deve ser retornado pelo seu código. Ainda do lado esquerdo teremos o Output que irá exibir a saída do nosso código.
Agora do lado direito temos a parte do Solution e é nele que devemos escrever nosso código para resolver o problema do Instruction, e em baixo temos o Sample Tests que será utilizado para verificar nossa solução
Ao trabalharmos em um Kata teremos algo parecido com isso:
Caso ainda não saiba o que seja isso, são o que chamamos de funções no Python e definimos ela com o def, e precisamos utilizar o return para devolver a solução. Então geralmente você poderá apagar o que estiver dentro dessa função, sempre deixado no código o def e o nome que estava lá por padrão.
Agora vamos à solução desse problema, nas instruções temos que retornar o valor de um booleano em forma de string, no caso temos apenas duas opções de retorno True e False. Então para resolver o problemas precisamos fazer o seguinte:
Utilizando esse código na Solution e clicarmos no botão TEST no canto inferior direito teremos o seguinte resultado:
Essa mensagem é dada quando nosso código passar nos testes. E caso tivesse errado o que apareceria? Nessa situação teremos o seguinte:
E podemos verificar qual teste deu problema e que enviamos "Fale" e não "False", ai podemos corrigir essa situação. Esse teste que foi executado, pode ser visualizado no Sample Tests ali na linha 9 dele. Então sempre que um desses testes falhar você pode visualizar o que foi executado no código e tratar essa situação em específico.
Certo, meu TEST passou e agora? Nessa caso você pode clicar no ATTEMPT que irá executar diversos, testes que você não tem acesso. Se eles passarem você terá a seguinte tela:
Podemos ver que foram executados diversos testes, nesse caso 102 testes foram executados e caso todos passem agora teremos o botão SUBMIT para fazer o envio dessa solução e pronto, esse Kata foi resolvido.
Módulo 1.2 - Variáveis 
Tipos Básicos e Variáveis
Variável é um recurso primal de qualquer linguagem de programação para armazenar valores em memória. Ao declarar uma variável, podemos gravar e ler esses valores diretamente dela a partir do nome que definimos para a variável.
Atribuir variáveis em Python é fácil: basta colocar um nome de variável à esquerda de um sinal de igualdade =:
Isso pode parecer óbvio, mas geralmente quando estamos lendo algo no cotidiano, o sinal de = está associado a uma comparação, já no Python este operador é associado com atribuição. Se você tiver o modelo mental errado na hora de interpretar o que esta operação faz, a forma como o Python funciona pode parecer confusa.
Nomenclatura das Variáveis
Antes que você possa escrever sem muito esforço um código bonito e livre de bugs, você deve entender porquê ele é bonito. Os códigos são lidos muito mais frequentemente do que são escritos, então a legibilidade faz toda a diferença.
	Os nomes das variáveis têm comprimento ilimitado
	Os nomes das variáveis devem começar com uma letra ou um sublinhado _, seguido de letras, números ou sublinhados.
	Os nomes das variáveis são sensíveis a letras maiúsculas/minúsculas
	Os nomes das variáveis não podem ser palavras-chave
Os nomes variáveis convencionalmente devem ter letras minúsculas, com múltiplas palavras separadas por sublinhados.
Palavras Reservadas
Na nomenclatura de variáveis vimos que não podemos utilizar palavras-chave no nome, essas palavras-chave também são conhecidas como Palavras Reservadas. Elas recebem esse nome, pois pertencem à linguagem de programação. Aqui segue a lista de Palavras Reservadas do Python:
	as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield 
Se tentarmos definir qualquer variável com uma dessas palavras teremos um erro:
Tipos primitivos
Existem alguns tipos básicos de variável em Python que nos ajudam a ter mais controle sobre a lógica na hora desenvolvimento, algumas delas são:
Tipos básicos:
	int: de integer, denota que o valor da variável é um algarismo numérico inteiro. Exemplo de números inteiros: 1, 987, -50, -987654321
	float: Denota que o valor da variável é um número 'flutuante' ou real, com casas decimais. Exemplo de números reais: 1.5, -0.7, 127.33354, -957.834
	str: de string, denota que o valor da variável é um ou mais caracteres.
	bool: de boolean. Existem dois tipos incorporados que representam os estados binários True e False. Um objeto booleano pode ser usado para registrar o estado de algo, por exemplo, se uma tarefa foi concluída ou não, ou se um dispositivo está ligado ou não.
Leia: Números em Python
Leia: Valores Booleanos
Observação: Note que quando representamos número reais, utilizamos o "." e não "," como separador das casas decimais.
Agrupadores de dados:
	list: Utilizada para agrupar valores, a qual cada elemento da lista pode ser acessado por um indice numérico inteiro, sendo o primeiro elemento o de índice 0, o segundo de índice 1 e assim por diante. Uma lista pode conter vários dos tipos de variáveis citadas anteriormente, e pode ser alterada conforme o necessário. 
	tuple: Utilizada para agrupar valores, sua diferença para a lista é que a tupla não pode ser modificada uma vez criada. Também é possivel acessar os elementos da tupla a partir de um indice numérico inteiro. 
	dict: De dictionary, utilizado para agrupar valores com chaves únicas. Ao contrário das listas e das tuplas, que só suportam indices numéricos inteiros começando em 0, o dicionário nos permite customizar nossos índices para comportar qualquer tipo basico. A esses índices customizáveis damos o nome de key ou chave, e ao dado associado a ele pelos dois pontos damos o nome de value ou valor.Observe que no exemplo, a primeira chave 'chave_1' é do tipo string e seu valor é 20 do tipo int. Ja a segunda chave 2 é do tipo int e seu valor 'valor_2' é do tipo string
Módulo 1.2.1 - Atividade Prática Variáveis 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. Variable assignment
Arrume as declarações de variáveis de uma forma que o código guarde a string 'devLab' na variável name
Para realizar essa prática utilize este Link do Codewars.
2. Grasshopper - Messi Goals
Utilize variáveis para descobrir a soma dos gols que o Messi fez em 3 competições.
Informações
	La Liga - 43
	Champions League - 10
	Copa del Rey - 5
Tarefa
1. Criar as variáveis e guardar os valores apropriados utilizando a tabela acima:
	la_liga_goals
	champions_league_goals
	copa_del_rey_goals
2. Criar uma quarta variável chamada total_goals que guardará a soma de todos os gols do Messi neste ano.
Para realizar essa prática utilize este Link do Codewars.
Módulo 1.3 - Estruturas de Decisão 
Temos como algumas estruturas de decisão como if, elif e else. Se (if) uma determinada condição for atendida, faça algo — senão, se (elif) outra condição for atendida, faça algo diferente — senão, (else) faça algo quando nenhuma das condições forem atendidas. Cada condição termina com dois pontos : para indicar que um novo bloco de código indentado vem depois dele. O bloco de código identado após cada estrutura condicional, será executado caso a condição seja atendida.
if -> executado apenas quando a condição for verdadeira.
if... elif -> executa apenas a condição que for verdadeira.
if... else -> executa o if se a condição for verdadeira, senão passa para o else.
No caso do elif podemos repeti-lo diversas vezes e caso nenhuma das condições sejam satisfeitas podemos colocar um else. Por exemplo:
Operadores Relacionais
São operadores que podemos utilizar para fazer comparação entre dois valores, podendo ser utilizado variáveis na comparação. Ao utilizar um operador será retornado um bool, que pode ser True ou False, dependendo do resultado da comparação.
	==: Comparador de igualdade, como vimos que no Python para atribuir um valor a uma variável utilizamos o =, precisamos de uma outra forma de verificar se valores são iguais e para isso utilizamos o ==
	! = : Diferença, utilizamos para comparar de dois valores são diferentes
	<: Compara se o valor à esquerda do símbolo é menor que o valor a direita
	>: Compara se o valor à esquerda do símbolo é maior que o valor da direita
	>= : Compara se o valor à esquerda do símbolo é maior ou igual que o valor da direita
	< = : Compara se o valor à esquerda do símbolo é menor ou igual que o valor da direita
Operadores Lógicos
	and: Operador lógico "e", que retorna True, quando às duas comparações forem True, caso contrário irá retornar False
	or: Operador lógido "ou", que retorna True, se um dos valores for True
	not: Faz a negação do resultado
Podemos combinar qualquer quantidade desses operadores lógicos. Existe uma ordem de prioridade para o resultado quando utilizamos múltiplos operadores lógicos e a ordem que eles são resolvidos é essa: NOT, AND, OR. Caso queira alterar a ordem basta adicionar parenteses para as operações que devem ser feitas juntas:
Podemos ver que por mais que esteja sendo comparado os mesmos valores o resultado pode ser diferente, dependendo de da prioridade. Portanto, é importante prestar atenção na prioridade quando foi trabalhar com diversos operadores lógicos.
Esperamos que essa lição tenha sido clara. Qualquer dúvida, pode contar conosco!
Módulo 1.3.1 - Atividade Prática Estruturas de Decisão 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. Drink about
	Sua função irá receber a idade (integer) e deve retornar a bebida de acordo com a idade:
	Se a idade for menor que 14 deve retornar 'drink toddy';
	Se a idade for menor que 18 deve retornar 'drink coke';
	Se a idade for menor que 21 deve retornar 'drink beer';
	Se a idade for maior ou igual a 21 deve retornar 'drink whisky';
Para realizar essa prática utilize este Link do Codewars.
Exemplo
2. Is he gonna survive?
Ele irá sobreviver? Um herói está a caminho do castelo para completar sua missão. Entretanto, lhe foi dito que o castelo é protegido por alguns dragões muito poderosos! Cada dragão necessita de duas munições para ser derrotado, e o nosso herói não faz ideia de quantas munições ele deve levar... Assumindo que ele irá pegar um número específico de munições e partirá para a batalha contra um número específico de dragões, ele irá sobreviver?
Nota: Você receberá a quantidade de balas do herói e a quantidade de dragões do castelo.
Para realizar essa prática utilize este Link do Codewar.
Exemplo
Boa diversão!!! 🥤
Módulo 2.1 - String 
Temos um vídeo referente a este conteúdo, você pode acessá-lo aqui.
Olá, desenvolvedores! O nosso conteúdo do dia englobará algumas das estruturas fundamentais do Python, as strings. Esperamos que vocês possam tirar o máximo possível de proveito do conteúdo que estamos disponibilizando, não esqueçam de praticar bastante para fixar bem.
Strings
Um objeto string em Python tem informações de caracteres e pode conter qualquer número de caracteres, inclusive zero. Muitas vezes você verá esse tipo de dado abreviado como str.
As strings são indicadas usando aspas simples, aspas duplas ou aspas triplas. As aspas simples são utilizadas para maioria dos casos. Se quisermos inserir aspas simples dentro da string, teremos duas alternativas, a primeira alternativa é usar o operador de escape \ antes das aspas, e a segunda alternativa é envolver sua string com aspas duplas.
O mesmo vale para strings que contém aspas duplas, precisamos ou anular esse caractere com o operador de escape \, ou envolver a string com aspas simples. As aspas triplas são usadas para strings longas que podem se estender por várias linhas. O tipo de aspa usada no final da string deve corresponder ao tipo de aspa do começo. As aspas simples podem conter aspas duplas dentro delas, e vice-versa. Aqui vai alguns exemplos.
Indexação e Fatiamento
As strings são consideradas listas em Python, portanto, os caracteres dentro delas podem ser acessados via índice ou fatiamento.
Índices:
Para acessar um caractere em uma posição específica dentro de uma string, coloque um inteiro que representa a posição do caractere entre colchetes, [ ]. Os números positivos começam pela esquerda, pelo 0, e os números negativos começam pela direita, pelo -1.
Fatiamento
Para acessar grupos de caracteres dentro de uma string, chamados fatias, use dois pontos (:) para separar a posição inicial da posição final. A sintaxe se parece com isso string[start:stop:step], onde start, stop e step são inteiros.
	A posição start está inclusa na fatia resultante.
	A posição stop não está inclusa na fatia resultante.
	O valor de step indica quantos caracteres devem ser pulados por vez.
	Todos os valores são opcionais, desde que seja incluído um dois pontos para representar a operação de fatiamento.
Você pode usar até mesmo valores negativos para criar fatias interessantes.
Métodos de Strings
Vamos explorar alguns métodos incorporados que vem com cada objeto string.
	capitalize() - muda o primeiro caractere da string para maiúsculo 
	count() - retorna o número de ocorrências de uma determinada sub-string da string 
	endswith() - informa se a string termina com uma determinada sub-string 
	find() - retorna o primeiro índice de onde uma determinada sub-string é encontrada dentro da string (retorna -1 se não encontrar nada) 
	index() - o mesmo que find(), mas retorna uma exceção ValueError caso a sub-string não seja encontrada
	isalpha(), isdigit(), isspace () - informa se a string satisfaz os critérios de alfanumérico, número e espaço
Há um monte desses tipos de métodos que verificam as características de uma string. Digite dir(str) no REPL para consultá-los.
	join() - inserea string entre cada item de um determinado dado iterável
Este método é frequentemente usado anexado diretamente a uma string literal para ser usado como um separador para outros dados.
	lower() - retorna uma versão em letras minúsculas da string 
	replace() - substitui todas as ocorrências de uma sub-string da string por uma determinada string 
	split() - retorna uma lista de palavras de uma string, com um separador opcional para ser usado como delimitador 
	startswith() - informa se uma string começa com uma determinada sub-string
	strip() - remove os espaços em branco iniciais e finais do texto
Opcionalmente, você pode indicar um caractere alternativo para remover do início e do final do texto.
	upper() - retorna uma versão maiúscula da string 
Esperamos que você tenha aproveitado ao máximo o nosso conteúdo de loops. Conte conosco para o que precisar!
Módulo 2.1.1 - Atividade Prática String 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. Reversed Words
Complete a solução de modo que ela inverta todas as palavras da string passada por parâmetro
Para realizar essa prática utilize este Link do Codewars.
Exemplo
2. Short Long Short
	Dadas 2 strings, a e b
	Retorne uma string no formato menor+maior+menor, com a string menor por fora e a string maior por dentro. 
	As strings passadas nunca serão de tamanho igual, mas elas podem ser vazias (length 0).
Para realizar essa prática utilize este Link do Codewars.
Exemplo
Boa diversão!! 😁
Módulo 2.2 - Listas 
Temos um vídeo referente a este conteúdo, você pode acessá-lo aqui.
Olá, futuros desenvolvedores. Nessa lição vocês aprenderão um pouco mais sobre as listas e os seus métodos, é muito importante que vocês repliquem todos os exemplos para que possa ser fixado adequadamente.
Listas e métodos de lista
Video Aqui
As listas são um dos tipos de dados de sequência do Python e são úteis para armazenar dados relacionados em grupos usando apenas um nome. Elas são muito versáteis, permitindo armazenar dados de qualquer tipo dentro delas. Você irá usá-las o tempo todo. Aqui estão algumas características das listas.
	Elas são mutáveis - podem ser modificadas diretamente após a criação sem criar um novo objeto;
	São sequenciais - seus conteúdos são ordenados e podem ser acessados através de sua posição dentro da sequência.
Criando uma Lista
Como é o caso de alguns outros tipos de dados, há mais de uma maneira de criar uma lista: a sintaxe literal [] e a função incorporada list().
As duas linhas de código acima resultam na mesma lista. A diferença é que a função list() leva um iterável(um objeto em que pode ser feito um loop sobre) como argumento e popula a lista resultante com cada um dos valores do iterável. No exemplo acima, "abc" é uma string, que é iterável, e retorna um caractere por vez quando é iterada.
Acessando os Itens de uma Lista
Assim como as strings, as listas podem ser indexadas e fatiadas. Isso possível devido à sua característica sequencial.
Removendo os Itens de uma Lista
Isso mesmo! Há várias maneiras de fazer isso. Você será apresentado a alguns métodos na seção seguinte, mas aqui estão algumas maneiras de fazer isso com palavras-chave Python e fatiamento. A remoção de fatias de uma lista permite que você remova pedaços de uma só vez. Basta atribuir um iterável falso (e.g., "", (), [], {}) e toda a fatia é então removida da lista. É comum usar um literal de string vazia, "". Lembre-se, o fim da fatia não é incluído na própria fatia (ou seja, my_list[2:5] inclui os índices 2, 3 e 4, mas não o índice 5).
Métodos da Lista
Os métodos de lista incorporados permitem que você efetue operações em uma lista. Observe como alguns deles modificam a lista localmente, sem retornar uma nova lista. Isso se deve à característica da lista de ser mutável. Às vezes, isso pode ser uma surpresa se você estiver esperando uma lista como um valor de retorno, já que algumas delas retornam um tipo Nenhum.
	append() - adiciona um item ao fim de uma lista 
	clear() - remove todos os itens de uma lista 
	copy() - retorna uma cópia de uma lista 
É importante observar que isso produz uma cópia rasa de my_list1. Isso afetará a forma como as alterações dos itens da lista são tratadas.
	count() - conta o número de ocorrências de um valor a partir de uma lista 
	extend() - adiciona itens de um iterável ao final de uma lista 
Pode ser fácil confundir extend() com append(), dado que ambos adicionam algo ao final de uma lista. Tente lembrar-se que o append() adiciona o objeto inteiro à lista…
…mas o extend() adiciona cada item de um iterável.
	index() - obtém o índice da primeira ocorrência de um valor em uma lista 
Veja você mesmo o que acontece quando o valor que você está procurando não está na lista. Mais adiante nesse curso, discutiremos como lidar apropriadamente com as exceções.
	insert() - adiciona um item em qualquer posição de uma lista 
	pop() - remove o último(se não for passado parâmetro) e/ou retorna um item de qualquer posição de uma lista(caso o parâmetro seja informado) 
Observe que, sem argumentos, o pop() remove e retorna o último item da lista. A palavra "pop" é parte da terminologia utilizada ao se discutir estruturas de dados como pilhas, o que veremos em breve.
	remove() - remove a primeira ocorrência de um valor de uma lista 
	reverse() - inverte a ordem dos itens de uma lista 
Ordenando Listas
	sorted() - ordena os itens de um iterável e os retorna em forma de lista
	list.sort() - ordena os itens de uma lista in loco
Os itens da lista podem ser ordenados usando a função incorporada do Python sorted(), ou o método sort() de um objeto de lista. A diferença é que sort() é um método em um objeto de lista que ordena a lista in loco…
…já a função incorporada sorted() pega um iterável e retorna uma lista de seus itens ordenados.
Ambos permitem algum tipo de personalização na forma como a lista é ordenada ao usar um par de argumentos de palavra-chave.
	key - uma função que será aplicada a cada item, e terá seu resultado usado como o valor de ordenação
	reverse - um indicador booleano para indicar a direção da ordenação
Essa foi a nossa lição sobre listas, agora para fixar esses conceitos, você deve praticar, preparamos uma atividade especial para vocês!
Módulo 2.2.1 - Atividade Prática Listas 
ão se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. Find the smallest integer in the array
Dado uma lista de inteiros, sua solução deverá retornar o menor número da lista.
Você pode assumir, para o proposito dessa prática, que nunca passaremos uma lista vazia para a sua função.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
2. Grasshopper - Array Mean
Ache a média de uma lista de números.
Para realizar essa prática utilize este Link do Codewars.
Informação
Para achar a média de um conjunto de números, some todos eles e divida pela quantidade de números na lista.
Por exemplo, considerando uma lista com os seguintes números [1, 3, 5, 7]
	Some todos os números da lista: 
	Divida esse numero ( 16 ) pela quantidade de números da lista. Neste exemplo temos 4 números na lista. 
	A média dessa lista é 4 
Atenção: Caso seja passada uma lista de tamanho 0 ou vazia ( [] ), o retorno deverá ser 0 ( zero ), não esqueça de adicionar essa verificação na sua lógica para alcançar 100% de sucesso!
Boa Diversão!! 😄
Módulo 2.3 - Tuplas 
Temos um vídeo referente a este conteúdo, você pode acessá-lo aqui.
As tuplas, assim como as listas, são um dos tipos básicos de dados de sequência do Python. Entretanto, elas se diferem das listas no sentido em que são imutáveis. Elas são o tipo de dado perfeito para quando você precisa armazenar dados agrupados de forma que eles não possam ser modificados, tais como as constantes para usar ao longo de um programa. Nesta aula, destacaremos as características e métodos das tuplas.
Sintaxe das tuplas
Uma tupla de elementoúnico pode ser criada através da colocação de uma vírgula depois de um único valor, entre parênteses ou não.
Acessando Tuplas
Os elementos de uma tupla podem ser acessados da mesma forma que acessamos as listas, com indexação e fatiamento.
As Tuplas são Imutáveis
Os valores de uma tupla não podem ser alterados. Se você tentar reatribuir um índice de uma tupla, uma exceção será exibida.
Observação: estruturas mutáveis aninhadas dentro de uma tupla, no entanto, podem ser modificadas (por exemplo, uma lista dentro de uma tupla), o que pode resultar em algumas coisas diferentes que você deve ficar atento quando começar a usar o Python de formas mais avançadas.
Desempenho das Tuplas
A imutabilidade das tuplas é importante para entender seu uso. Considere adicionar itens a uma lista. Como uma lista é mutável, ela pode ser modificada sem criar nenhum novo objeto na lista. Aqui está um exemplo de atribuição de 10 número a uma lista, um de cada vez.
Agora, considere tentar o mesmo tipo de operação com uma tupla. Devido a sua imutabilidade, um novo objeto tupla deve ser criado em cada iteração.
A mutabilidade é importante para o desempenho quando você sabe que estará modificando frequentemente um objeto. Neste caso, use uma lista para evitar a criação de um novo objeto cada vez que ela for modificada. As tuplas, por outro lado, são a escolha perfeita para os dados que você sabe que não serão modificados.
Métodos de Tuplas
	count() - retorna o número de ocorrências de um determinado valor na tupla 
	index() - retorna o índice da primeira ocorrência de um determinado valor na tupla 
E esses são todos os métodos das tuplas! O poder delas está em sua implementação e utilização, em vez de numa abundância de métodos de manipulação de dados, visto que seus dados não podem ser manipulados!
Esperamos que você tenha aproveitado ao máximo todo o conteúdo, conte conosco para o que precisar!
Módulo 2.3.1 - Atividade Prática Tuplas 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
Prática de Tuplas: criando e concatenando tuplas
Olá, desenvolvedores. Nessa prática, vocês serão desafiados a criarem duas tuplas e juntar as duas em uma terceira tupla. Exemplo:
Esperamos que você aproveite ao máximo a prática, pode contar conosco para qualquer dúvida!
Boa Diversão!! 😄
Módulo 2.4 - Funções 
Funções
	Função é um bloco de código que só vai ser executado quando chamado.
	Uma função também pode retornar dados.
	Para executar uma função, coloque o nome (da função) seguido de parênteses.
Exemplo
Parâmetros
	Uma função pode receber múltiplos argumentos nos parâmetros dela ou não receber nenhum.
	Os argumentos são passados nos parênteses, que estão logo após o nome da função.
	Você também pode passar alguns parâmetros padrão para sua função.
Exemplo
Utilizando apenas um argumento. 
Exemplo 2
Utilizando múltiplos argumentos.
Parâmetros Padrão e Retorno
	Quando você chama uma função sem nenhum argumento, esse parâmetro padrão sera rodado no lugar.
	Você pode retornar o valor de uma função para armazenar em uma variável.
Exemplo
Módulo 2.4.1 - Atividade Prática Funções 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. Function 3 - Multiplying two numbers
Implemente uma função multiply que receba 2 números e retorne a multiplicação deles.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
2. Grasshopper - Basic Function Fixer
Arrume a função Eu criei essa função para adicionar 5 a qualquer numero que for passado para ela e retornar o novo valor. Ela não sinaliza nenhum nenhum erro, mas retorna o número.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
3. Grasshopper - Function syntax debugging
Um estudante estava trabalhando em uma função e cometeu alguns erros de sintaxe enquanto codava. Ajude-o a encontrar seus erros e arrume-os.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
4. Grasshopper - Summation
	Escreva um programa que encontre a somatória de cada número entre 1 e o num.
	O número (num) sempre será um inteiro positivo maior que zero.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
Boa diversão, dev!! 😄
Módulo 3.1 - Loops 
Olá, desenvolvedores! O nosso conteúdo do dia englobará algumas das estruturas fundamentais do Python (e qualquer outra linguagem), os nossos loops. Esperamos que vocês possam tirar o máximo possível de proveito do conteúdo que estamos disponibilizando, não esqueçam de praticar bastante para fixar bem.
for…in
O Python não remove e tem loops for no sentido tradicional. Ele tem apenas loops for...in, o qual chamaremos de loop for. O loop for do Python pega um iterável e retorna cada item dele, um por vez, até que todos os itens tenham sido iterados ou o loop tenha terminado. Ele funciona no estilo iteração e iterável, que veremos mais detalhadamente numa aula futura. No exemplo a seguir, carrinho_compras  é uma lista de itens de compra. Dentro do loop for, você tem acesso à iteração atual do item a cada passagem pelo loop.
Aqui está um exemplo da impressão de cada letra de uma string, uma de cada vez.
Melhores Amigos para Sempre
Diga "oi" aos melhores amigos do loop for!
	enumerate() - obtém tanto um índice quanto um valor a partir de um iterável 
Esta função incorporada pareia cada item de um iterável com a sua posição dentro do iterável. Isso é extremamente comum, e é especialmente útil quando você precisa verificar outras posições dentro do iterável a partir do contexto do item atual. Considere um exemplo onde queremos fazer um loop em uma lista de números e descobrir se a soma de quaisquer dois números de uma linha é igual a 10.
	range() - gera uma sequência de inteiros com base nos valores indicados 
Esta função incorporada pode ser usada para emular o tradicional loop for ao fazer o loop um determinado número de vezes. Ele tem duas formas principais. Se você fornecê-lo com apenas um argumento, ele vai começar em 0 e usará o seu argumento como o valor stop (sem incluí-lo).
O código acima imprimirá 0-9. É muito comum cometer o erro de pensar que o intervalo inclui o valor do stop. Neste caso, use range(11) para incluir o número 10.
A outra forma consiste em dois ou três argumentos. Ao usar mais de um argumento, o primeiro argumento se torna o valor start, o segundo é o stop, e o terceiro argumento é opcional, e é o valor step, ou incremento. Então, se você quisesse começar em 1 no exemplo acima, você poderia fazer o seguinte.
E, por fim, o terceiro valor que podemos passar como parâmetro para range é o "step", isto é, de quantos em quantos elementos acontecerá a iteração, colocando o valor 3 como step por exemplo, teremos o i iterando a cada três elementos.
while
O loop while é usado quando você quer continuar fazendo algo enquanto uma condição é verdadeira ou até que o loop seja encerrado manualmente. A sintaxe para isso é a palavra-chave while, seguida por uma expressão que resulta em Verdadeiro ou Falso.
Muitas vezes, você vai precisar identificar se o que você precisar é um loop for ou um loop while, e muitas vezes qualquer um dos dois servirá. Entretanto, normalmente um é mais adequado do que o outro para resolver um problema específico, e rapidamente se tornará claro qual deles torna o trabalho mais fácil em cada situação.
Esperamos que você tenha aproveitado ao máximo o nosso conteúdo de loops. Conte conosco para o que precisar!
Módulo 3.1.1 - Atividade Prática Loops 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. Enumerable Magic #3 - Does My List Include This?
Crie uma função que aceite uma lista e um item, e retorne True caso o item pertença à lista, e False caso não pertença.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
2. Count the Monkeys!
Você levou seu filho para a floresta para ver os macacos. Você sabe que existe um certo númerodeles (n), mas seu filho é muito jovem para apreciar o número total, ele precisa começar a contar a partir do 1.
Como um bom pai, você senta e começa a contar com ele. Dado um número (n), popule uma lista com todos os números até n incluindo o próprio n, mas excluindo o zero.
Para realizar essa prática utilize este Link do Codewars.
Exemplo
Boa diversão!!! 😆
Módulo 3.2 - Dicionários 
Dicionários
	São utilizados para guardar dados em chave:valor.
	Não aceitam duplicatas.
	
Itens de Dicionário
	Itens de dicionário são os pares de chave:valor. 
Exemplo
Duplicatas não são aceitas
Itens de Dicionários - Tipos de Dado
	Os valores de um dicionário pode receber qualquer tipo de dado. 
Exemplo
Métodos de dicionário
	keys(): Retorna uma lista com as chaves do dicionário.
	values(): Retorna uma lista com os valores do dicionário.
	items(): Retorna uma lista de tuplas contendo os pares de chave:valor do dicionário.
Módulo 3.2.1 - Atividade Prática Dicionários 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
1. L1: Bartender, drinks!
Para realizar essa prática utilize este Link do Codewars.
	Sua função vai receber uma string nos parâmetros e retornar de acordo com a tabela abaixo:
	"Jabroni" - "Patron Tequila"
	"School Counselor" - "Anything with Alcohol"
	"Programmer" - "Hipster Craft Beer"
	"Bike Gang Member" - "Moonshine"
	"Politican" - "Your tax dollars"
	"Rapper" - "Cristal"
	qualquer outra coisa - "Beer"
Nota: qualquer outra coisa é um caso base: se a string passada por parâmetro não existir na nossa tabela, retornar 'Beer'.
Atente-se em cobrir os casos em que certas palavras não vêm com a formatação correta, exemplo: o parâmetro "pOLitiCIaN" ainda deve retornar "Your tax dollars".
Exemplo
Boa diversão!!! 😀
Módulo 3.3 - Iteração em Dicionário 
	Podemos fazer uma iteração em um dicionário utilizando um for, em outras palavras, vamos percorrer esse dicionário. 
Percorrendo um Dicionário
	Por padrão ele percorre pelas chaves do dicionário. 
Percorrendo utilizando .keys()
Percorrendo utilizando .values()
Percorrendo utilizando .items()
Módulo 3.3.1 - Atividade Prática Iteração em Dicionários 
Não se preocupe em fazer todos as práticas, eles são sugeridos para você praticar. Fique a vontade e conte conosco!
Hora da Prática!
Para praticar os conceitos aprendidos sobre Iteração de Dicionário vamos fazer um exercício. 😀
Utilize o Replit para realizar essa atividade.
Exercício
	Parâmetros
	Sua função receberá um dicionário no parâmetro. 
	Procedimento
	Criar uma lista;
	Se a quantidade e o valor for menor que 7, deve criar um dicionário com a chave sendo o nome da fruta e o valor sendo a quantidade dela e adicionar esse dicionário a lista criada;
	Retorno
	Deve retornar uma lista de dicionários contendo o nome da fruta como chave e a quantidade comprada como valor. 
Exemplo
	Função: comprar_frutas(frutas)
	Procedimento: Criar uma lista; Armazenar em uma lista de dicionários com o nome e a quantidade das frutas que tenham valor e quantidade menor que 7
	Esperado Que: Retorne uma lista de dicionários
Boa diversão!!! 😎
Módulo 4.1 - Bibliotecas 
O que são Bibliotecas?
As bibliotecas são uma coleção de módulos(códigos) que podem ser importados para dentro do seu código e, dessa forma, podemos ter mais agilidade no processo de desenvolvimento, pois não precisamos desenvolver tudo do zero.
Essas bibliotecas podem tratar de soluções simples até processos mais complexos, além de você poder desenvolver as suas próprias bibliotecas. O Python possui algumas bibliotecas adicionais por padrão, entretanto algumas dessas bibliotecas precisam ser instaladas de forma separada.
Utilizando uma Biblioteca
Existem algumas formas de fazer essa importação
	import: Utilizamos o import seguindo pelo nome da biblioteca que desejamos importar 
Nesse exemplo importamos o pacote datetime, que possui diversas funções para manipular datas e horas. Depois fazemos a utilização da função date que importamos do datetime. Ela serve para armazenar uma data e podermos trabalhar com ela utilizando métodos específicos de date, como acessar o ano, mês e dia individualmente.
Utilizando a biblioteca não precisamos fazer a verificação se uma data seria válida, por exemplo, pois a própria biblioteca faz essa verificação:
Também podemos dar um apelido para essa biblioteca para que não seja necessário ficar digitando o nome completo toda vez, para isso fazemos a importação da seguinte forma:
	from: Normalmente utilizamos quando não queremos importar tudo da biblioteca, apenas algo específico dela 
E da mesma forma que fizemos no import nós podemos utilizar o as para dar um apelido para o que estamos importando
⚠️Cuidados com a importação
Quando estiver trabalhando com importações tome cuidado para não repetir os nomes, pois o seu código não iria apontar erro na importação. Então se por acaso alguma importação acabar tendo o mesmo nome utilize apelido para que não fique com o mesmo nome.
Como saber o que uma biblioteca pode fazer?
Quando se tem uma biblioteca é comum que seja disponibilizada uma documentação que contém exemplos de sua utilização. É importante saber que algumas documentações podem ser mais detalhadas e completas do que outras.
Por exemplo, podemos acessar a documentação do datetime aqui.
Outras bibliotecas do Python
Se quiser você pode visualizar outras bibliotecas que estão disponíveis por padrão no Python sem que seja necessário fazer instalação de algo adicional. Para visualizar essa lista basta acessar esse link.
Módulo 4.2 - Introdução ao Pygame 
Na plataforma do replit já podemos criar um projeto que contenha o Pygame, então basta criar um novo projeto e no lugar da linguagem selecionar o Pygame.
Com o projeto criado já podemos trabalhar com o Pygame, e o primeiro passo é fazer a importação do Pygame e também ja vamos fazer a inicialização dele
Com esse código acima teremos o seguinte resultado:
Agora temos que definir uma forma de saber se nosso jogo continua rodando ou se ele foi finalizado
Nosso jogo já está começando a tomar forma, e para nos próximos conteúdos veremos como desenhar objetos na nossa tela e também para fazer movimentação deles na tela.
Documentação do Pygame
A documentação do Pygame está toda em inglês, mas caso tenha interesse e verificar o funcionamento acessa a documentação dele aqui.
Módulo 4.3 - Desenhando no Pygame 
Como já aprendemos a iniciar nosso jogo do Pygame e definimos o loop principal, agora vamos ver como fazemos para adicionar alguns objetos para o nosso jogo.
Desenhando Objetos
O Pygame já vem com uma opção para podemos fazer alguns desenhos básicos como retângulos, círculos, polígonos e linhas. E estaremos utilizando essa opção para não precisarmos adicionar imagens e fazer a utilização dela.
Então vamos ver como criar algumas dessas formas:
Ao executar o seguinte código, vemos que na tela o retângulo e o círculo que nós criamos:
Agora vamos entrar em detalhes do que nosso código está fazendo
Primeiro vamos dar uma olhada nas nossas variáveis red e green, a tupla que usamos para definir o valor dessa variável representa o RGB da cor. Caso queira selecionar uma cor diferente basta pesquisar na internet por Color picker e terá algumas alternativas, agora é só escolher a cor deseja e copiar os valores do RGB e pronto.
Agora a função pygame.display.update() faz a atualização da nossa tela, isso quer dizer que vai ser exibido tudo que foi adicionado ao nosso display.
A função pygame.draw.rect(dis, red, [position_x, position_y, square_size, square_size]) recebe como parâmetros o display que criamos, uma cor e uma lista com os valores com o seu formato. Os dois primeiros valores desse formato(postion_x e position_y) indicam a esquerda e o topo do retângulo, isso quer dizer que o tamanho desse retângulo será feito a direito e abaixo desse ponto. E por último os dois últimos valores indicam o width(largura) e height(altura) que no nossocaso como foi um quadrado utilizamos o mesmo valor para ambos.
Por último a função pygame.draw.circle(dis, green, (position_x + 200, position_y), circle_radius) é bem semelhante ao do retângulo, os dois primeiros parâmetros tem a mesma funcionalidade. O terceiro parâmetro é um tupla que indica qual vai ser o centro do círculo, por isso na imagem ele ficou um pouco acima do quadrado. E o último parâmetro é o raio desse círculo, caso não lembre o que seja raio é a distância de um ponto da borda do círculo até o centro.
Atenção ao Posicionamento
Acabamos de ver como faz para desenhar um objeto no Pygame, mas precisamos prestar atenção com os valores do posicionamento.
O ponto (0, 0) fica no canto superior esquerdo, portanto o ponto (dis_width, dis_height) fica no canto inferior direito. Dessa forma se desenharmos um círculo nesses dois pontos teremos o seguinte:
Note que apenas uma parte do círculo está aparecendo, pois, o centro dele se encontra nesses extremos da tela.
É importante entendermos essa questão do posicionamento para quando fomos fazer a movimentação desses desenhos.
Módulo 5.1 - Adicionando Movimentação no Pygame 
Agora que já sabemos como desenhar objetos na nossa tela, mas eles estão parados e em um jogo normalmente temos objetos se movimentando. Portanto, precisamos fazer esse objeto que foi desenhado se movimentar pela nossa tela, para isso precisamos alterar a posição dele a cada vez que entrarmos no loop da nossa tela.
Nesse código utilizamos o clock.tick(speed), o motivo é para limitar os frames por segundo máximo na máquina, isso quer dizer que se o computador que estiver executando for muito potente o jogo funcione da mesma forma.
Agora vamos executar para ver o que o resultado desse código:
Mas o que aconteceu nessa aplicação? Porque ficou essa linha vermelha?
O motivo dessa linha ficar aparecendo é bem simples, a cada vez que executamos o nosso loop nós desenhamos um novo quadrado sem remover o anterior. Então o que temos são diversos quadrados que foram desenhados em posições diferentes.
A forma de resolver isso é bem simples, apenas precisamos fazer algumas alterações:
Esse comando dis.fill() vai substituir tudo que está presente na tela pela cor que for passada, dessa forma vai remover o quadrado que foi desenhado anteriormente.
Agora ao executar teremos o seguinte:
Agora podemos ver que é exibido apenas um quadrado pela tela, mas para onde ele foi?
Como não fazemos nenhuma verificação ele continuou nessa direção, se você fazer o print da variável position_y você consegue ver que ela vai aumentando indefinidamente. E para evitar que isso aconteça precisamos colocar uma trava para indicar qual o valor máximo de y que nosso desenho pode ir. E para aproveitar já vamos definir também o valor minimo e fazer o mesmo para o x.
Precisamos alterar nosso código da seguinte forma para corrigir esse problema:
Executando agora teremos o seguinte:
Pronto! Agora nosso quadrado não está indo mais para o infinito e além.
Para a movimentação seria isso, para que o quadrado mova para "cima" precisaríamos subtrair o speed do position_y, enquanto para mover para esquerda e direita precisaríamos alterar o position_x.
Módulo 5.2 - Adicionando Controles no Pygame 
Já vimos como faz para movimentar um desenho pela nossa tela, mas ainda está faltando adicionar uma forma de controlar esse movimento. Então é isso que iremos fazer, vamos partir do último código que fizemos sobre movimentação e fazer algumas alterações para ser possível controlar a movimentação.
Quando executarmos esse código teremos o seguinte resultado:
Pela imagem não da para perceber, mas ao pressionarmos qualquer tecla de movimentação o nosso bloco irá se mover naquela direção indefinidamente. E esse pode ser um comportamento que não queremos e para isso precisaremos fazer uma pequena alteração:
Dessa forma teremos o seguinte resultado:
Agora esbarramos em outro problema, ao executar e mantermos a tecla pressionada só ira efetuar o movimento uma vez. Precisamos alterar esse comportamento para que enquanto estivermos pressionando a tecla continue o movimento.
Alterando novamente o loop, teremos o seguinte:
Agora nossa movimentação ficará da seguinte forma:
Utilizando Outras Teclas
Nessa movimentação, nós utilizamos as setas do teclado para controlar ela, mas poderíamos ter utilizado qualquer outra tecla para isso. Por exemplo, podemos permitir a utilização do WASD para controlar a movimentação além das setas, para isso precisamos alterar os nossos ifs das teclas pressionadas da seguinte forma:
E fazer algo parecido para os outros ifs, apenas trocando a tecla que vai ser verificada. Lembrando de adicionar a tecla no evento KEYUP.
Módulo 5.3 - Adicionando Texto ao Pygame 
Em algumas situações podemos querer adicionar textos ao nosso jogo, como nós casos que nós queremos exibir a pontuação do jogador. E para fazer isso é bastante simples de se fazer, e o primeiro passo seria cria uma fonte:
Nesse código buscamos uma fonte que esteja presente no sistema, o primeiro parâmetro é o nome da fonte e o segundo parâmetro é o tamanho.
Agora vamos criar uma função que vai ser responsável para exibir esse nosso texto:
Antes de continuar vamos dar uma analisada nessa função, primeiro vamos para essa função render, ela recebe como parâmetro o texto que será utilizado na renderização e pode ser qualquer string, o segundo parâmetro é um booleano para indicar se utiliza antialias e isso serve para tirar o serrilhado do texto e por último o terceiro parâmetro é a cor do texto a ser renderizado.
Agora essa função blit, serve para colocar uma imagem sobre a outra, no caso estamos colocando a imagem do texto sobre o fundo. O segundo parâmetro é para indicar o posicionamento dessa imagem.
O próximo passo é fazer a chamada dessa função:
Após executar o nosso código teremos algo parecido com o seguinte resultado:
É isso para esse conteúdo, ele é um pouco mais simples. Mas lhe permite que sejam adicionados diversos conteúdos de texto ao seu jogo.
Módulo 5.4 - Adicionando Imagens ao Pygame 
Já aprendemos como adicionar desenhos na nossa tela e fazer a movimentação e isso pode ser o suficiente para começar a fazer o protótipo de um jogo.
Mas para publicar um jogo vamos querer adicionar imagens próprias e fazer isso é bem simples no Pygame, pois já possui uma forma de carregar imagens de sua máquina para o Pygame. E o primeiro passo para isso é carregar a imagem:
Nesse trecho apenas carregamos nossa imagem e obtemos o retângulo que representa ela, por exemplo, de a imagem for 32x32 o nosso retângulo vai ser 32x32.
Para a movimentação vamos utilizar algo um pouco diferente do que fizemos com o quadrado, como temos o retângulo referente ao nosso player, vamos utilizar uma função ali que permite fazer essa movimentação. Assim nosso loop ficaria dessa forma:
Esse código vai deixar uma movimentação automática para nosso player, igual à primeira movimentação que fizemos para o quadrado. Para adicionar o controle, apenas precisamos alterar o speed quando uma tecla for pressionada.
Agora vamos analisar o esse código fez, a primeira coisa é que definimos o speed e o char_speed do personagem. A função move_ip faz a movimentação do player_rect na tela no eixo x e y utilizando a lista do char_speed. E por último a função blit coloca a imagem do player na posição do player_rect.
Com esse código teremos o seguinte resultado:
Transformações na Imagem
Pode acontecer que seja necessário redimensionar a imagem ou até mesmo rotacionar ela para ficar conforme a necessidade que tem no jogo. Para isso temos algumas funções do Pygame para lidar com essas situações, e aqui estão algumas dessas funções:
	pygame.transform.flip(): Inverte a imagem horizontalmente ou verticalmente
	pygame.transform.scale(): Redimensiona a imagem
	pygame.transform.rotate(): Rotaciona a imagem
Existem outras funções para fazer essas transformações, mas essas são uma das principais.

Continue navegando