The challenge
Write a nickname generator function, nicknameGenerator
that takes a string name as an argument and returns the first 3 or 4 letters as a nickname.
The nickname generator should perform the following tasks.
If the 3rd letter is a consonant, return the first 3 letters.
nickname("Robert") # "Rob"
nickname("Kimberly") # "Kim"
nickname("Samantha") # "Sam"
If the 3rd letter is a vowel, return the first 4 letters.
nickname("Jeannie") # "Jean"
nickname("Douglas") # "Doug"
nickname("Gregory") # "Greg"
If the string is less than 4 characters, return “Error: Name too short”.
Notes:
- Vowels are “aeiou”, so discount the letter “y”.
- Input will always be a string.
- Input will always have the first letter capitalised and the rest lowercase (e.g. Sam).
- The input can be modified
The solution in Python code
Option 1:
def nickname_generator(name):
if len(name)<4:
return "Error: Name too short"
if name[2] not in ['a','e','i','o','u']:
return name[:3]
else:
return name[:4]
Option 2:
def nickname_generator(name):
if len(name) < 4:
return 'Error: Name too short'
return name[: 4 if name[2] in 'aeiou' else 3]
Option 3:
def nickname_generator(name):
return "Error: Name too short" if len(name) < 4 else name[:3+(name[2] in "aeiou")]
Test cases to validate our solution
test.describe("Example Test Cases")
test.assert_equals(nickname_generator("Jimmy"), "Jim");
test.assert_equals(nickname_generator("Samantha"), "Sam");
test.assert_equals(nickname_generator("Sam"), "Error: Name too short");
test.assert_equals(nickname_generator("Kayne"), "Kay", "'y' is not a vowel");
test.assert_equals(nickname_generator("Melissa"), "Mel");
test.assert_equals(nickname_generator("James"), "Jam");