web-dev-qa-db-ja.com

アルファベットの文字位置を取得

これを行う組み込み関数があることは90%確信しています。

アルファベットの文字の位置を見つける必要があります。したがって、文字「b」は位置1(0からカウント)などです。誰が関数が呼び出されるかを知っていますか?

前もって感謝します!

編集:私がやろうとしているのは、アルファベットですべての文字Xの「ステップ」を送り返すことです。したがって、「hi」の文字列がある場合、1ステップ送り返すと「gh」になります。より良い方法があるかもしれませんが、ヒントはありますか?

31
qwerty

indexと呼ばれます。例えば.

>>> import string
>>> string.lowercase.index('b')
1
>>> 

注:Python 3、string.lowercasestring.ascii_lowercaseに名前が変更されました。

57
Senthil Kumaran

インポートなし

def char_position(letter):
    return ord(letter) - 97

def pos_to_char(pos):
    return chr(pos + 97)
20
Jakob Bowyer

Ord()を使用して文字のASCII位置を取得し、chr()を使用してASCII位置を文字に変換できます。

編集:アルファベットをラップするように更新され、a-1はzにマッピングされ、z + 1はaにマッピングされます

例えば:

my_string  = "zebra"
difference = -1
new_string = ''.join((chr(97+(ord(letter)-97+difference) % 26) for letter in my_string))

これにより、すべての文字がアルファベット(「ydaqz」)で1スペース後ろに移動した文字列が作成されます。小文字の単語に対してのみ機能します。

2
# define an alphabet
alfa = "abcdefghijklmnopqrstuvwxyz"

# define reverse lookup dict
rdict = dict([ (x[1],x[0]) for x in enumerate(alfa) ])

print alfa[1] # should print b

print rdict["b"] # should print 1

rdictは、一度に1文字ずつアルファベットをステップスルーして作成される辞書です。列挙関数は、リストインデックスと文字を含むTupleを返します。次のコードで新しいTupleを作成することにより、順序を逆にします:( x[1], x[0])そして、タプルのリストを辞書に変えます。辞書はハッシュテーブル(キー、値)データ構造であるため、アルファベット文字のインデックスを検索できるようになりました。

しかし、それはあなたがあなたの問題を解決したいものではありません、そして、これがクラス割り当てであるならば、あなたがそれを提出するならば、おそらく盗作のために0を得るでしょう。文字列をエンコードするには、最初にalfa2 [n]がalfa [n]のエンコードされた形式になるように編成されたSECONDアルファベットを作成します。この例では、2番目のアルファベットが2文字だけシフトされますが、ランダムに文字をシャッフルしたり、他のパターンを使用して並べたりすることもできます。これはすべて、ギリシャ語、キリル文字などの他のアルファベットで引き続き機能します。

0
Michael Dillon

これは誰かに役立つかもしれないキャッチオールメソッドです...

def alphabet(arg, return_lower=True):

    """
        Indexing the english alphabet consisting of 26 letters. 
        Note: zero indexed

            example usage:

                alphabet('a')
                >> 0

                alphabet(25, return_lower=False)
                >> 'Z'

        :param arg: Either type int or type chr specifying the \
                    index of desired letter or ther letter at \
                    the desired index respectivley.
        :param return_lower: If index is passes, returns letter \
                         with corresponding case. Default is \
                         set to True (lower case returned). 
        :returns: integer representing index of passed character \
                    or character at passed index.
    """

    arg = str(arg)
    assert arg.isdigit() or arg.isalpha()

    if arg.isdigit():
        if return_lower:
            return chr(int(arg) + 97).lower()  
        return chr(int(arg) + 97).upper()

    return ord(arg.lower()) - 97
0
LJ Brown

私はPythonを学び始めたばかりなので、これが他の方法と比較してどれほど効率的かはわかりませんが、うまくいきます。また、テキストが大文字か小文字か、句読点などがあるかどうかは関係ありません。

すべての文字を変更する場合:

from string import maketrans

textin = "abcdefghijklmnopqrstuvwxyz"
textout = "cdefghijklmnopqrstuvwxyzab"
texttrans = maketrans(textin, textout)

text = "qcc, gr umpiq"

print text.translate(texttrans)

また、いくつかの文字を変更するために動作します:

from string import maketrans

textin = "81972"
textout = "Seios"
texttrans = maketrans(textin, textout)

text = "811, 9t w7rk2"

print text.translate(texttrans)
0
JamesCraig