Dado que a gente já aprendeu ali as variáveis booleanas, as expressões booleanas, vamos aprender mais uma utilidade aqui dessas variáveis booleanas que são os indicadores de passagem. Às vezes a gente usa uma variável booleana para indicar se uma determinada condição passou a ser verdade ou não, se ela é verdade ou não, e daí a gente atribui verdadeiro ou falso para aquela variável booleana e, depois, a gente usa essa variável booleana num while, num laço de repetição, para definir quando é que a gente sai fora desse laço. Então, é o que a gente chama de aqui, indicadores de passagem. Vamos aprender isso através de exemplo, que a coisa fica mais concreta. Vamos supor que, o usuário vai digitar uma sequência de números, e você tem que dizer se essa sequência de números está ordem decrescente ou não, então, se for 100, 90, 80, 50, 40, 30, 20, elá está ordem decrescente. E daí você tem que dizer: esta sequência está ordem decrescente. Ou se é outra sequência tipo: dez, 20, dez, não está. Daí, você diz que essa sequência não está ordem decrescente. Como que a gente faz isso? Vamos ver aqui. Primeiro, então, eu vou ter uma variável, que vai ser o meu indicador de passagem, que vai ser uma variável booleana, que eu vou chamar aqui de decrescente. E eu vou falar que inicialmente, eu vou supor que sim, que a sequência de números está ordem decrescente, daí, eu vou fazer while, e aqui eu vou precisar de alguma condição, e daí eu vou ler aqui número. Então, eu vou ler determinado valor recebe, vamos trabalhar com números inteiros, então, input: digite número da sequência. [SEM_ÁUDIO] Então vai digitar valor e eu quero saber se esse valor, se ele é, para ele ser decrescente ele sempre tem que ser menor que o valor anterior, se ele vai ser decrescente, valor menor. Então, eu vou perguntar aqui, se o meu valor é menor menor ou igual que o valor anterior. Aí tudo bem, aí eu continuo com o meu valor, com a minha sequência decrescente, então, nesse caso, o decrescente continua valendo true. Mas se ele já estava definido como true eu não preciso escrever de novo, o decrescente recebe true e não vai mudar nada, então, na verdade, o que me interessa é o caso oposto que o valor é maior que o anterior. Se o valor lido agora é maior que o anterior, quer dizer que a sequência não está ordem decrescente, então, o decrescente recebe false. Então, esse aqui vai ser o meu indicador de passagem que, quando eu encontro valor que é maior que o anterior decrescente vai receber false. Agora, esse anterior é uma variável que a gente não definiu ainda. Então, o que eu preciso fazer é que quando eu faço isso, daí quando eu vou aqui para a próxima interação do meu while eu vou fazer aqui, o anterior recebe o valor. Se eu estou numa interação, o valor de uma interação vai ser o anterior da próxima interação, então, por isso que o anterior do próximo vai ser igual o valor deste aqui. Então, eu já defini valor aqui, eu vou ter vai ser o valor da próxima. Agora, eu estou com problema, porque a primeira vez que eu entro aqui o anterior não tem valor nenhum, então, eu preciso ter valor inicial jeito de resolver simples isso aqui é lendo separadamente esse valor inicial, então, eu vou fazer isso aqui: o anterior recebe, e eu vou ler aqui separadamente, eu vou pedir para ele digitar aqui. Digite o primeiro número da sequência. Vou mudar aqui, vou falar: digite o próximo número da sequência. Primeiro e depois os próximos números da sequência, e daí, ele vai repetindo. Agora, qual é a minha condição? Eu preciso duas coisas: primeiro, eu preciso ter critério de parada. Então, vamos supor que vamos usar aquele critério de parada que a gente usou no último exercício, que foi: quando chega zero, a gente pára. Então, vamos supor que quando chegar zero a gente para, então, eu vou fazer aqui: enquanto o valor é diferente de zero, a gente para. Mas, eu também vou querer parar eu vou querer executar isso aqui, então, eu vou executar enquanto o valor é diferente de zero, e for uma sequência decrescente, então eu posso fazer: and decrescente. Enquanto o decrescente for true e o valor for diferente de zero, eu continuo repetindo. Quando que eu vou cair fora desse while? Ou porque o valor ficou igual a zero, e daí acabou a sequência, ou porque o decrescente ficou false. Decrescente ficou false quando a gente detectou que o valor era maior que o anterior. Agora tem pequeno, mais pequeno problema, porque o valor aqui, a primeira vez que entra o valor, não está atribuído nada, então a gente tem várias formas de resolver, uma é colocando valor qualquer que seja diferente de zero, por exemplo. Aqui, tinha esquecido esse parêntesis, para fechar com aqui. Aqui também esqueci o parêntesis, note que eu abri os dois parêntesis, tenho que fechar os dois aqui. Está tudo bem, vamos salvar isso aqui num arquivo chamado decrescente.py. Mas note que eu fiz todo o cálculo e eu não dei a resposta final. Qual que seria a resposta final? Eu tenho que dizer se a sequência está ordem decrescente ou não. E tem dois casos, depende do valor da variável decrescente. Então se a variável decrescente, if decrescente é igual a true, print, a sequência está ordem decrescente. Parabéns, você conseguiu. Caso contrário, a sequência não está, para ficar mais bonitinho, vamos colocar aqui smiley, ele está feliz, aqui ele está ficando muito triste porque a sequência não está ordem decrescente. Aliás, a gente pode simplificar, note que eu fiz decrescente igual a true, mas decrescente já é uma variável booleana. Portanto, pode fazer o seguinte simplesmente isso: se decrescente, imprima isso, caso contrário, imprime essa outra coisa. Vamos ver se eu acertei de primeira aqui ou se eu cometi algum erro. Vamos lá. Decrescente, vamos executar aqui. Vamos lá, python3decrescente. Sempre tem errinho, e esse errinho eu já sei qual é. Note que aqui já deu para ver que eu esqueci dos dois pontos, sempre precisa no if finalizar a expressão booleana, aqui, com esses dois pontos que eu coloquei aqui e tinha esquecido ali. Vamos lá! Mais erro, depois do else também nós precisamos dois pontos, nunca esquecer. E agora parece que deu certo. Vamos lá. Digite o primeiro número da sequência. Dez, digite o próximo número da sequência. Nove, oito, sete, seis, cinco, quatro, três, dois, zero. A sequência está ordem crescente, que feliz aqui que está a saída do meu. programa. Agora, vamos experimentar outra sequência aqui. Digite o primeiro número da sequência: 100. 90, 95, imediatamente, assim que eu digitei número que transformou a sequência não decrescente, imediatamente ele detectou e ele já parou, porque foi aquela nossa condição de parada, o nosso indicador de passagem que detectou que esse decrescente ficou valendo false e esse while aqui já ficou valendo false, imediatamente ele veio para cá, quando é decrescente valendo false, então caiu no else imprimiu isso aqui. Isso aqui são os indicadores de passagem. Deixa fazer mais exercício aqui para ilustrar os indicadores de passagem e daí vocês vão fazer outro desafio que eu vou deixar para vocês. Esse outro que eu quero mostrar para vocês para ilustrar o seguinte: vamos supor que você está fazendo programa para verificar números de cartões de crédito. Então, você pede primeiro para o usuário digitar o número do meu cartão aqui, recebe os números do cartão de crédito são inteiros, input. Digite o número do seu cartão de crédito. [SEM_ÁUDIO] Fecha outro, e daí eu vou fazer aqui de novo, cartão lido, recebe. Enquanto o cartão lido é diferente de zero, eu vou terminar essa sequência de cartões de crédito. Então, o que é que vai acontecer? Ele vai digitar primeiro o número do cartão de crédito dele, depois eu vou digitar vários cartões de crédito diferentes e o meu programa tem que dizer se o meu cartão de crédito aparece naquela lista de cartões, ou não. Esse é o exercício, dado o número de cartão de crédito, e depois uma sequência de cartões de crédito terminados por zero, dizer se aquele número inicial do seu cartão aparece naquela sequência de números de cartões de crédito ou não. Então, como é que a gente faz isso? Enquanto o cartão lido for diferente de zero, eu vou ler. Então eu coloquei esse aqui simplesmente para entrar na primeira vez no while. Então eu vou ler aqui o cartão dessa mesma forma aqui, da mesma forma que eu tinha colocado lá, só que a mensagem vai ser diferente. Vai ser: digite o número do próximo cartão de crédito, então ele vai digitar vários números e então eu verifico, se o cartão lido é igual ao meu cartão, daí encontrei meu cartão na lista recebe true. E aqui eu vou repetindo isso aqui, enquanto não encontrei o meu cartão na lista. Então, enquanto eu não encontrei o meu cartão na lista, vou repetindo isso aqui quando, se eu encontrar meu cartão na lista, eu marco aqui, esse indicador de passagem e isso vai fazer eu cair fora do while. Agora preciso iniciar o valor dessa variável aqui, como eu quero que no começo ele vai repetindo, se eu colocar aqui o valor falso, porque inicialmente eu não encontrei o meu cartão na lista. Inicialmente não encontrei, vou procurando, enquanto eu não encontrei, eu vou repetindo, então ele vai cair fora do while, ou porque a primeira parte deu falso, ou porque a segunda parte deu falso. Se a segunda parte deu falso, note, falso significa que essa variável está valendo verdadeiro, que significa que encontrei meu cartão na lista, ou então ele vai cair fora do while porque chegou no final da sequência e o cartão lido é diferente de zero. Aqui no final, o indicador de passagem já tem o valor, a resposta, se eu encontrei o cartão na lista ou não. Eu posso falar: if, se eu encontrei meu cartão na lista, print: eba, meu cartão está lá. Se bem que eu não sei se é bom ou não, isso depende da lista, se for uma lista de cartões roubados talvez você preferisse não encontrar seu cartão lá. Vamos supor que é uma coisa boa. Caso contrário: Xi, meu cartão não está lá. Vamos supor que esta é a lista dos cartões válidos, se o seu cartão não está lá, então é problema. Vamos ver se, gravar isso aqui num arquivo chamado cartoes,py. Vamos ver se está certo. Então, python3 cartões.py. Então, primeiro tenho de digitar número de cartão de crédito. Número de cartão de crédito, eles são grupos de quatro, dois, três, quatro, dois, três, quatro. Então, digite, esse aqui é o meu cartão de crédito, agora vários números de cartões de crédito. [INAUDÍVEL] Se eu fizer isso aqui e agora vai, vamos digitar o meu, 64644 24296967474 deu: Eba, meu cartão está lá. Deu certo o indicador de passagem detectou aquilo. Se por outro lado eu fizer a mesma coisa, tem os vários números, eu vou fazer agora que não acho o número do meu cartão de crédito, digito vários e não acho e daí vou terminar a sequência com zero. Zero, Xi meu cartão não está lá. Esse aqui é exemplo diferente de uso de indicador de passagem, agora vou deixar desafio para vocês. O desafio é o seguinte, dado número você que tem que dizer se esse número tem dois dígitos adjacentes iguais. Então, só para pegar alguns exemplos aqui, esse número aqui não tem nenhum dígito adjacente igual. Já esse número aqui, tem dois dígitos adjacentes iguais. O dois e o dois aqui são dois dígitos adjacentes iguais. Esse aqui também, oito, oito, esse aqui também tem dois dígitos adjacentes iguais. Então o programa que vocês têm que fazer, isso é desafio, usando indicador de passagem, dado número com vários dígitos, dizer se esse número tem dois dígitos adjacentes iguais ou não. Vocês vão ter que usar várias coisas que a gente aprendeu aqui nessas últimas aulas, não é fácil, mas concentrem-se que vocês vão conseguir fazer. [MÚSICA] [MÚSICA] [MÚSICA]