Vamos ver como comparar Strings em Python. Método 1: usando operadores relacionais Os operadores relacionais comparam os valores Unicode dos caracteres das strings do índice zero até o final da string. Em seguida, retorna um valor booleano de acordo com o operador usado. Exemplo:
Resultado: Verdade Verdade Falso FalsoMétodo 2: usar é e não é O operador == compara os valores de ambos os operandos e verifica a igualdade de valor. Já o operador is verifica se ambos os operandos se referem ao mesmo objeto ou não. O mesmo é o caso para! = E não é . Vamos entender isso com um exemplo: str1 = "Geek" str2 = "Geek" str3 = str1 print("ID of str1 =", hex(id(str1))) print("ID of str2 =", hex(id(str2))) print("ID of str3 =", hex(id(str3))) print(str1 is str1) print(str1 is str2) print(str1 is str3) str1 += "s" str4 = "Geeks" print("\nID of changed str1 =", hex(id(str1))) print("ID of str4 =", hex(id(str4))) print(str1 is str4)Resultado: ID de str1 = 0x7f6037051570 ID de str2 = 0x7f6037051570 ID de str3 = 0x7f6037051570 Verdade Verdade Verdade ID de str1 alterado = 0x7f60356137d8 ID de str4 = 0x7f60356137a0 FalsoO ID do objeto das strings pode variar em diferentes máquinas. Os IDs de objeto de str1, str2 e str3 eram os mesmos, portanto, o resultado é True em todos os casos. Depois que o id de objeto de str1 for alterado, o resultado de str1 e str2 será falso. Mesmo depois de criar str4 com o mesmo conteúdo do novo str1, a resposta será falsa, pois seus IDs de objeto são diferentes. O vice-versa acontecerá com não. Método 3: Criando uma função definida pelo usuário . Usando operadores relacionais, podemos apenas comparar as strings por seus unicodes. Para comparar duas strings de acordo com alguns outros parâmetros, podemos fazer funções definidas pelo usuário. No código a seguir, nossa função definida pelo usuário irá comparar as strings com base no número de dígitos. def compare_strings(str1, str2): count1 = 0 count2 = 0 for i in range(len(str1)): if str1[i] >= "0" and str1[i] <= "9": count1 += 1 for i in range(len(str2)): if str2[i] >= "0" and str2[i] <= "9": count2 += 1 return count1 == count2 print(compare_strings("123", "12345")) print(compare_strings("12345", "geeks")) print(compare_strings("12geeks", "geeks12"))Resultado: Falso Falso Verdade
Para entendermos como o Python estabelece a relação entre 2 caracteres, precisamos entender alguns conceitos sobre o princípio da computação. Então, nessa aula, iremos estudar alguns conceitos que não estão relacionados diretamente a linguagem Python, e sim, a computação propriamente dita. A seguir, temos um código de "degustação", onde as expressões serão o resultado da relação entre 2 caracteres. >>> "A" == "A" True >>> "b" == "b" True >>> "a" > "c" False >>> "C" > "a" False
A tabela ASCII contém os caracteres vinculados a um número inteiro positivo. Essa tabela decorre do fato de que o computador só manipula números, logo, cada caractere, possui, um número que o identifique. O termo ASCII é um acrônimo de American Standard Code for Information Interchange que numa tradução livre, seria, "Código Padrão Americano para o Intercâmbio de Informação". Podemos obter o código ASCII de um caractere ou então, através de um caractere, obter o seu respectivo código. Geralmente, trabalhamos com os códigos ASCII quando estamos definindo funcionalidades para determinadas teclas, como por exemplo, na construção de um jogo. A tabela ASCII é a convenção que define o valor decimal e binário de cada caractere. Nesse momento, não aprofundaremos o estudo sobre a tabela ASCII ou então, o padrão UNICODE. Porém, estudaremos detalhadamente numa próxima situação. Agora, o que nós temos que saber, é que cada letra do nosso teclado está associado a um valor numérico. Veja neste link uma explicação da relação do Python com o sistema UNICODE . Por exemplo, a letra A maiúscula recebe o código 65, a letra B o código 66 e assim por diante. A letra a minúscula, recebe o código 97, e a letra b minúscula o código 98 e assim por diante. Esses valores serão utilizados, por exemplo, quando comparamos 2 String distintas. Por exemplo, se digitar a seguinte expressão, qual o valor lógico retornado? Temos que o valor lógico retornado será True, até porque, o código ASCII do caractere a minúsculo (65) é maior do que o caractere X maiúsculo. O Python disponibiliza 2 funções que são bastante uteis quando estamos trabalhando com o sistema ASCII. A primeira é a função ord() , que recebe uma letra como parâmetro e retorna o código ASCII da mesma. A segunda função, é a chr() , onde passamos o código ASCII e nos é retornado a respectiva letra. A seguir, temos 2 exemplos utilizando as funções builtin do Python ord() e chr(). >>> ord('a') 97 >>> chr(97) 'a' No exemplo acima, inicialmente, confirmamos que o código ASCII da letra a minúscula é 97. Em seguida, passamos o código 97 como argumento da função chr() e, como resposta, tivemos o caractere a.
A seguir, temos um exemplo em que é impresso, na saída padrão, o código ASCII e a respectiva letra dos 122 primeiros caracteres. >>> for c in range(123): str(c) + " - " + chr(c) '0 - \x00' '1 - \x01' '2 - \x02' '3 - \x03' '4 - \x04' '5 - \x05' '6 - \x06' '7 - \x07' '8 - \x08' '9 - \t' '10 - \n' '11 - \x0b' '12 - \x0c' '13 - \r' '14 - \x0e' '15 - \x0f' '16 - \x10' '17 - \x11' '18 - \x12' '19 - \x13' '20 - \x14' '21 - \x15' '22 - \x16' '23 - \x17' '24 - \x18' '25 - \x19' '26 - \x1a' '27 - \x1b' '28 - \x1c' '29 - \x1d' '30 - \x1e' '31 - \x1f' '32 - ' '33 - !' '34 - "' '35 - #' '36 - $' '37 - %' '38 - &' "39 - '" '40 - (' '41 - )' '42 - *' '43 - +' '44 - ,' '45 - -' '46 - .' '47 - /' '48 - 0' '49 - 1' '50 - 2' '51 - 3' '52 - 4' '53 - 5' '54 - 6' '55 - 7' '56 - 8' '57 - 9' '58 - :' '59 - ;' '60 - <' '61 - =' '62 - >' '63 - ?' '64 - @' '65 - A' '66 - B' '67 - C' '68 - D' '69 - E' '70 - F' '71 - G' '72 - H' '73 - I' '74 - J' '75 - K' '76 - L' '77 - M' '78 - N' '79 - O' '80 - P' '81 - Q' '82 - R' '83 - S' '84 - T' '85 - U' '86 - V' '87 - W' '88 - X' '89 - Y' '90 - Z' '91 - [' '92 - \\' '93 - ]' '94 - ^' '95 - _' '96 - `' '97 - a' '98 - b' '99 - c' '100 - d' '101 - e' '102 - f' '103 - g' '104 - h' '105 - i' '106 - j' '107 - k' '108 - l' '109 - m' '110 - n' '111 - o' '112 - p' '113 - q' '114 - r' '115 - s' '116 - t' '117 - u' '118 - v' '119 - w' '120 - x' '121 - y' '122 - z'
Os caracteres de escape é uma definição para adicionar as strings, marcações que não possuem um desenho (representação visual) propriamente dito. Ainda que estes caracteres não tenham uma simbologia que os justifiquem, os mesmos possuem representações na forma em que nossos textos serão exibidos ou impressos. Assim, temos que os Caracteres de Escape desempenham tarefas bastante importantes na formatação e exibição dos textos. Tomemos por exemplo, uma quebra de linha, ou seja, o pressionamento da tecla Enter. A quebra de linha não possui um caractere que a represente visualmente, até porque, a sua representação visual, é o posicionamento do cursor no canto esquerto da linha seguinte. O mesmo acontece com a tabulação, onde não há um desenho que a represente, até porque, o objetivo, é o posicionamento do texto mais a direita do vídeo. É interessante notar, que os Caracteres de Escape, fazem um trabalho semelhante, ao encontrado em linguagem de marcação moderna, como por exemplo, o HTML, que utiliza para a representação de quebra de linha, a Tag <br>.
A notação utilizada e o que define os Caracteres de Escape, é a barra invertida. Todo Caractere de Escape é formado por uma barra invertida e outro caractere que definirá a ação. O primeiro caractere, no caso, a barra, define que estamos utilizando a notação de Caracteres de Escape, enquanto que o segundo caractere, representa a ação a ser realizada.
Alguns Caracteres de Escape, talvez, não funcionem no editor que estejas utilizando, e também, não tente utilizar os Caracteres de Escape dentro de editores de texto puro, como por exemplo, o Bloco de Notas do Windows, até porque, ao invés de obteres um o resultado aqui descrito, terás somente, os digitos em sua representação textual. Os Caracteres de Escape, como por exemplo, o Carriage Return, cuja notação é \r, normalmente, não funciona na plataforma Windows e nem nos Prompts de Comando modernos. O mesmo foi amplamente utilizado, na época das impressoras matriciais, até porque, praticamente todo o controle era feito com uso de Caracteres de Escape, e o funcionamento da manipulação das impressoras, ocorria de forma semelhante a maneira como manipulamos o prompt atutalmente. A diferença, é que ao invés de enviarmos o texto para o o Prompt, enviávamos para um arquivo virtual, que era na verdade, a saída padrão da impressora.
A seguir, temos as principais Escape Sequence da linguagem C. Os dois primeiro itens, que nos caso, são a quebra de linha n e a tabulação t são os mais utilizados. Porém, é importante observar que muitas vezes precisaremos, por exemplo, imprimir a barra invertida, e então, precisaremos "escapar" a mesma, isto é, precisaremos utilizar um caractere especial para inserir num texto que a barra deve ser utilizada visualmente, e não como um Caractere de Escape. n - Nova página (line feed) t - Tabulação (tab) ' - Aspa simples " - Aspa dupla 0 - Caractere null (fim de uma String) ? - Interrogação \ - backslash a - Emissão de som b - backspace f - Nova página (form feed) r - Retorno do cursor (carriage return) v - Tabulação Vertical É comum, por exemplo, precisarmos imprimir um texto e em seguida, posicionar o cursor na linha seguinte. Para isso, basta adicionarmos ao término da string um \n, que no caso, é a notação que representa uma quebra de linha.
Vamos supor que queiramos imprimir um texto onde uma parte estará numa linha e a outra parte, na linha seguinte. No código a seguir, estamos supondo a situação utilizando um código que possui erro. #include <stdio.h> int main() { printf("Fala, galera."); } O código acima, simplesmente quebrou a expressão, o que não é permitido pela Linguagem C. A solução para o código do exemplo anterior, é a utilização de um Caractere de Escape NewLine representado pela notação \n. Assim, corrigindo o exemplo anterior, teríamos um código em que a primeira parte seria impresso numa linha, enquanto a segunda, na linha seguinte. #include <stdio.h> int main() { printf("Fala, \ngalera."); } Observe no código acima, que o Caractere de Escape n está junto a palavra galera, porém o mesmo, será interpretado pela compilador e então, uma quebra de linha será adicionada.
Tags curso, python, caractere, ascii, unicode, escape sequence |