Skip to content

Instantly share code, notes, and snippets.

@GlulkAlex
Created June 26, 2016 08:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GlulkAlex/1264d093d51436d665c5ef232a867e3d to your computer and use it in GitHub Desktop.
Save GlulkAlex/1264d093d51436d665c5ef232a867e3d to your computer and use it in GitHub Desktop.
string Capitalization
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#utf_8 U8, UTF, utf8
"""Capitalize.py:
interactive Python sessions for doctest
must be in the `right` place
in order to be executed
The module docstring, and
all function,
class and
method `docstrings`
are searched.
Objects imported into the module
are not searched.
>>> make_Start_Capital_Recursive("FRACTION ONE FIFTH")
'Fraction One Fifth'
"""
__author__ = "GlukAlex"
#echo "SCHEDULING SCHEDULING" | sed 's/.*/\L&/' | sed 's/\b\w/\U&/g'
#Scheduling Scheduling
"""
In[6]: " ".join(map(lambda v: str(v[:1]).upper() + str(v[1:]), "MATT PARKER".lower().split(" ")))
Out[6]: 'Matt Parker'
same as:
In[9]: " ".join(map(str.capitalize, "MATT PARKER".lower().split(" ")))
Out[9]: 'Matt Parker'
same as:
In[10]: " ".join((str.capitalize(w) for w in "MATT PARKER".split(" ")))
Out[10]: 'Matt Parker'
"""
def make_Start_Capital_Iterative(source_Str: str) -> str:
"""
:param source_Str:
:return:
>>> make_Start_Capital_Iterative("MATT PARKER")
'Matt Parker'
>>> make_Start_Capital_Recursive("mATT pArKeR")
'Matt Parker'
"""
result_String = ""
# slide window
last_Char = ""#None
for (i, c) in enumerate(source_Str):
if i == 0:
last_Char = c.upper()
#result_String += last_Char
else:
if (
last_Char == " "
):
last_Char = c.upper()
#result_String += last_Char
else:
last_Char = c.lower()
#result_String += last_Char
result_String += last_Char
return result_String
#@tailrec
def make_Start_Capital_Recursive(
source_Str: str,
last_Char: str = "",
result_Accum: str = ""
) -> str:
"""
:param source_Str:
:param last_Char:
:param result_Accum:
:return:
>>> make_Start_Capital_Recursive("MATT PARKER")
'Matt Parker'
>>> make_Start_Capital_Recursive("mATT pArKeR")
'Matt Parker'
"""
if source_Str == "" or len(source_Str) == 0:
# base case
return result_Accum
else:
# recursive step
current_Char = source_Str[0]
next_Source_Str = source_Str[1:]
if last_Char == "" or last_Char == " ":
next_Result = result_Accum + current_Char.upper()
else:
next_Result = result_Accum + current_Char.lower()
return make_Start_Capital_Recursive(
source_Str = next_Source_Str,
last_Char = current_Char,
result_Accum = next_Result
)
#*** unit test ***#
if __name__ == "__main__":
import doctest
# python example.py -v
doctest.testmod(verbose = True)
# doctest.testfile("example.txt")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment