Olá! Eu gostaria de contar para vocês quatro conceitos simples, muito simples pequenos conceitos de ciência da computação e como eles se refletem na linguagem Python. São coisas muito simples mas, que são úteis no dia a dia da programação, principalmente quando a gente está fazendo programas Python. Então, o primeiro desses conceitos é a atribuição a listas de valores, isso é uma coisa que poucas linguagens permitem, mas, Python é uma delas. Então vamos ver como isso funciona Python. Já viu que a gente pode fazer uma atribuição, por exemplo: x = 10, a gente está pegando o valor 10 e colocando na variável x. Inglês isso é chamado de 'assignement'. Mas Python a gente pode fazer uma coisa bem interessante, a gente pode ter uma lista de valores, por exemplo: x, y uma lista de variáveis aqui nesse caso, e do lado direito da atribuição, do sinal de igual, uma lista de valores, então, 10, 20 por exemplo. Fazendo isso, o x = 10 e o y = 20. Então, formato genérico a gente pode ter três, por exemplo: a, b, c = 1, 2, 3. O que o interpretador Python faz? Ele pega o primeiro valor aqui armazena na primeira variável. Segundo valor, segunda variável, terceiro valor, terceira variável. E assim por diante. Então, a, b, e c teriam esses três valores. Outra coisa interessante que a gente pode fazer com isso, a gente pode fazer uma função devolver uma lista de valores, e daí atribuir o valor devolvido por essa função para sequência de variáveis. Vamos fazer pequeno exemplinho de como isso funcionaria aqui, vamos criar pro exemplo, uma função chamada peso_altura( ) e vai ser uma função muito simples que ela vai devolver o meu peso e altura. 77, 1.83. Então, a função é só isso, Salvar o arquivo. Nome aí qualquer, pronto. E daí aqui, note, é uma função que devolve dois valores, uma lista de valores. Então, eu preciso atribuir esse valor para uma lista de valores. Então eu vou fazer algo do tipo: peso altura, recebe, agora vou chamar a função. peso_altura. Fazendo isso a variável peso recebeu o valor 77, e a altura, 1.83. É relativamente comum Python a gente ver funções que devolvem uma sequência de valores e a gente pode atribuir essa sequência de valores a diferentes variáveis. Uma última coisinha desse conceito, Python tem jeito muito fácil de trocar os valores de duas variáveis que outras linguagens seria mais difícil. Então, por exemplo, se a = 10 e b = 20, se eu quisesse trocar o valor de a para o b, o valor de a vai para b e o valor de b vai para a, outras linguagens de programação a gente precisaria de três atribuições para fazer isso, precisaria colocar numa variável temporária, intermediária, dos valores. Pode experimentar fazer isso casa. Mas Python tem jeito muito fácil de fazer isso, simplesmente fazer a, b recebe b, a, vai trocar os dois valores. Agora o a passou a valer 20 e o b passou a valer 10. Então, esse aí foi o primeiro conceito que a gente viu, então vamos para o segundo. Atribuição aumentada, que a gente chama Python. A gente já viu que a gente pode ter algo desse tipo aqui. Se x = 10, então posso fazer algo do tipo: x = x + 10. Isso aqui vai dar certo, x vai ficar valendo 20. Esse tipo de construção x = x + alguma coisa, x = x vezes alguma coisa, é uma construção que acontece com tanta frequência que Python e várias outras linguagens como Java, definiu-se uma forma abreviada, uma sintaxe abreviada de fazer a mesma coisa, que é isso que a gente chama de atribuição aumentada, no momento que você atribui você faz alguma operação. Então a gente pode, vez fazer x = x + 10, a gente pode fazer x + = 10. É exatamente a mesma coisa. Então, agora o x está valendo 30, estava 20 e foi para 30. E, assim como tem o + = a gente tem o * = x * = 2 x * = 2, x passa para 60 A gente tem o dividido igual, tem o resto da divisão, que é o percento igual, tem a potenciação, então se o x = 2 e eu faço x ** = 10, agora o x vale 1024 que é dois elevado a décima potência. Então, essa aí é a atribuição aumentada que a gente usa para tornar o código mais enxuto, mais abreviado. Terceiro conceito é de valores padrão para parâmetros. Vamos supor, então vamos pegar aqui a nossa função essa que a gente fez peso_altura. Não, eu vou criar outra função porque essa aqui não tem parâmetro nenhum. Vamos criar outra função aqui mesmo. pagamento_semanal() que vai calcular quanto uma pessoa deve receber de pagamento pelo trabalho de uma semana. E ele vai ter dois parâmetros, o valor por hora, quanto a pessoa recebe por hora de trabalho (valor_por_hora), e o outro vai ser o num_horas que trabalhou naquela semana, e daí, a gente vai devolver ali o valor_por_hora vezes o num_horas. Só isso, vou executar aqui. Eu errei a sintaxe, esqueci dois pontos. Dois pontos. E agora, eu posso chamar minha função pagamento_semanal, por exemplo, se eu ganho 100 reais por hora e trabalho 36 horas naquela semana, eu tenho direito a 3600 reais. Então, essa aí é uma função que recebe dois parâmetros e devolve determinado valor. Agora, vamos supor que, quase sempre eu chamo essa função com 40 horas semanais que é o que as pessoas normalmente trabalham. Daí, o que eu posso fazer é, usar esse conceito que a gente está vendo aqui de valor padrão para determinado parâmetro, e colocar aqui dessa forma. Então, se eu colocar que o número de horas recebe 40, aqui na lista de parâmetros, isso aqui se torna parâmetro opcional. Se eu não atribuir valor quando eu estou chamando essa função pagamento_semanal para esse parâmetro num_horas, daí o sistema automaticamente vai atribuir o valor padrão 40. Então, ao fazer isso, eu vou executar aqui novamente, ao fazer isso eu posso, se eu fizer da forma antiga, pagamento_semanal, 100,36 ele continua funcionando, continua devolvendo 3600, mas se eu fizer pagamento semanal, 200 200, e não passar mais nenhum parâmetro, daí ele vai considerar como padrão o valor de horas semanais 40 e ele vai calcular 200 vezes 40 e dá 8000, tá, então esse parâmetro passa a ser parâmetro opcional, Python a gente pode ter vários parâmetros obrigatórios, desse tipo aqui e depois vários parâmetros opcionais. A regra é que os parâmetros opcionais têm que ficar no fim da lista, tá. Porque se você coloca ele no começo, parâmetro opcional seguido por parâmetro não opcional, vai dar erro de compilação, porque, gera uma ambiguidade que o próprio interpretador não vai saber como resolver. Então, você tem que ter uma lista de parâmetros zero ou mais parâmetros obrigatórios no início, depois no final os parâmetros opcionais. Então, era isso sobre os valores padrão para parâmetros. E o último conceito de hoje é a asserção de invariantes, e o comando assert. Tem vários momentos durante a nossa vida de programador, que a gente sabe que determinados pontos do programa, algum valor ou alguma expressão tem de ser verdadeira para que o nosso programa esteja num estado consistente. E se alguma expressão estiver errada, estiver falsa, a gente quer parar o programa e dar uma mensagem de erro porque a gente chegou num estado inconsistente. Então, só para dar pequeno exemplo, aqui no pagamento_semanal, não faz sentido que o valor por hora seja negativo, alguém ter que pagar para trabalhar, não faz muito sentido. Então, o valor por hora tem que ser número positivo, e a mesma coisa o número de horas, não faz sentido trabalhar número de horas negativo. Então, eu poderia colocar uma asserção invariante aqui no começo, então, a gente colocaria o comando assert e daí a expressão que a gente quer verificar. Então, eu quero verificar se o valor_por_hora, se ele é > 0 e além disso, and, então, vai ser uma expressão booleana aqui, num_horas também tem que ser maior que zero. Então, vamos executar. Então, como é que funciona agora essa asserção aqui? Se eu chamar essa função, pagamento_semanal com valores que são positivos, ele vai simplesmente calcular, o assert não faz nada, ele passa por cima do assert e não faz nada, e devolve o valor normal. Agora, se por acaso eu colocar valor negativo, então, supor que eu ganho 100 reais por hora e eu trabalhei menos dez horas aí o assert entra ação. O que é que aconteceu, falhou essa expressão booleana devolveu falso. Como eu tinha and, o and exige que os dois lados sejam verdadeiros, como o segundo lado era falso, o assert deu falso, então, essa minha asserção aqui não está sendo verdadeira, então ele gera essa mensagem de erro. E daí, ele fala que, na linha cinco desse arquivo, o nome do arquivo, eu chamei ele de apagar, aqui na função chamada pagamento_semanal tem esse assert aqui que tem naquela linha e deu assertion error, ou seja, deu erro naquela asserção, aquela asserção não está verdadeira. Então, vai ter vários momentos que a gente vai querer colocar esses asserts no nosso código para garantir que determinados valores variáveis fazem sentido. Então, por hoje é só. [MÚSICA] [MÚSICA] [MÚSICA]