Python Forum
Optimizing string capitalization challenge
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Optimizing string capitalization challenge
#1
Here is the Udemy instructor's challenge:

Quote:Write a function that capitalizes the first and fourth letters of a name
old_macdonald('macdonald') --> MacDonald

Here is my solution:

def old_macdonald(name):
    first_cap = name[0].capitalize() + name[1:3]
    second_cap = name[3].capitalize() + name[4:]   
    together = first_cap + second_cap
    return together
This produces the desired output: MacDonald but I was wondering how you people would perhaps optimize this or re-write it in a more Pythonic way?

For my future reference, the course material I am working is publicly available here: Pierian-Data/Complete-Python-3-Bootcamp. The specific sub- module I am working on is: 03-Methods and Functions/03-Function Practice Exercises.ipynb
Reply
#2
Hint:
>>> "mac".capitalize()
'Mac'
Reply
#3
(Dec-30-2018, 03:57 PM)Gribouillis Wrote: Hint:
>>> "mac".capitalize()
'Mac'

Thank you for the hint, Gribouillis.

Programming is like algebra. In my script name carries the string "macdonald". So I rewrote my function by subsitituing all instances of name with the actual string "macdonald". As a result, I call the script differently as well. Based on your hint, here is what my script now:
def old_macdonald():
    reformatted = "macdonald"[0].capitalize() + "macdonald"[1:3] + "macdonald"[3].capitalize() + "macdonald"[4:]
    return reformatted
When I invoke the function in my interpreter with old_macdonald(), it still successfully prints the expected output: 'MacDonald'. So it still works. However my script is less dynamic because now I can't pass any other string as a parameter. Also, line 2 extends way beyond the right margin of my text editor. So for these two reasons I suppose my new script isn't much of an improvement or any more Pythonic. I'd even say it's kinda less Pythonic. haha

Instead of another hint, I think I am ready to recieve the answer from you people. After all, this isn't for credit. It's just a Udemy course.
Reply
#4
You didn't understand the hint. I meant
def old_macdonald(name):
    return name[:4].capitalize() + name[4:].capitalize()
By the way if you have a very long expression, you can write it on several lines with the help of parentheses
     result = (foobarbazqux[100034:].capitalize() + x
                   + bazbarquxfoo[800:812].capitalize()
                   + quxbarfooqux("makdoland").upper())
Reply
#5
Just a minor correction: The return statement using 4 produces 'MacdOnald'. Changing 4 to 3 creates what we are expecting. I see the slicing syntax and why Python parses this as output.

Thanks again Gribouillis for your advice.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Team Chooser Challenge kanchiongspider 3 2,315 Jun-02-2020, 04:02 AM
Last Post: kanchiongspider
  Meal cost challenge Emekadavid 3 2,802 Jun-01-2020, 02:01 PM
Last Post: Emekadavid
  Appending To Files Challenge erfanakbari1 3 2,867 Mar-27-2019, 07:55 AM
Last Post: perfringo
  Problem with a basic if challenge erfanakbari1 2 1,936 Oct-12-2018, 08:04 AM
Last Post: erfanakbari1
  trying an online challenge tozqo 8 5,877 Jun-21-2017, 07:07 AM
Last Post: Kebap

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020