Verschieben Sie die Alphabetzeichenfolge in Python um N Zeichen

Das [ABC146 B-Problem] von AtCoder (https://atcoder.jp/contests/abc146/tasks/abc146_b) gab mir die Möglichkeit, mich mit Unicode vertraut zu machen.

Angenommen, "Verschieben einer alphabetischen Zeichenfolge um N Zeichen" bedeutet "Konvertieren in eine nach N Zeichen in alphabetischer Reihenfolge" und nach "Z" kehrt sie zu "A" zurück. Die gleiche Definition gilt für das obige Problem B.

Eingebaute Funktionen `ord ()` und `chr ()`

Python3 implementiert die integrierten Funktionen `ord ()` und chr () `, die Zeichen und ihre Unicode-Codepunkte wieder ineinander konvertieren. Referenz: [Python3.8 offizielles Dokument #ord] (https://docs.python.org/ja/3/library/functions.html#ord)

sample


>>> ord('A')
65
>>> ord('D')
68

>>> chr(65)
'A'
>>> chr(70)
'F'

Wie Sie sehen können, heißt es "Unicode-Codepunkt", aber es bricht mit der Erkennung von "einer Welt durch, in der verschiedene Zeichensymbole durch eine Eins-zu-Eins-Entsprechung mit Zahlen dargestellt werden". Japanisch ist eine Welt mit vielen Ausdrücken, also [Bücher, die gut aussehen](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6 % 96% B0% E7% 89% 88-% E3% 83% 97% E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9E% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E6% 96% 87% E5% AD% 97% E3% 82% B3% E3% 83% BC% E3% 83% 89% E6% 8A% 80% E8% A1% 93% E5% 85% A5% E9% 96% 80-WEB-PRESS-plus% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA / dp / 4297102919 / ref = sr_1_1? __mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & Schlüsselwörter =% E6% 96% 87% E5% AD% 97% E3% 82% B3% E3% 83% BC% E3% 83% 89 & qid = 1585548181 & sr = 8-1).

Anscheinend ist 'A' für das obere Alphabet der Code 65 und von dort eine Seriennummer in Dezimalzahl. Übrigens zwischen Groß- und Kleinschreibung

sample



>>> ord('Z')
90
>>> chr(91)
'['
>>> chr(92)
'\\'
>>> chr(93)
']'
>>> chr(94)
'^'
>>> chr(95)
'_'
>>> chr(96)
'`'
>>> chr(97)
'a'

Und einige Symbole wurden eingeklemmt. Hmm.

Vorsichtsmaßnahmen für die Umsetzung

Wie Sie vielleicht in den Argumenten bemerkt haben, setzen sowohl `ord ()` als auch chr () die Konvertierung einzelner Zeichen voraus. Wenn Sie die Zeichenfolge S konvertieren, konvertieren Sie sie zeichenweise in die leere Zeichenfolge `` ''`` mit der Anweisung ``for```, kombinieren Sie sie und wiederholen Sie sie.

Und um zu berücksichtigen, wenn Sie von 'Z'to'A' zurückkehren, fügen Sie den Rest '' hinzu, der durch Teilen der Ganzzahl erhalten wird, die durch Hinzufügen von N zum ursprünglichen Zeichencodepunkt durch 26 zum Codepunkt von 'A' erhalten wird. Berechnen Sie den konvertierten Zeichencodepunkt mit.

rot_n.py



def rot_n(s, n):
    answer = ''
    for letter in s:
        answer += chr(ord('A') + (ord(letter)-ord('A')+n) % 26)

    return answer

Ich werde es prüfen.

test_rot



>>> rot_n('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 13)
'NOPQRSTUVWXYZABCDEFGHIJKLM'

Klicken Sie hier, um das AtCoder B-Problem einzureichen ↓

b.py



def rot_n():
    n = int(input())
    s = input()

    answer = ''
    for letter in s:
        answer += chr(ord('A') + (ord(letter)-ord('A')+n) % 26)

    print(answer)


if __name__ == '__main__':
    rot_n()

Die Funktion, die die konvertierte Zeichenfolge S wiederherstellt (vor N Zeichen verschiebt), ist übrigens

derot_n.py



def derot_n(s, n):
    answer = ''
    for letter in s:
        answer += chr(ord('Z') - (ord('Z')-ord(letter)+n) % 26)
        
    return answer

Es wird sein.

test_derot



>>> derot_n('NOPQRSTUVWXYZABCDEFGHIJKLM', 13)
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Sonstige Hinweise: ROT N?

Ich habe aus dem AtCoder-Problem gelernt, das ich am Anfang geschrieben habe. Sie haben ROT13 verallgemeinert. Dies ist ein einfacher Code, der 13 Zeichen zurückschiebt.

Recommended Posts

Verschieben Sie die Alphabetzeichenfolge in Python um N Zeichen
Teilt die Zeichenfolge durch die angegebene Anzahl von Zeichen. In Ruby und Python.
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Füllen Sie die Zeichenfolge mit Nullen in Python und zählen Sie bestimmte Zeichen aus der Zeichenfolge
Überprüfen Sie, ob die Zeichen in Python ähnlich sind
So löschen Sie die von Python ausgegebenen Zeichen
json.dumping Keine in Python gibt die Zeichenfolge null zurück
Teilen Sie Kamelfallzeichenfolgen in Python Wort für Wort
String-Manipulation in Python
Holen Sie sich das letzte Element des Arrays, indem Sie Zeichenfolgen in Python und PHP aufteilen
Zeigen Sie in Python n Nachkommastellen an
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Extrahieren Sie das Element, indem Sie das in der Zeichenfolge enthaltene Tag löschen
String-Objektmethoden in Python
Finde Fehler in Python
[Python 2/3] Analysiert die Formatzeichenfolge
Datumsmanipulation von Strings in Python
Sortieren nach Datum in Python
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
[Python] Öffnen Sie die CSV-Datei in dem von Pandas angegebenen Ordner
Visualisieren Sie die Korrelationsmatrix durch Hauptkomponentenanalyse mit Python
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Abrufen der arXiv-API in Python
Python im Browser: Brythons Empfehlung
3 Monate Schichtdaten n Monate Schichtdaten
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
[In der Abbildung verstanden] Verwaltung der virtuellen Python-Umgebung durch Pipenv
Überprüfen Sie, ob der von PHP generierte Passwort-Hash in Python übereinstimmt
Holen Sie sich den Desktop-Pfad in Python
Python: Verwenden Sie die im Zeichenfolgenformat definierten Variablen unverändert
Holen Sie sich den Skriptpfad in Python
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Im Python-Befehl zeigt Python auf Python3.8
Implementieren Sie das Singleton-Muster in Python
Zeigen Sie Zeichen wie AA in Python an
Sortieren Sie die von Python glob erhaltenen Dateinamen in numerischer Reihenfolge
Klicken Sie auf die Web-API in Python
cout << "Hallo Welt! \ N" in Python
6 Möglichkeiten zum Stringen von Objekten in Python
Ich habe die Warteschlange in Python geschrieben
Berechnen Sie den Vormonat in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
Greifen Sie mit Python auf die Twitter-API zu
Erstellen Sie eine zufällige Zeichenfolge in Python
Rufen Sie die Formel in der Excel-Datei als Zeichenfolge in Python ab
Der erste Schritt von Python Matplotlib
Spielen Sie, indem Sie die Riot Games-API in Python First Half drücken
Ich habe den Stack in Python geschrieben
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
Beherrsche das schwache Ref-Modul in Python
[Python] Ändere das Alphabet in eine Zahl
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Die eval () -Funktion, die eine Zeichenfolge als Ausdruck in Python berechnet