Vamos "iii" mais uma coisinha aqui sobre strings, que é como a gente pode fazer a comparação de strings e como isso é feito Python. Primeiro, para comparar a gente vai usar o mesmo item, o mesmo conjunto de caracteres que a gente utiliza para comparar no Brasil inteiro, então se eu tenho string X e eu quero saber se ele é igual ao string Y, eu simplesmente vou fazer isso aqui: X == Y Se eu quero saber se eles são diferentes, eu vou usar mesmo o sinal de diferente, X! = Y. Mas vamos ver como isso funciona aqui no integrador Python, então se X, se X é o string 'teoria' e Y é o string 'prática' e perguntar: X é igual a Y? Vou falar que não, é falso, X não é igual a Y. X é diferente de Y? Sim, verdadeiro, X é diferente de Y. Outra coisa, se eu tiver uma outra variável Z, que também é igual a 'teoria', então são duas variáveis diferentes, mas se eu perguntar se o conteúdo delas é o mesmo, eu vou dizer que sim, true, verdadeiro, o conteúdo é o mesmo. E além disso, se eu perguntar neste caso, o string aqui é tipo uma exceção, X é Z, ou seja, tanto X quanto Z estão apontando para o mesmo objeto, como os strings são imutáveis na linguagem Python, isso aqui é verdadeiro, porque se, quando você, quando eu definir aqui Z como string 'teoria', o Python, ele verifica que já tem esse string teoria algum lugar da memória? Sim, já tem, onde o X está apontando, então ele fala, então o Z vai apontar para o mesmo lugar porque os strings são imutáveis, não pode mudar, então deixa apontando para lá para economizar memória. Então, nesse caso, você tem strings com o mesmo conteúdo. No caso de string, os dois acabam apontando para a mesma posição da memória. Fora isso, tem outra coisa, outro tipo de comparação, que é comparação com maior ou menor. Então se eu fizer X é maior que Y, ele vai dar verdadeiro, por quê? Teoria é melhor que prática? Não, não é porque teoria é melhor que prática, nada a ver, é porque na ordem lexicográfica, teoria vem depois do que prática. O que é que é ordem lexicográfica? É a ordem caractere a caractere. A gente pode pensar que os caracteres são armazenados na memória do computador por meio de códigos, cada caractere tem o seu código. E, na verdade, essa comparação, o que está comparando é se o código de é maior ou o código de outro ou não. Como é que a gente pode saber o código? Tem essa função aqui: ord, que dá o número de ordem, o número ordinal do caractere no padrão Unicode, que é padrão internacional aí de representação de caracteres que o Python adota. Então, se eu perguntar, qual que é o código da letra a minúscula? É 97. Note que é diferente do código da letra a maiúscula, que é 65. Então, na hora que eu comparei teoria com prática ele vai calculando caractere a caractere, se eles são iguais ou diferentes, então ele vê o código ali. Primeiro era o t, primeira letra da teoria, t. Deu 116, e o código do p é 112, então o 116 é maior que o 112, então as palavras que começam com t são maiores, nesse maior de string, do que as que começam com p. Se a primeira letra desse igual, ele ia para a segunda letra. E assim por diante até encontrar uma letra diferente, daí o que vale é qual o que é o maior. Como nesse código Unicode as letras aparecem ordem alfabética, a ordem que o maior e o menor do string nos dão, também é a ordem alfabética. Só tem pequeno porém, note, você viu aqui o que é, o a minúsculo tem código maior que o a maiúsculo, então, na verdade, primeiro, nessa ordem, primeiro vêm todas as letras maiúsculas e depois vêm todas as letras minúsculas, então qualquer letra maiúscula vai ser considerada maior que qualquer letra minúscula. Então, se quiser comparar as palavras, independente da letra maiúscula ou minúscula, primeiro você tem que chamar aquela função to lower, por exemplo, se você quiser, tem uma palavra assim, uma palavra 'maçã', mas você quer comparar maçã com banana, por exemplo, isso aqui, deu falso, maçã não é maior que banana. Mas, se a gente fizer independente de letras maiúsculas, como é que a gente pode fazer isso? Passar tudo para minúsculas. Daí dá verdadeiro. Maçã é, maçã com minúscula é maior que banana, com minúscula. Então, dessa forma a gente pode comparar os strings e agora eu vou deixar uma lição para vocês. Note que eu mostrei aqui o maior, mas também tem o menor. Então, a gente pode fazer X maior que Y, X menor que Y, X maior é igual a Y. Todas essas possibilidades existem. Aqui sempre vai ser a ordem lexicográfica que é computada. Então, eu vou deixar uma lição para vocês, que é para vocês exercitarem isso, que é o seguinte, aqui. Escreva uma função que recebe array de strings como parâmetro e devolve o primeiro string na ordem lexicográfica, ignorando-se letras maiúsculas e minúsculas. O primeiro na ordem lexicográfica, não é o primeiro elemento do array, é o primeiro na ordem lexicográfica, aquele que tem as letras com ord menor, então se tiver uma letra com a, vai vir antes do que uma letra, uma palavra que começa com a, vai vir antes que uma palavra que começa com b. Então, a sua função pode ser algo do tipo assim: o menor string na ordem lexicográfica, se encontrar nome melhor, use seu nome melhor, esse meu nome não está muito bom, mas por enquanto é o que temos. E daí é, como sempre é bom você fazer uma função teste que vai verificar se essa função menor string está implementada corretamente diferentes casos. Então, a função teste pode ser algo do tipo assim: testa menor string e daí você tem que testar para diferentes casos, você pode ter diferentes testes pontuais. Tanto vai testar para o caso, sei lá, caso exemplo aqui, ana, maria, José e Valdemar. Então, para esse caso aqui, o menor na ordem lexicográfica deveria ser a ana. Eu estou fazendo aqui teste pontual que devolve o valor esperado. E assim por diante. Então você faça uma boa implementação, testando diferentes casos, e também implemente a função teste pontual que eu implementei aqui. Então, bom trabalho. [MÚSICA] [MÚSICA] [MÚSICA]