Преобразование букв алфавита в числа в Python
Я пытался решить это разными способами, но не смог добраться до пинты. Хочу заработать отл. Если я наберу «привет», то вывод будет цифрами, выстроенными как в алфавите. Пример a = 1
Что у вас есть на данный момент и как это не работает? — Ignacio Vazquez-Abrams
это работает: pastebin.com/SYwgcpg8 но когда я увеличиваю числа, это не работает, я не знаю других способов: S — altin
Просто примечание, вы пропустите одну букву и две цифры в своем списке . P Вы всегда должны стараться избегать создания таких длинных списков вручную. Есть лучший способ сделать это. 🙂 (пример: строка импорта; буквы = строка. lowercase) — Morlock
В этих списках нет запятых. — razpeitia
Что вы на самом деле хотите для вывода, покажите пример? Потому что ‘ab’ == ’12’ == ‘l’ . В вашем коде pastebin maketrans принимает строку букв в сопоставление букв, например ‘abcd’, ‘1234’. Это не поддерживает двухзначные числа. — kevpie
17 ответы
Как насчет чего-то вроде этого:
print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]
РЕДАКТИРОВАТЬ
Поскольку вы просили меня объяснить, я буду . хотя это уже было довольно хорошо объяснено в комментариях [?].
Давайте для начала сделаем это более одной строкой.
input = raw_input('Write Text: ') input = input.lower() output = [] for character in input: number = ord(character) - 96 output.append(number) print output
Это делает то же самое, но более читабельно. Убедитесь, что вы понимаете, что здесь происходит, прежде чем пытаться понять мой первый ответ. Здесь все довольно стандартный, простой Python. Следует отметить ord функция. ord означает порядковый номер, и почти каждый язык высокого уровня будет иметь этот тип функции. Это дает вам соответствие числовому представлению любого символа. Функция, обратная к ord, называется chr.
chr(ord('x')) == 'x' # for any character, not just x.
Если вы проверите сами, порядковый номер a равен 97 (третья ссылка, которую я разместил выше, покажет полный набор символов ASCII). Каждая строчная буква находится в диапазоне 97-122 (26 символов). Итак, если вы просто вычтете 96 от порядкового номера любой строчной буквы, вы получите ее позицию в алфавите, если вы возьмете ‘a’ == 1. Итак, порядковый номер ‘b’ == 98, ‘c’ == 99 и т. Д. вычтите 96, ‘b’ == 2, ‘c’ == 3 и т. д.
Остальная часть исходного решения, которое я опубликовал, — это просто уловка Python, которую вы можете изучить, называемую пониманием списка. Но я бы не сосредоточился на этом так сильно, как сосредоточился бы на том, чтобы научиться решать проблему в любой язык, где ord — твой друг. Надеюсь, это поможет.
Преобразование букв алфавита в числа в Python
Я’пытался решить ее многими способами, но не смог’дойти до финта. Я хочу сделать exc. Если я набираю «hello», то вывод должен быть в виде чисел, выстроенных как в алфавите. Пример a = 1 < в алфавите.
Как насчет чего-то подобного:
print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]
EDIT Поскольку вы попросили меня объяснить, я объясню. хотя это уже было довольно хорошо объяснено в комментариях [?].
Давайте сделаем это в нескольких строках для начала.
input = raw_input('Write Text: ') input = input.lower() output = [] for character in input: number = ord(character) - 96 output.append(number) print output
Это делает то же самое, но более читабельно. Убедитесь, что вы можете понять, что здесь происходит, прежде чем пытаться понять мой первый ответ. Здесь все довольно стандартно, простой Python. Единственное, что следует отметить, это функция ord . ord означает порядковый номер, и практически в каждом языке высокого уровня есть такая функция. Она дает вам отображение числового представления любого символа. Обратная функция ord называется chr.
chr(ord('x')) == 'x' # for any character, not just x.
Если вы проверите сами, то порядковый номер буквы a равен 97 (третья ссылка, которую я разместил выше, показывает полный набор символов ASCII). Каждая строчная буква находится в диапазоне 97-122 (26 символов). Таким образом, если вы просто вычтете 96 из порядкового номера любой строчной буквы, вы получите ее положение в алфавите, принимая ‘a’ == 1. Так, порядковый номер ‘b’ == 98, ‘c’ == 99 и т.д. При вычитании 96, ‘b’ == 2, ‘c’ == 3 и т.д.
Остальная часть первоначального решения, которое я опубликовал, это просто некоторые трюки Python, которые вы можете изучить под названием «понимание списка». Но я бы сосредоточился не столько на этом, сколько на том, чтобы научиться решать эту проблему на любом языке, где ord — ваш друг. Надеюсь, это поможет.
Русские Блоги
Несколько методов python для получения соответствующей позиции буквы в алфавите и сравнение производительности
Несколько методов python для получения соответствующей позиции буквы в алфавите и сравнение производительности
В некоторых случаях нам требуется выяснить порядок букв в алфавите: A = 1, B = 2, C = 3 и т. Д., Например, в этом вопросе.https://projecteuler.net/problem=42 Одним из шагов решения проблемы является преобразование букв в соответствующий порядок в алфавите.
Самый простой способ получить соответствующую позицию буквы в алфавите:
Используйте метод str.index или str.find:
In [137]: "ABC".index('B') Out[137]: 1 In [138]: "ABC".index('B')+1 Out[138]: 2 # Или введите символ впереди, чтобы индекс сразу получил алфавитный номер: In [139]: "_ABC".index("B") Out[139]: 2
Я также подумал, что если я конвертирую алфавит в список или кортеж, а затем индексирую, или производительность улучшится? Или это хороший способ сохранить в словаре ключевое значение, состоящее из букв: цифр?
Два дня назад я самостоятельно реализовал метод:
Ord и chr являются встроенными функциями в python. Ord может преобразовывать символы ASCII в серийные номера, соответствующие таблице ASCII, а chr может преобразовывать серийные номера в строки.
Заглавные буквы начинаются с 65 в таблице, а вычитание 64 — это просто позиция заглавных букв в таблице. Строчные буквы начинаются с 97, а минус 96 — это соответствующая позиция алфавита.
Какой метод может быть лучше по производительности? Я написал код для проверки:
az = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" _az = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ" azlist = list(az) azdict = dict(zip(az,range(1,27))) text = az * 1000000 # Это тестовые данные # str.find и str.index - это одно и то же. Здесь писать незачем. def azindexstr(text): for r in text: az.index(r)+1 pass def _azindexstr(text): for r in text: _az.index(r) pass def azindexlist(text): for r in text: azlist.index(r) pass def azindexdict(text): for r in text: azdict.get(r) pass def azindexdict2(text): for r in text: azdict[r] pass def azord(text): for r in text: ord(r)-64 pass def azand64(text): for r in text: ord(r)%64 pass
Скопируйте и вставьте приведенный выше код в ipython, а затем используйте волшебную функцию% timeit для проверки производительности каждого метода. ipython — это интерактивный интерпретатор Python с множеством полезных функций, таких как функция% timeit, которая в основном используется в тексте. Для установки введите pip install ipython.
Ниже приведены данные результатов моего теста:
In [147]: %timeit azindexstr(text) 1 loop, best of 3: 9.09 s per loop In [148]: %timeit _azindexstr(text) 1 loop, best of 3: 8.1 s per loop In [149]: %timeit azindexlist(text) 1 loop, best of 3: 17.1 s per loop In [150]: %timeit azindexdict(text) 1 loop, best of 3: 4.54 s per loop In [151]: %timeit azindexdict2(text) 1 loop, best of 3: 1.99 s per loop In [152]: %timeit azord(text) 1 loop, best of 3: 2.94 s per loop In [153]: %timeit azand64(text) 1 loop, best of 3: 4.56 s per loop
По результатам я вижу, что list.index самый медленный, что меня удивляет. Кроме того, если в списке много данных, индекс будет очень медленным. Скорость dict [r] выше, чем у dict.get (r), но если это ключ, который не существует, dict [r] сообщит об ошибке, а метод dict.get не сообщит об ошибке , а отказоустойчивость лучше.
Метод ord (r) -64 работает быстро и должен быть наиболее удобным в использовании без создания данных.
15 октября 2016 г. 20:31:19 codegay
Преобразование букв алфавита в число в Python
Я пытался решить его многими способами, но не смог добраться до пинты. Я хочу сделать исключение. Если я набираю «привет», вывод должен быть в номерах, выровненных, как в алфавите. Пример a = 1 < в алфавите.
это работает: pastebin.com/SYwgcpg8, но когда я расту числа, это не работает, я не знаю других способов: S
Просто заметка, вы пропускаете одну букву и две цифры в своем списке . P Вы всегда должны стараться избегать создания длинных списков, подобных этому, вручную. Есть лучший способ сделать это. 🙂 (например: строка импорта; letters = string.lowercase)
Что вы на самом деле хотите для вывода, пожалуйста, покажите пример? Потому что ‘ab’ == ’12’ == ‘l’ . В вашем коде для вставки maketrans принимает строку букв к буквам, сопоставляя их, например, «abcd», «1234». Это не будет поддерживать двухзначные числа.
12 ответов
print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]
ИЗМЕНИТЬ
Поскольку вы попросили меня объяснить, что я. хотя это было хорошо объяснено в комментариях уже [?].
Сделайте это более чем в одной строке, чтобы начать.
input = raw_input('Write Text: ') input = input.lower() output = [] for character in input: number = ord(character) - 96 output.append(number) print output
Это делает то же самое, но более читаемо. Убедитесь, что вы можете понять, что происходит здесь, прежде чем попытаться понять мой первый ответ. Все здесь довольно стандартное, простое Python. Следует отметить функцию ord . ord для ординалов, и почти каждый язык высокого уровня будет иметь доступ к этой функции. Он дает сопоставление с численным представлением любого символа. Обратная функция ord называется chr.
chr(ord('x')) == 'x' # for any character, not just x.
Если вы проверите для себя, порядковый номер a равен 97 (третье звено, указанное выше, отобразит полный набор символов ASCII.) Каждая строчная буква находится в диапазоне 97-122 (26 символов). Итак, если вы просто вычитаете 96 из ординала любой строчной буквы, вы получите ее позицию в алфавите, если вы возьмете ‘a’ == 1. Итак, порядковый номер ‘b’ == 98, ‘c’ == 99 и т.д. Когда вы вычитаете 96, ‘b’ == 2, ‘c’ == 3 и т.д.
Остальное начальное решение, которое я разместил, — это просто какая-то хитрость Python, которую вы можете изучить под понятием list list. Но я бы не стал сосредоточиться на этом, так как я сосредоточусь на том, чтобы научиться решать проблему на любом языке, где ord — ваш друг. Надеюсь, это поможет.