62

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

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

前もって感謝します!

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

4

6 に答える 6

100

といいindexます。例えば

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

注: Python 3 では、string.lowercaseは に名前が変更されましたstring.ascii_lowercase

于 2011-05-08T11:31:06.977 に答える
45

インポートなし

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

def pos_to_char(pos):
    return chr(pos + 97)
于 2011-05-08T12:29:05.283 に答える
3

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

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

于 2011-05-08T11:53:36.957 に答える
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 文字ずつアルファベットをステップスルーして作成される辞書です。enumerate 関数は、リスト インデックスと文字を含むタプルを返します。このコードで新しいタプルを作成して順序を逆にし、( x[1], x[0])タプルのリストを辞書に変換します。辞書はハッシュ テーブル (キー、値) のデータ構造であるため、任意のアルファベット文字のインデックスを検索できるようになりました。

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

于 2011-05-09T01:15:46.420 に答える