2009-12-17 15 views

Antwort

20

Das durch die chr und ord Funktionen erfolgt. Z.B; chr(ord(ch)+2) macht was du willst. Diese sind vollständig beschrieben here.

1

ord() Versuchen Sie, sollte es tun :)

3

http://docs.python.org/library/functions.html

ord (c)

eine Zeichenkette der Länge eins gegeben, Rückkehr für eine ganze Zahl, welche den Unicode-Codepunkt des Zeichens, wenn das Argument eines Unicode-Objekt ist, oder der Wert des Bytes, wenn Das Argument ist eine 8-Bit-Zeichenfolge. Zum Beispiel gibt ord ('a') die Ganzzahl 97 zurück, ord (u '\ u2020') gibt 8224 zurück. Dies ist die Umkehrung von chr() für 8-Bit-Strings und von unichr() für Unicode-Objekte. Wenn ein Unicode-Argument angegeben wird und Python mit UCS2-Unicode erstellt wurde, muss der Codepunkt des Zeichens im Bereich [0..65535] liegen. Andernfalls ist die Zeichenfolgenlänge zwei und ein TypeError wird ausgelöst.

13

Das klingt viel wie Hausaufgaben, also gebe ich Ihnen ein paar Stücke und lassen Sie den Rest ausfüllen.

Um auf ein einzelnes Zeichen der Zeichenfolge s zuzugreifen, wird s [x] angezeigt, wobei x ein ganzzahliger Index ist. Die Indizes beginnen bei 0.

Um den ganzzahligen Wert eines Zeichens zu erhalten, ist ord (c) wobei c das Zeichen ist. Um eine ganze Zahl zurück in ein Zeichen zu werfen, ist dies chr (x). Achten Sie auf Buchstaben nahe dem Ende des Alphabets!

Edit: Wenn Sie Schwierigkeiten haben, was zu tun für Y und Z, lassen Sie einen Kommentar und ich gebe einen Hinweis.

+1

+1 für gute Hausaufgabenleitung, ohne die Lösung zu verraten – Kena

+0

Ja, ich hatte Angst, dass jemand denken würde, dass es Hausaufgaben waren. Ich habe bereits ein B.S. in Informatik, und ich bin ein ASP.NET-Programmierer. Aber ich habe Django aufgenommen und wollte meine Python-Fähigkeiten auf dieser Seite verbessern: http://www.pythonchallenge.com/pc/def/map.html. Wie auch immer, ich denke, dass "ord" die Funktion ist, nach der ich gesucht habe. Ich werde es nach Feierabend versuchen. Danke für die Beiträge aller! – Luke

+1

Ah, ok. Meine zwei Cent beim Machen von Sachen klingen nicht wie Hausaufgaben, wenn Sie so geneigt sind: Stellen Sie nur den Teil des Problems, den Sie beantworten möchten (wie "Wie konvertiere ich ein Zeichen in ein int in Python") statt die volle Frage, die ich eigentlich erinnere mich als eine der ersten Fragen in meiner Kryptographie-Klasse in der Schule) und auch, ich denke nur sagen "Das klingt vielleicht wie Hausaufgaben, aber es ist nicht" wird uns alle die Herablassung aus unseren Antworten zu entfernen :) Das sieht so aus eine coole Seite, aber ich muss es überprüfen. – danben

3

Normalerweise nur ord und fügen Sie 2 und chr zurück, (Y, Z werden Sie unerwartetes Ergebnis geben ("[", "\")

>>> chr(ord("A")+2) 
'C' 

Wenn Sie Y, Z bis A ändern möchten , B, könnten Sie tun, wie diese

>>> chr((ord("A")-0x41+2)%26+0x41) 
'C' 
>>> chr((ord("Y")-0x41+2)%26+0x41) 
'A' 
>>> chr((ord("Z")-0x41+2)%26+0x41) 
'B' 

Hier A bis Z

>>> [chr((i-0x41+2)%26+0x41) for i in range(0x41,0x41+26)] 
['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B'] 
0

Für eine ganze Reihe dieser wäre:.

>>> s = "Anne" 
>>> ''.join([chr(ord(i)+2) for i in s]) 
'Cppg' 

Es ist diffucult für 'Y', 'Z' ...

>>> s = "Zappa" 
>>> ''.join([chr(ord(i)+2) for i in s]) 
'\\crrc' 

Funktionen: chr, ord

+0

Das würde für Zs brechen, nicht? – danben

+0

'' .join ([chr (ord (i) +2) für i in s]) würde das gleiche tun – Nikwin

+0

ja und seine kürzere .. – miku

1

"ord" ist nur ein Teil der Lösung. Das dort erwähnte Puzzle rotiert, sodass "X" +3 zu "A" rotiert. Die berühmteste von diesen ist rot-13, die 13 Zeichen dreht. Durch zweimaliges Anwenden von rot-13 (26 Zeichen rotierend) wird der Text zurück zu sich selbst gebracht.

Der einfachste Weg, dies zu bewältigen, ist mit einer Übersetzungstabelle.

import string 

def rotate(letters, n): 
    return letters[n:] + letters[:n] 

from_letters = string.ascii_lowercase + string.ascii_uppercase 
to_letters = rotate(string.ascii_lowercase, 2) + rotate(string.ascii_uppercase, 2) 

translation_table = string.maketrans(from_letters, to_letters) 

message = "g fmnc wms bgblr" 
print message.translate(translation_table) 

Nicht ein einziges ord() oder chr() hier drin.Das ist, weil ich eine andere Frage beantworte, als gefragt wurde. ;)

+0

@dalke weiß das schon, aber für diejenigen, die das nicht tun, ist ein noch einfacherer Weg, das obige für rot-13 speziell zu tun, message.decode ('rot13'). (Das obige ist rot-n.) –

Verwandte Themen