Journal : ROT13v2 en Python

Posté par alexissoft (Jabber id, page perso, ) le 11 décembre 2004
0
Voilà alors j'ai eu l'idée, rot13 marchant que sur les caractères, il fallait donc encrypter les caractères, alors très simple puisque 13+13=26 donc A + 26 = N + 26 (voilà comment marche rot13), il suffit de faire 1 + 5 = 6 + 5 (en gros hein, parce qu'ensuite on fout un modulo).

Du coup ROT13v2 donne : EBG68i7

Alors voilà l'implémentation en python, version masterisée et remixée de http://www.miranda.org/~jkominek/rot13/python/rot13.py(...)

-8<--------------------------------------------------------------------------------------
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

def rot13(chaine):
result = ""
for x in range(len(chaine)):
byte = ord(chaine[x])
cap = (byte & 32)
byte = (byte & (~cap))
if (chaine[x] == ' '):
result = result + ' '
elif (byte >= ord('A')) and (byte <= ord('Z')):
byte = ((byte - ord('A') + 13) % 26 + ord('A'))
byte = (byte | cap)
result = result + chr(byte)
elif (byte >= 16) and (byte <= 25):
byte = ((byte - 16 + 5) % 10 + 16)
byte = (byte | cap)
result = result + chr(byte)
else:
result = result + chr(byte | cap)

return result
print "ROT13 DECODER/ENCODER"
print
text = raw_input("Type your text : ")
print "The result : " + rot13(text)
-8<--------------------------------------------------------------------------------------

En espérant que les geeks aimeront :)

> Lire le journal (5 commentaires, moyenne: 3,6).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

oupppsss

Posté par alexissoft (Jabber id, page perso, ) le 11/12/2004 à 17:20. (lien). Évalué à 3.

Voilà alors j'ai eu l'idée, rot13 marchant que sur les caractères, il fallait donc encrypter les caractères, alors très simple puisque 13+13=26 donc A + 26 = N + 26 (voilà comment marche rot13), il suffit de faire 1 + 5 = 6 + 5 (en gros hein, parce qu'ensuite on fout un modulo).

A remplacer par chiffres

A little bit more pythonic version

Posté par David Douard () le 11/12/2004 à 18:04. (lien). Évalué à 9.

Il me semble...

def rot13_v2_1(c):
    C = c.upper()
    d = ord(c)-ord(C)
    if 'A' <= C <= 'Z':
        return chr(((ord(C) - ord('A') + 13) % 26 + ord('A')) + d)
    elif '0'<=C <='9':
        return chr(((ord(C) - ord('0') + 5) % 10 + ord('0')))
    else:
        return c
def rot13_v2(chaine):
    return "".join( map(rot13_v2_1, chaine) )

if __name__=="__main__":
    print "ROT13 DECODER/ENCODER"
    print
    text = raw_input("Type your text : ")
    print "The result : " + rot13_v2(text)

  • [^]Re: A little bit more pythonic version

    Posté par alexissoft (Jabber id, page perso, ) le 11/12/2004 à 20:20. (lien). Évalué à 0.

    C'est vrai, seulement j'ai codé ça à l'arrache, juste pour montrer les capacités de python à quelqu'un a qui j'apprend python.

    Merci, ça permet d'alléger et d'accélerer le code :)

Allez je vous écrase tous ;-)

Posté par Boa Treize (page perso, ) le 12/12/2004 à 18:41. (lien). Évalué à 4.

>>> import codecs
>>> rot13 = codecs.getencoder('rot13')

>>> rot13('Deux lignes de code seulement ! ;-)')[0]
'Qrhk yvtarf qr pbqr frhyrzrag ! ;-)'

  • [^]Re: Allez je vous écrase tous ;-)

    Posté par syntaxerror () le 13/12/2004 à 16:02. (lien). Évalué à 2.

    oui, mais non. Le monsieur a dit rot13v2, qui pourrait être quelque chose comme ça:


    >>> def rot13v2(chaine) :
    ... import codecs
    ... import string
    ... rot13=codecs.getencoder('rot13')
    ... return rot13(chaine)[0].translate(string.maketrans("","").replace("0123456789","5678901234"))
    ...
    >>> rot13v2("ROT13v2")
    'EBG68i7'


    Je suppose que c'est mieux de définir son propre codec, mais franchement j'ai la flemme ...

Revenir en haut de page