61935


アルファベットが'a' = '1', 'b' = '2' ...z = '26'に出力されるような関数を作りました。  
\- 記号は無視  
\- 大文字は小文字に変換

[code]

    def alphabet_position(text):
        a_z = list('abcdefghijklmnopqrstuvwxyz')
        y = list(text.lower())
        answer = []
        for x in y:
            for p,num in zip(a_z, range(26)):
                if not x.isalpha()
                    break
                elif p == x:
                    answer.append(str((num + 1)))
                    break
        return " ".join(answer)
    
    print(alphabet_position('who are you man!'))
    # 23 8 15 1 18 5 25 15 21 13 1 14
    
[/code]

お尋ねしたいのが、  
・a-zが冗長でタイプミスも起こるのでもっと簡潔に表現できないか  
ということです。  
よろしくお願いします。


CC BY-SA 4.0
2020-01-02T05:49:15.657
61933
2020-01-02T07:43:33.413
36091
question
python3
a~zを簡潔に入力する方法


組み込み関数[`ord`](https://docs.python.org/ja/3/library/functions.html#ord)が使えそうです。

[code]

    def alphabet_position(text):
      answer = []
      ofs = ord('a') - 1
      for c in text.lower():
        if c.isalpha():
          answer.append(str(ord(c)-ofs))
      return ' '.join(answer)
    
    print(alphabet_position('who are you man!'))
    
[/code]


CC BY-SA 4.0
2020-01-02T06:00:36.287
61934
2020-01-02T06:00:36.287
37289
61933
answer


string モジュールに string.lowercase が定義されていますので([string: Common string
operations](https://docs.python.org/3.7/library/string.html))、それと `index()`
を使うと以下の様にも書くことができます。

[code]

    from string import ascii_lowercase
    
    def alphabet_position(text):
      return [
        ascii_lowercase.index(c) + 1 for c in text.lower()
        if c in ascii_lowercase
      ]
    
    if __name__ == '__main__':
      print(alphabet_position('Who are you man!'))
    
    =>    
    [23, 8, 15, 1, 18, 5, 25, 15, 21, 13, 1, 14]
    
[/code]


CC BY-SA 4.0
2020-01-02T07:43:33.413
61935
2020-01-02T07:43:33.413
61933
answer