Este blog foi desenvolvido no intuito de auxiliar àqueles que estão iniciando no mundo do Python 3.x
domingo, 12 de abril de 2015
BRINCANDO COM STRINGS - ÍNDICES E INVERSÕES
Vamos agora fazer umas 'falcatruas' com strings.
Escolhi strings por serem o resultado de muitas conversões
Vamos ao princípio básico: o índice.
>>> a='KAKAROTO'
>>> a[0]
'K'
>>> a[1]
'A'
>>> a[2]
'K'
>>> a[3]
'A'
>>> a[4]
'R'
>>> a[5]
'O'
>>> a[6]
'T'
>>> a[7]
'O'
>>> a[8]
Traceback (most recent call last):
File "<pyshell#103>", line 1, in <module>
a[8]
IndexError: string index out of range
Percebemos aqui então que o índice sempre começa com 0 (zero) e termina com o tamanho (lenth) -1. Ou seja, tem 8 caracteres de 0 a 7.
Aqui os escolhemos todos os índices do início [0] até [2]
>>> a[:2]
'KA'
Aqui escolhemos todos os índices maiores que dois até o fim na string
>>> a[2:]
'KAROTO'
Aqui escolhemos os quatro último índices.
>>> a[-4:]
'ROTO'
Aqui escolhemos todos os índices do início até o quarto último.
>>> a[:-4]
'KAKA'
Aqui escolhemos todos os índices, do primeiro [0] até o índice do tamanho total da string [len(a)]. O resultado é mesmo que se não especificássemos os índices, mas é de cunho didático.
>>> a[0:len(a)]
'KAKAROTO'
Aqui escolhemos do terceiro índice o tamanho total da string menos dois (total-2).
>>> a[3:len(a)-2]
'ARO'
Para entender direitinho essa coisa de índice, veja a imagem lá em cima, ok?
Mas e se eu receber a string invertida???
Aí tem esse comando:
>>> b='ATEGEV'
>>> b[::-1]
'VEGETA'
Nossa! Que máximo!!! Ficou fácil inverter, hein?
ÔPA! Péraí caceta! Fui inverter minha string de um resultado em HEX, deu errado!
Não se desespere! Vamos ver:
>>> h = hex(2341522)
>>> h
'0x23ba92'
>>> h[::-1]
'29ab32x0'
Realmente não deu muito certo. O que fazer?
Vamos lá.
Aqui utilizaremos uma biblioteca chamada binascii. Informações aqui e aqui.
>>> h= hex(2341522)
>>> h
'0x23ba92'
>>> h.split('x')[1]
'23ba92'
>>> h=h.split('x')[1]
>>> h
'23ba92'
>>> import binascii
>>> result=binascii.unhexlify(h[0:len(h)].encode())
>>> result
b'#\xba\x92'
>>> result[::-1]
b'\x92\xba#'
>>> result=binascii.unhexlify(h.encode())
>>> result
b'#\xba\x92'
>>> result=hexlify(result[::-1]).decode()
>>> result
'92ba23'
Vixxx Maria!!! Quanta informação!!!
Vamos com calma.
A parte do split, já vimos em um post anterior.
A parte do binascii.hexlify, transformou a string em um hexadecimal 'binário'. Daí, quando invertemos com o [::-1], ao invés de inverter cada um dos caracteres, invertemos os bytes (conjuntos de oito bits).
A parte do binascii.unhexlify transfmormou o hexadecimal 'binário' em uma string novamente.
Tão lindo, não é?
Assinar:
Postar comentários (Atom)
Caro Emerson, boa vida!
ResponderExcluirHá um erro na linha de comando">>> result=hexlify(result[::-1]).decode()"
O correto seria >>> result=binascii.hexlify(result[::-1]).decode()
Obrigado pelas dicas!