The challenge
Given a string, replace every letter with its position in the alphabet.
If anything in the text isn’t a letter, ignore it and don’t return it.
"a" = 1
, "b" = 2
, etc.
Example
alphabet_position("The sunset sets at twelve o'clock.")
Should return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11"
(as a string)
The solution in Python code
Option 1:
def alphabet_position(text):
return ' '.join(str(ord(c) - 96) for c in text.lower() if c.isalpha())
Option 2:
def alphabet_position(text):
al = 'abcdefghijklmnopqrstuvwxyz'
return " ".join(filter(lambda a: a != '0', [str(al.find(c) + 1) for c in text.lower()]))
Option 3:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def alphabet_position(text):
if type(text) == str:
text = text.lower()
result = ''
for letter in text:
if letter.isalpha() == True:
result = result + ' ' + str(alphabet.index(letter) + 1)
return result.lstrip(' ')
Test cases to validate our solution
from random import randint
test.assert_equals(alphabet_position("The sunset sets at twelve o' clock."), "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11")
test.assert_equals(alphabet_position("The narwhal bacons at midnight."), "20 8 5 14 1 18 23 8 1 12 2 1 3 15 14 19 1 20 13 9 4 14 9 7 8 20")
number_test = ""
for item in range(10):
number_test += str(randint(1, 9))
test.assert_equals(alphabet_position(number_test), "")