Vamos agora aprender mais sobre strings. A gente já tinha visto rapidamente pouco sobre strings né, mas vamos falar mais sobre eles. Primeiro vamos lembrar todos os tipos de dados que nós vimos até agora. Tem o que a gente chama de tipos simples, ou tipos primitivos, são aqueles tipos inteiros, números ponto flutuante, números booleanos né. Cada desses valores tem apenas valor dentro de si. Por outro lado a gente viu os strings e a gente viu também as listas, que na verdade são coleções de objetos, coleções de valores né. Então as listas podem ter coleções de objetos de qualquer tipo. Já os strings são tipo específico de objetos. Por quê? Porque é uma coleção sequencial de caracteres. Cada elemento de string é carácter. Vamos ver como que funciona isso. Então, quando a gente escreve string amora, por exemplo. A gente coloca aspas, amora e aspas. Ou então a gente pode usar apóstrofes, tanto faz, desde que a gente seja consistente. Então na verdade aqui a gente tem uma sequencia de caracteres. O carácter A, M, O, R e A. Os strings mais simples que a gente pode ter é o string vazio, tá? Então isso aqui se eu perguntar qual que é o tipo e digitar aqui apóstrofe apóstrofe, isso é objeto da classe string, do tipo string, mas é string vazio. Outra coisa. Lembra que a gente não pode fazer operações com string que o string não saiba lidar com elas. Então por exemplo, eu não posso fazer algo assim, mesmo que eu tenha o string tendo números, eu não posso fazer uma operação aritmética com ele tá. Então "15" não é mais número do tipo inteiro por exemplo. É string, é o carácter e o carácter cinco. Então aqui ele deu essa mensagem de erro particular: não consigo, não sei converter o inteiro para objeto do tipo string dessa forma. Se eu quiser fazer esse tipo de operação, tem duas coisas que eu poderia fazer. Eu poderia converter para inteiro usando esse "type cast", esse "int", abre parenteses, convertendo aqui dessa forma, eu poderia fazer isso aqui. Aí assim tudo bem, dá 17. Outra coisa que eu poderia querer fazer é ao contrário, converter o dois para string, dessa forma. E daí dá 152. Porque lembra, o sinal de mais, quando a gente tem dois strings, o que ele faz é concatenar os strings tá. Então nesse caso eu concatenei o 15 ao dois transformado pra string e deu 152. Outra coisa interessante que a gente pode fazer é usar a multiplicação, que na verdade não é multiplicação, mas sim é uma repetição. Se eu fizer por exemplo esse string aqui vezes três, ele vai criar uma novo string que é isso aí concatenado à ele mesmo três vezes. Vamos supor agora que tem uma variável aqui, time que contém o valor ibis. Então time tem o ibis ali. Agora lembra que eu falei que string é uma sequencia de caracteres, uma coleção sequencial de caracteres. Então outra coisa que a gente pode fazer é acessar cada dos elementos. Então o time de zero nesse caso tem esse i maiúsculo com acento né. O time de tem o b minúsculo, o time de dois tem o i minúsculo, o time de três tem o s. Se eu perguntar aqui qual o valor do time de quatro, ele vai dar erro: string index out of range. Quatro não é valor válido para esse meu string né. Outra coisa interessante e particular de Python é se a gente usa índice negativo. Se você coloca time de menos ele devolve na verdade o último elemento aqui que é esse s. O time de menos dois vai devolver esse minúsculo e assim por diante tá? Índices negativos são raramente utilizados, quase sempre a gente vai utilizar índices positivos. Vamos agora dar uma olhada para várias funções que a gente pode utilizar com os strings. A gente na verdade pode dizer também que são métodos da classe string. Quais são esses métodos? A gente não vai ver todos, vamos ver alguns que são mais úteis. Vai, o primeiro é o upper. O que que faz o upper? Ele converte para upper case, ou seja, para letras maiúsculas todos os elementos, todas as letras daquele string. Então o nosso ibis aqui fica IBIS com todas as letras maiúsculas. Da mesma forma tem o lower. O lower converte para lower case, para letrar minúsculas todas as letras. Então o i do ibis que era maiúscula virou i minúscula mantendo o acento agora. Uma outra coisa, função interessante, é a função capitalize. Se eu tenho uma frase qualquer: Ana gosta de banana. Eu posso chamar nesse string o método capitalize, capitalize, e o que que ele faz? Ele coloca a primeira maiúscula tá? Então essa palavra, esse verbo "capitalizar" não existe português né, mas inglês se fala capitalize, é colocar a primeira letra maiúscula. E mesmo que se tivesse tudo maiúscula, por exemplo BRAZIL assim né, escrevi até com z para dar a influência americana aqui, ele colocar só a primeira maiúscula e o resto minúscula. Outra coisa interessante que é muito útil, principalmente se você está lendo coisas da web, você está lendo coisas que o usuário digitou, por exemplo o login name de website, às vezes sem querer a gente coloca espaço branco antes ou depois e para não causar problema tem uma função que remove esses espaços branco do começo ou depois da palavra. Então vamos supor que eu quero digitar aqui meu email, mas sem querer eu digito uns espaços branco, fabio@hotmail.com e mais uns espaços branco aqui. Daí tem a função que se chama strip, esse strip, ela simplesmente remove os espaços branco do começo e do fim. Outra função interessante é uma função, vamos pegar o "Ana gosta de banana" que essa funciona bem, é o count. O count ele conta quantas ocorrências de determinado substring existe dentro desse string. Então por exemplo eu quero contar quantas letras "a" aparecem nessa frase "Ana gosta de banana". Ele vai dizer: seis vezes aparece a letra "a" "Ana gosta de banana". Agora se eu quero perguntar quantas vezes aparece o "n". Ops, eu esqueci das aspas. Vamos de novo aqui. Quantas vezes aparece o "n"? "n" aparece três vezes "Ana gosta de banana". Então esse count aí é bastante útil. Uma outra função, vamos supor que eu tenho string "eu torço para o Corinthians". Esse aqui é string não muito real, não muito verdadeiro. Então para a gente tornar ele string mais verdadeiro eu poderia usar aqui o replace. E o que que eu vou falar para o replace? Replace é substituir né, então eu vou falar para substituir o Corinthians, aqui pelo glorioso São Paulo. E daí a gente vê qual que é o resultado: "eu torço para o São Paulo". Então a gente pode, esse replace ele substitui pedaço de string por outro pedaço. Outra coisa, vamos pegar esse "Ana gosta de banana" capitalizado, capitalized, e chamar nisso aqui uma outra função, que é a função center. Essa função center ela centraliza o texto, mas daí você tem que dizer qual a largura de texto que você quer. Então por exemplo, eu quero string com 80 caracteres de largura e eu quero que tenha centralizado nele com a primeira maiúscula o "Ana gosta de banana". E daí eu posso fazer assim, pronto! Daí o string começa aqui e termina ali, são 80 caracteres e aparece centralizado, capitalized, esse "Ana gosta de banana". Então a gente viu aqui não só o funcionamento do center né, mas também que eu posso concatenar essas chamadas de função, uma após a outra, para fazer várias transformações. Outra coisa que eu posso fazer, vamos supor que eu tenho aqui o string amora. Não, vamos pegar string maior vai. Então o texto recebe "minha terra..." tem palmeiras onde "gorgeia" o mar. Então está aqui, eu tenho esse meu texto e eu posso agora usar o método find, find, para achar coisas dentro dele. Então por exemplo eu posso achar onde que está o primeiro m minúsculo desse meu texto. Ele fala: está na posição 14, tem o primeiro m minúsculo. Ou eu posso falar: onde que está a primeira ocorrência da sílaba ma nessa string? Ele fala: na posição 41, que é aqui, deve ser no mar, não é? Tem a primeira ocorrência da sílaba ma. Ou onde que está, o contrário de má é bom, não é? Então, onde está a ocorrência do bom? Aí dá menos 1. Menos 1 é para indicar que esse string não ocorre no string texto, está? Então essa substring bom não está presente no texto, portanto ele devolve menos 1 para indicar que não está presente. O que mais a gente pode fazer, relembrando se a gente já tinha visto, a gente pode perguntar qual é o comprimento de determinado string com a função len, de length. O comprimento desse string então aqui é 44. Outra coisa que a gente pode fazer, assim como é possível fazer, pegar parcelas, intervalos de uma lista, a gente pode fazer a mesma coisa com strings, os slices, não é? Se eu tenho uma fruta aqui, e essa minha fruta é amora, eu posso fazer o seguinte: eu posso fazer fruta, tem várias formas de fazer esses slices, cortar a minha fruta. Eu posso falar: eu quero tudo até a posição 4, sem incluir a posição 4. E daí dá amor, ó que romântico. Ou eu posso falar que eu quero da posição 1 até o final. O quê que dá? Dá mor, não é? Entendeu? Morou? Ou eu posso falar que eu quero trecho ali no meio. Então eu posso falar: eu quero tudo da posição 2 até a posição 4 e não, sem incluir a posição 4, que dá o or, aquele operador lógico or. Estão, quanta coisa tem dentro da amora, não é? Mas isso é para mostrar só que a gente pode fazer esse slicing com os strings para pegar pedaços dos strings também. Então essas aqui são várias funções que existem disponíveis para String e a gente vai acabar usando muito dessas funções, quando a gente tiver manipulando textos Python. Eu quero deixar para vocês exercício. Lembra: o único jeito de aprender uma linguagem de programação é fazendo exercícios, é praticando. Só assistindo esses vídeos, você não vai assistir, não vai aprender, você tem que sentar no computador, abrir lá o seu executador Python, escrever os programas e executar os programas e escrever os testes para verificar que os programas estão corretos, que "iii" automatizados. Então qual que é o exercício que eu vou deixar para vocês? É esse aqui ó: Escrever uma função que recebe uma lista de strings contendo nomes de pessoas como parâmetro e devolve o nome mais curto, o nome mais curto que tiver dentro dessa lista de strings. A função deve ignorar espaços antes e depois do nome e deve devolver o nome, entre aspas, capitalizado, ou seja, apenas com a primeira letra maiúscula. Então só a título, exemplinho aqui. Vamos supor, a sua função, pode ser que ela se chame o nome mais curo, vamos chamá-la de mais curto. Eu não estou muito criativo. E ela vai receber como parâmetro ali uma lista de nomes. Então vai ser algo desse tipo. Então se essa lista de nomes aqui, por exemplo, essa lista de nomes for algo assim: ana, josé, arquibaldo, eu vou colocar aqui o Arquibaldo com maiúscula, Arquibaldo, [SEM_ÁUDIO] e mais outro nome aqui com os espaços, Alouhis, nome bonito, não é? Alouhis. Então se for essa aqui a minha lista, e aí eu fiz o pedido de o mais curto de nomes, qual que ele vai devolver? Então lembra é a função o nome mais curto, daí o nome mais curto vai ser pelo número de caracteres. Então claramente aqui é o ana. Só que ele deve devolver com a primeira maiúscula, então ele vai ter que passar esse primeiro a para maiúscula e além disso, deve ignorar espaços. Deixa eu, no exemplo, eu acabei não colocando os espaços, aí não apareceu os espaços. Então mesmo que eu tenho espaços aqui no ana, no começo, ele vai ignorar esses espaços, então ele vai dizer que o ana é o mais curto, porque eu quero ignorar esses espaços antes e depois do nome. Então implementem essa função o mais curto e depois implementem uma função também, o testa mais curto, que vai testar para vários casos diferentes se a sua função mais curto está funconando. Então, por hoje é só. [MÚSICA] [MÚSICA] [MÚSICA]