2015/06/26

【Python】アルファベットを順番に得たい

"abcdef...."っていうのが欲しいときに、
実際、

abcStr = "abcdefghijklmnopqrstuvwxyz"

ってガリガリ打ち込んで使うっていうのもあるにはありますが、
ちょっと悪手というか、避けたいというか、
なんか、そうじゃないよなあ、みたいな感じがあります。

二つの方法があると思います。


import string
alphabetStr = string.ascii_lowercase

# 大文字
string.ascii_uppercase

# 数字
string.digits


逆順はこう

string.ascii_lowercase[::-1]

※ [::i] という書き方で「スライスステップ」になります。ここでは「マイナス方向に一個ずつ(ステップしない)」ので、結果的に文字列を一文字も抜かずに逆順、という操作になります
http://docs.python.jp/2/library/stdtypes.html#str-unicode-list-tuple-bytearray-buffer-xrange の表の7行目「s[i:j:k]」の i と j を抜いた書き方。

リストでほしいとき

list(string.ascii_lowercase)
# Result: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] #


またもう一つ。
unichr っていう組み込み関数を使うと、unicode番地から文字を得ることが出来ます。

print unichr(97)    # -> a

与える数値に +1 していくと次の文字が得られるので、
これを活用すると連続した文字が得られます。

# アルファベット 小文字
def printAlphabetLower():
    for i in range(0,26):
        print unichr(97+i)

# アルファベット 大文字
def printAlphabetUpper():
    for i in range(0,26):
        print unichr(65+i)

# 数字
def printDigits():
    for i in range(0,10):
        print unichr(48+i)

'a' が97、'A' が26、'0' が48です。
ちなみに、文字の番地を調べたい時はこちら

ord('a')
# Result: 97 #

( 'a' )のところがフグみたいですよね。いやマジで。


unichr()で得られるのはあくまで文字です。
数字であってももらったままでは文字列なので注意。
例えば足し算しても、普通に文字列結合されます。

unichr(49) + unichr(49)    # -> '1' + '1' 。2 じゃない!
# Result: u'11' #


最後に、
これをC4Dで使ってみましたというごくアカデミックな実例。

import c4d
from c4d import gui

def getAlphabetUpper():
    alphabetStr = ''
    for i in range(0,26):
        alphabetStr += unichr(65+i)
    return alphabetStr

def main():
    c4d.CallCommand(5178) # テキストオブジェクト作成
    txtObj = doc.GetActiveObject()
    
    txtObj[c4d.PRIM_TEXT_TEXT] = str(getAlphabetUpper())

if __name__=='__main__':
    main()


一応内容について。
docオブジェクトのGetActiveObjectメソッドで、選択されているオブジェクトを取得。ここでは、直前に作成したテキストオブジェクトが得られます。
そいつの [c4d.PRIM_TEXT_TEXT] が属性エディタで言うところの“テキスト”欄につながってるので、そこに文字列を代入してあげると、こんなかんじ(▼)

……属性へのアクセスが [c4d.〜〜] なのは伝統なんですかね、もうちょいpythonicにならないものでしょうかMAXONさん……(^^^

また、
Cinema4DでのPythonについては
こちらの本でもちょっと触れていますので
http://circleqtvol3.tumblr.com
気になる方はぜひどうぞー


■ 参考

7.1. string — 一般的な文字列操作 @ Python » Documentation » Python 標準ライブラリ
http://docs.python.jp/2/library/string.html

unichr関数
http://docs.python.jp/2/library/functions.html#unichr

ord関数
http://docs.python.jp/2/library/functions.html#ord

0 件のコメント:

コメントを投稿