In this assignment, you are going to write a recursive Python function that is similar to the "reverse" function we have studied in Chapter4 The function is named "consonantReverse". This function will take a string and return a new string (this is because in Python, strings are immutable) that has all consonants in the reverse order of the input string but leaving the vowels in their original place. Here are a few examples: consonantReverse Data') >'taDa' consonantRever 'Algorithms') >'Asmohitrgl' consonantReverse Structures') > 'srtucrutes consonantReverse Datastructures'> saratcrutSuteD' Download the three files "cse220a2Tester.ру", "cse220a2TestData.ру", and "csc220a2.py" from Canvas and save them in the same folder. The first two files are the tester program and the testing data file, respectively. Do not modify these two files. The last file is the file you will work on. Note that you cannot rename this file and you cannot change the name of the function (otherwise the tester will not be able to pick up your implementation). However, you can change the name of the parameter if you like The file "csc220a2.ру" contains a dummy implementation of the function that returns a hard coded incorrect value: def consonantReverse (inputString, start 0, end None): return '' Note that in order to facilitate the recursion, we have added two parameters with default value These two parameters will not be used by the tester, but it is needed by your function to call itself recursively The tester program will use the testing data to test your implementation. It will run a total of 100 test cases. If you have not made any change to the function, it should produce the following output: Passed: [1 - total 0 Failed: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 1001 - total 100 0 of 100 test cases passed. Score = 0.00 of 15.00 Notes: You can assume that the input string contains only English letters ('A'-'Z, and any other characters will appear in the input string 1. -2), no 2. Your function should not change the capitalization of characters in the string (see examples above). Your function must be a recursive function 3. 4. Your program will be tested with similar but different data. The testing results will earn you up to 15 points (out of 20 points total) 5. The remaining 5 points will be awarded based on the structure, readability, and documentation of your implementation 6. You implementation should be compatible to Python 3.x. 7. There cannot be any import statement in your program 8. There can be only one single function (the consonantReverse function) in the "csc220a2.ру" file. No other helper method(s) is/are allowed The tester contains a function "runTestCase", this function takes a testcase number and run that single testcase. It will produce a more verbose output to help you debug your program. 9. 10. Your function should have performance linear to the length of the input string This can be a problem since Python strings are immutable. If you return a new string during each recursive step, your function will have O (n2) performance. This is because the returned string during each recursive step will need to be copied, which have an O(n) performance. To solve this problem, we will need to first convert the string into a list of characters, then the reverse operation can be performed on the list, and finally convert the list back into a string. Therefore, you may have to do something similar to the following: def consonantReverse (data, start 0, end - None): if type (data) str: data list (data) consonantReverse (data) return '".join (data)

Respuesta :

Answer:

See explaination

Explanation:

This function reverses the position

of the consonants keeping the

position of vowel constant.

Parameters:

data : type(str)

The string on which operation

needs to be performed

start : type(int)

Starting index of the string

end : type(int)

Ending index of the string

"""

def consonantReverse(data, start = 0, end = None):

# By default user will psas the data only.

# End will be none which will be set to length of string - 1

if(end == None):

return consonantReverse(data, 0, len(data)-1)

# return as this is invalid

if(start >= end):

return data

# split the data into list

if type(data)== str:

data = list(data)

# initialize index1 and index2

index1 = len(data)

index2 = -1

# find out the first index from beggining

# where consonant is present

for i in range(start, end+1):

if(data[i] not in ['a','e','i','o','u','A','E','I','O','U']):

index1 = i

break

# find out the index from the end

# where consonant is present

for i in range(end, start-1, -1):

if(data[i] not in ['a','e','i','o','u','A','E','I','O','U']):

index2 = i

break

# return as this is not valid case

if(index1 >= index2):

return ''.join(data)

# swap the data in the two index

data[index1], data[index2] = data[index2], data[index1]

# call the function recursively

data = consonantReverse(data, index1+1, index2-1)

# if it is a list, join the list into string

if(type(data) == list):

return ''.join(data)

# otherwise return the data

else:

return data

Otras preguntas