Décale la chaîne de l'alphabet de N caractères en Python

Le [problème ABC146 B] d'AtCoder (https://atcoder.jp/contests/abc146/tasks/abc146_b) m'a donné l'opportunité de me familiariser avec Unicode.

Supposons que "décaler une chaîne de caractères alphabétiques de N caractères" signifie "convertir en un après N caractères dans l'ordre alphabétique", et après "Z", il revient à "A". La même définition s'applique au problème B ci-dessus.

Fonctions intégrées ord () et `chr ()`

Python3 implémente les fonctions intégrées ord () et `chr ()`, qui convertissent les caractères et leur code Unicode pointe l'un vers l'autre. Référence: [document officiel Python3.8 #ord] (https://docs.python.org/ja/3/library/functions.html#ord)

sample


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

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

Comme vous pouvez le voir, il est appelé "point de code Unicode", mais il se démarque par la reconnaissance d'un "monde où divers symboles de caractères sont représentés par une correspondance biunivoque avec des nombres". Le japonais est un monde profond, donc il a l'air bien [livre](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 & mots-clés =% E6% 96% 87% E5% AD% 97% E3% 82% B3% E3% 83% BC% E3% 83% 89 & qid = 1585548181 & sr = 8-1).

Apparemment, pour l'alphabet supérieur, «A» est le code 65, et à partir de là, c'est un numéro de série en décimal. Au fait, entre majuscules et minuscules

sample



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

Et certains symboles ont été pris en sandwich. Hmm.

Précautions de mise en œuvre

Comme vous l'avez peut-être remarqué dans les arguments, «« ʻord () »« »et« «chr ()» «supposent la conversion d'un seul caractère. Lors de la conversion de la chaîne de caractères S, convertissez-la en chaîne de caractères vide '' , caractère par caractère avec l'instruction pour '', puis combinez et répétez.

Et pour prendre en compte lors du retour de'Z'to'A ', ajoutez le reste ``' ', qui s'obtient en divisant l'entier obtenu en ajoutant N au point de code du caractère original par 26, au point de code de'A'. Calcule les points de code de caractères convertis avec.

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

Je vais vérifier.

test_rot



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

Cliquez ici pour soumettre le problème AtCoder B ↓

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()

À propos, la fonction qui restaure la chaîne de caractères convertie S (la décale à N caractères avant) est

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

Ce sera.

test_derot



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

Notes diverses: ROT N?

J'ai appris du problème AtCoder que j'ai écrit au début. Vous avez généralisé ROT13, qui est un simple code qui décale 13 caractères en arrière.

Recommended Posts

Décale la chaîne de l'alphabet de N caractères en Python
Divise la chaîne de caractères par le nombre de caractères spécifié. En Ruby et Python.
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Remplissez la chaîne avec des zéros en python et comptez certains caractères de la chaîne
Vérifiez si les caractères sont similaires en Python
Comment effacer les caractères générés par Python
json.dumping None en python renvoie la chaîne null
Séparer les chaînes de cas de chameau mot par mot en Python
Manipulation de chaîne en python
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
Afficher n chiffres après la virgule décimale en python
Vérifiez si la chaîne est un nombre en python
Extraire l'élément en supprimant la balise contenue dans la chaîne de caractères
Méthodes d'objet chaîne en Python
Trouver des erreurs en Python
[Python 2/3] Analyser la chaîne de format
Manipulation de la date des chaînes en Python
Trier par date en python
Découvrez la largeur apparente d'une chaîne en python
[Python] Ouvrez le fichier csv dans le dossier spécifié par pandas
Visualisez la matrice de corrélation par l'analyse des composants principaux avec Python
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
Comptez bien le nombre de caractères thaïlandais et arabes en Python
Obtenir l'API arXiv en Python
Python dans le navigateur: la recommandation de Brython
3 mois de données de décalage n mois de données de décalage
Enregistrez le fichier binaire en Python
Frappez l'API Sesami en Python
[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
Vérifiez si le hachage de mot de passe généré par PHP correspond en Python
Obtenez le chemin du bureau en Python
python: utilisez les variables définies dans le format de chaîne telles quelles
Obtenez le chemin du script en Python
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Dans la commande python, python pointe vers python3.8
Implémenter le modèle Singleton en Python
Afficher des caractères comme AA en python
Trier les noms de fichiers obtenus par Python glob dans l'ordre numérique
Accédez à l'API Web en Python
cout << "Hello, World! \ N" en python
6 façons d'enchaîner des objets en Python
J'ai écrit la file d'attente en Python
Calculer le mois précédent en Python
Examiner la classe d'un objet avec python
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Accéder à l'API Twitter avec Python
Créer une chaîne aléatoire en Python
Obtenez la formule dans le fichier Excel sous forme de chaîne en Python
La première étape de Python Matplotlib
Jouez en accédant à l'API Riot Games en Python Première moitié
J'ai écrit la pile en Python
Récupérer la chaîne de requête (chaîne de requête) avec Django
Maîtriser le module lowref en Python
[Python] Changer l'alphabet en nombre
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Fonction Eval () qui calcule une chaîne de caractères comme expression en python