Question: Capitalize! [Python Strings]
You are asked to ensure that the first and last names of people begin with a capital letter in their passports. For example, alison heck should be capitalized correctly as Alison Heck.
alishonheck ==> AlishonHeck
Given a full name, your task is to capitalize the name appropriately.
Input Format
A single line of input containing the full name, S.
Constraints
- 0 < len(S) < 1000
- The string consists of alphanumeric characters and spaces.
Note: in a word only the first character is capitalized. Example 12abc when capitalized remains 12abc.
Output Format
Print the capitalized string, S.
Sample Input
chris alan
Sample Output
Chris Alan
Possible Solutions
Let us now solve the given problem using possible ways. The following code is already given in the hacker rank editor.
import math
import os
import random
import re
import sys
# Complete the solve function below.
def solve(s):
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
result = solve(s)
fptr.write(result + '\n')
fptr.close()
We need to complete the function in order to solve the problem.
Solution-1: Using for loop
Now, we will solve the problem using for loop and then we will explain the code in detail.
import math
import os
import random
import re
import sys
def solve(s):
s=s.casefold()
for i in range(len(s)):
if s[i].isalpha()==True and (s[i-1]==" " or i==0):
s=s[:i]+s[i].upper()+s[i+1:]
k=str(s)
return k
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
result = solve(s)
fptr.write(result + '\n')
fptr.close()
This solution defines a function “solve” which takes a string as
input. The input string is first converted to lowercase using the
“casefold” method. Then, the code iterates through each character in
the string and checks if it’s an alphabet (using the “isalpha” method)
and if the previous character is a space or if the current character is
the first character of the string. If both conditions are met, the
character is converted to uppercase by concatenating the substring
before the character, the uppercase version of the character, and the
substring after the character. Finally, the transformed string is
returned as a result of the function.
Solution-2: Using a user-defined function
Now we will define a function that will help us to solve the given problem.
import math
import os
import random
import re
import sys
def capitalize(match_obj):
return match_obj.group().upper()
def solve(s):
return re.sub('^\w| \w', capitalize, s)
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
result = solve(s)
fptr.write(result + '\n')
fptr.close()
This solution also defines a function “solve” which capitalizes the
first letter of each word in a given string and returns the transformed
string. The function utilizes the re (regular expression) module’s
“sub” method to perform the capitalization. The “capitalize”
function is defined as a helper function that takes a match object as
input and returns the capitalized version of the matched string. The
“solve” function uses the “sub” method to substitute each match of
the pattern “^\w| \w” (start of the string or a space followed by a
word character) with the result of the “capitalize” function. Finally,
the code writes the result of the “solve” function to a file specified
by the environment
variable “OUTPUT_PATH.
Solution-3: Using .join() method
We will now use the .join() method to solve the given problem.
import math
import os
import random
import re
import sys
def solve(s):
return " ".join([name.capitalize() for name in s.split(" ")])
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
result = solve(s)
fptr.write(result + '\n')
fptr.close()
The solve() function first splits the input string “s” into a list
of words using the “split” method with the separator " " (space).
Then, it uses a list comprehension to iterate through each word in the
list and apply the “capitalize” method to capitalize the first letter
of each word. Finally, the “join” method is used to join the capitalized
words back into a single string using the separator " " (space) and the
resulting string is returned as the output of the function.
Solution-4: Using an if-else statement
Let us now use the if-else statement to solve the problem and then we will explain the code.
import math
import os
import random
import re
import sys
def solve(s):
ans =""
l = s.split(" ")
for i in l:
if i.isdigit():
ans += i +" "
else:
ans+= i.capitalize()+" "
return ans.strip()
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
result = solve(s)
fptr.write(result + '\n')
fptr.close()
This code takes in a string s as input and returns a new string ans as
output. The input string s
is split into a list of strings l using the split method, with a
space as the separator. For each string i in l, if it is a digit
(determined by the isdigit method), it is added to ans as is, followed
by a space. If i is not a digit, the capitalize method is used to
capitalize the first letter of i and the result is added to ans,
followed by a space. Finally, the strip method is used to remove any
trailing spaces in ans before it is returned as the final result.
Summary
In this short article, we discussed how we can solve the Capitalize problem. We solved the given problem using four different methods and explained each method in detail.

![HackerRank Solution: Python Capitalize! [4 Methods]](/capitalize-hackerrank-solution-in-python/python_capitalize_a.jpg)
