Как получить позицию символа в алфавите в Python 3.4?

Мне нужно знать алфавитную позицию n-го символа в тексте, и я прочитал ответ этот вопрос, но он не работает с моим Python 3.4


Моя программа

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 22 12:24:15 2016

@author: Asus
"""

import string

message='bonjour'
string.lowercase.index('message[2]')

Это не работает с ascii_lowercase вместо нижнего регистра.


Сообщение об ошибке

runfile('C:/Users/Asus/Desktop/Perso/WinPython-64bit-3.4.3.4/python-3.4.3.amd64/Scripts/ESSAI.py', wdir='C:/Users/Asus/Desktop/Perso /WinPython-64bit-3.4.3.4/python-3.4.3.amd64/Scripts') Трассировка (последний последний вызов):

Файл "", строка 1, в runfile('C:/Users/Asus/Desktop/Perso/WinPython-64bit-3.4.3.4/python-3.4.3.amd64/Scripts/ESSAI.py', wdir='C: /Users/Asus/Desktop/Perso/WinPython-64bit-3.4.3.4/python-3.4.3.amd64/Scripts')

Файл "C:\Users\Asus\Desktop\Perso\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", строка 685, в runfile execfile(имя файла, пространство имен)

Файл "C:\Users\Asus\Desktop\Perso\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", строка 85, в execfile exec(compile(open(имя файла, 'rb').read(), имя файла, 'exec'), пространство имен)

Файл «C:/Users/Asus/Desktop/Perso/WinPython-64bit-3.4.3.4/python-3.4.3.amd64/Scripts/ESSAI.py», строка 11, в string.lowercase.index('message2')

AttributeError: у объекта "модуль" нет атрибута "нижний регистр"


person ParaH2    schedule 22.04.2016    source источник


Ответы (2)


import string
message='bonjour'

print(string.ascii_lowercase.index(message[2]))

o/p

13

Это сработает для вас. Удалите ' в индексе изменений.

Когда вы даете '', это будет считаться строкой.

person backtrack    schedule 22.04.2016
comment
Ответом print(message.lower().index(message[k])) является k Я хочу получить ранг в алфавите. Таким образом, сообщение [2] равно n, а ранг n в алфавите равен 14, а не 2... тьфу :/ - person ParaH2; 22.04.2016

Вы могли бы стрелять для чего-то вроде

string.ascii_lowercase.index(message[2])

Который возвращает 13. Вам не хватало ascii_.

Это будет работать (пока сообщение в нижнем регистре), но включает линейный поиск по алфавиту, а также импорт модуля.

Вместо этого просто используйте

ord(message[2]) - ord('a')

Кроме того, вы можете использовать

ord(message[2].lower()) - ord('a')

если вы хотите, чтобы это работало, если некоторые буквы в message в верхнем регистре.

Если вы хотите, например. чтобы ранг a был равен 1, а не 0, используйте

1 + ord(message[2].lower()) - ord('a')
person John Coleman    schedule 22.04.2016