I was working through CoderByte ‘Python’ questions. Time is of essence, so the code may not be really readable but pretty straight forward. I will be interested in your approach. My code works for some words but testing with ‘sentence’ is giving me a different result, debugging as we speak. Please comment on my thinking!
Question :
Have the function LetterChanges(str) take the str parameter being passed and modify it using the following algorithm. Replace every letter in the string with the letter following it in the alphabet (ie. c becomes d, z becomes a). Then capitalize every vowel in this new string (a, e, i, o, u) and finally return this modified string. Use the Parameter Testing feature in the box below to test your code with different arguments. Do not modify the function name within the code. Do not put any code outside of the function and use the return keyword to return your answer from within the function.
My code :
def LetterChanges(str):
a = map(chr, range(97, 123))
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
b.remove('a')
b.append('a')
c = dict(zip(a,b))
v = ['a', 'e', 'i', 'o', 'u']
k = str
for i in range(len(str)):
if str[i] in a:
k = k.replace(str[i], c[str[i]])
l = k
for i in range(len(k)):
if k[i] in v:
l = l.replace(k[i], k[i].upper())
print l
# this call is needed to test your function
# keep this when you submit your code
LetterChanges(str)
Output :
zddzst -> AEEAUU {wrong}!
sentence -> UfOUfOdf {wrong}!
I would use
str.translate()for this, it might look something like this:Example:
For more efficiency, I would move the creation of
tableoutside of the function so that it is only calculated once, instead of on each function call. Alternatively just hard code the end values fororigandnew, like this:edit: Here is a version that should work with coderbytes restrictions: