Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alphabet position in python

Tags:

python

Newbie here...Trying to write a function that takes a string and replaces all the characters with their respective dictionary values. Here is what I have:

def alphabet_position(text):

    dict = {'a':'1','b':'2','c':'3','d':'4','e':'5','f':'6','g':'7','h':'8':'i':'9','j':'10','k':'11','l':'12','m':'13','n':'14','o':'15','p':'16','q':'17','r':'18','s':'19','t':'20','u':'21','v':'22','w':'23','x':'24','y':'25','z':'26'}
    text = text.lower()
    for i in text:
        if i in dict:
            new_text = text.replace(i, dict[i])
    print (new_text)

But when I run:

alphabet_position("The sunset sets at twelve o' clock.")

I get:

the sunset sets at twelve o' cloc11.

meaning it only changes the last character in the string. Any ideas? Any input is greatly appreciated.

like image 514
Robert Avatar asked Nov 18 '25 11:11

Robert


2 Answers

Following your logic you need to create a new_text string and then iteratively replace its letters. With your code, you are only replacing one letter at a time, then start from scratch with your original string:

def alphabet_position(text):

    dict = {'a':'1','b':'2','c':'3','d':'4','e':'5','f':'6','g':'7','h':'8','i':'9','j':'10','k':'11','l':'12','m':'13','n':'14','o':'15','p':'16','q':'17','r':'18','s':'19','t':'20','u':'21','v':'22','w':'23','x':'24','y':'25','z':'26'}
    new_text = text.lower()
    for i in new_text:
        if i in dict:
            new_text = new_text.replace(i, dict[i])
    print (new_text)

And as suggested by Kevin, you can optimize a bit using set. (adding his comment here since he deleted it: for i in set(new_text):) Note that this might be beneficial only for large inputs though...

like image 85
Julien Avatar answered Nov 21 '25 00:11

Julien


As your question is generally asking about "Alphabet position in python", I thought I could complement the already accepted answer with a different approach. You can take advantage of Python's string lib, char to int conversion and list comprehension to do the following:

import string


def alphabet_position(text):
    alphabet = string.ascii_lowercase
    return ''.join([str(ord(char)-96) if char in alphabet else char for char in text])
like image 43
Aurora Wang Avatar answered Nov 21 '25 00:11

Aurora Wang



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!