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

Таким образом, ввод "а" должен вернуться

0

Ввод "А" также должен вернуться

0

Ввод "О" должен вернуться

14

И так далее.

Я заметил этот вопрос, но в верхнем ответе используется импорт, а во втором ответе нет не имеет никакого смысла для меня / не работает. Я попытался применить второй ответ так:

letter = input("enter a letter")

def alphabet_position(letter):

    return ord(letter) - 97

print((alphabet_position)(letter))

Но я получил ошибку типа:

TypeError: ord() expected a character, but string of length 2 found

Так же, как задающий вопрос в вопросе, который я связал, я также пытаюсь отправить количество символов «x» назад в алфавите, но для этого мне нужно сначала создать эту вспомогательную функцию.

Я думаю, что должен быть способ хранить буквы в двух отдельных списках, один строчный и один прописной, а затем посмотреть, соответствует ли введенная пользователем строка одному из элементов в этом списке? Затем, как только мы найдем совпадение, мы вернем его (основанную на 0) числовую позицию?

letter = input("enter a letter")

def alphabet_position(letter):

    position = 0
    #letter_position = index value that matches input
    lower_case_list ['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'] 

    upper_case_list ['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']              

#if letter is in lower_case_list, return it's 0-based numerical position.
#else, if letter is in upper_case_list, return it's 0-based numerical position.
#else, print("Enter a valid letter")

return letter_position

Пожалуйста, помогите, если у вас есть какие-либо предложения. Спасибо.

1
HappyHands31 7 Дек 2016 в 03:56

3 ответа

Лучший ответ

Я предлагаю использовать словарь. Это может быть большой объем кода, чтобы сделать что-то относительно простое, но я считаю, что легче понять это таким образом (и если вы новичок в Python, это поможет вам научиться). Если вы пользуетесь словарями Google Python, вы можете узнать о них больше, но вот основная концепция:

Код для Python версии 3.X:

def alphabet_position(letter):
    alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1}
    pos = alphabet_pos[letter]
    return pos
letter = input('Enter a letter: ')
print(alphabet_position(letter))

Код для Python версии 2.7:

def alphabet_position(letter):
    alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1}
    pos = alphabet_pos[letter]
    return pos
letter = raw_input('Enter a letter: ')
print alphabet_position(letter)

Если вы запустите это, он напечатает 1, потому что он ищет в словаре alpahbet_pos и находит значение, соответствующее записи, озаглавленной «B». Обратите внимание, что у вас может быть несколько записей с одним и тем же значением, поэтому вы можете использовать прописные и строчные буквы в одном словаре. Я только сделал буквы A и B ради времени, чтобы вы могли заполнить остальные самостоятельно;)

Мне когда-то приходилось вводить каждый элемент периодической таблицы и соответствующую им атомную массу, и это занимало вечность (ощущалось намного дольше, чем было на самом деле).

1
wes1099 7 Дек 2016 в 03:11

Другой способ сделать это - использовать словарное понимание для создания dict пар букв и позиций, например так:

from string import lowercase as l

alphabet_lookup = {letter:pos for letter,pos in zip(l, range(len(l)))}

А потом

f = lambda letter: alphabet_lookup[letter.lower()]

Это желаемая функция.

2
user4601931 7 Дек 2016 в 01:23

Вероятно, проще просто преобразовать прописные или строчные буквы в специально строчные с помощью метода .lower () и использовать встроенный список букв (string.ascii_lowercase). Вы можете найти индекс элемента списка с помощью метода .index ().

import string

letter = input('enter a letter: ')

def alphabet_position(letter):
    letter = letter.lower()
    return list(string.ascii_lowercase).index(letter)


print(alphabet_position(letter))

Когда вы вызываете alphabet_position, он ожидает аргумент, поэтому вам нужно использовать формат func_name (arg).

4
Khyber Thrall 7 Дек 2016 в 01:08