Answer:
Here is the Python program:
def fancy_find(search_within , search_for): # function definition of fancy_find function that takes two parameters
index = 0 #to store the index of search_within where the search_for string is found
if search_for in search_within: #checks if the string search_for is present in string search_within
sf = search_for[0] #points to the first character of the search_for
for sw in search_within: #iterates through search_within
if sw == sf: #if the first character of search_for is equal to the character at sw index of search_within
if search_within[index:index+len(search_for)] == search_for: #checks if the value of search_for is found in search_within
print(search_for,"found at index",index,"!") #if above condition is true prints the message "[search_for] found at index [index]!", with [search_for] and [index] replaced by the value of search_for and the index at which it is found
return ""
index += 1 #increments value of index at each iteration
print(search_for,"is not found within", search_within) #if search_for is not found within search_within, prints message "[search_for] was not found within [search_within]!" with the values of search_for and search_within.
return ""
#following two statements are used to test the working of above function
print(fancy_find("ABCDEF", "DEF")) #calls fancy_find() passing "ABCDEF" as search_within and "DEF" as search_for
print(fancy_find("ABCDEF", "GHI")) #calls fancy_find() passing "ABCDEF" as search_within and "GHI" as search_for
Step-by-step explanation:
The program is well explained in the comments. I will explain the working of the function with the help of an example:
Suppose
search_within = "ABCDEF"
search_for = "DEF"
We have to find if search_for i.e. DEF is present in search_within i.e. ABCDEF
if search_for in search_within statement checks using in operator that if DEF is included in ABCDEF. Here this condition evaluates to true so the next statement sf = search_for[0] executes which sets the first element of search_for i.e. D to sf. So sf = 'D'
for sw in search_within this statement has a for loop that iterates through ABCDEF and works as following:
At first iteration:
sw contains the first character of search_within i.e. A
if sw == sf: condition checks if the first character of the search_for i.e. D is equal to sw i.e. A. Its not true so the program control moves to this statement:
index += 1 This increases the value of index by 1. index was initialized to 0 so now it becomes 1. Hence index=1
At second iteration:
sw contains the second character of search_within i.e. B
if sw == sf: condition checks if the first character of the search_for i.e. D is equal to sw i.e. B Its not true so the program control moves to this statement:
index += 1 This increases the value of index by 1. index was initialized to 0 so now it becomes 2. Hence index=2
At third iteration:
sw contains the third character of search_within i.e. C
if sw == sf: condition checks if the first character of the search_for i.e. D is equal to sw i.e. C Its not true so the program control moves to this statement:
index += 1 This increases the value of index by 1. index was initialized to 0 so now it becomes 3. Hence index=3
At fourth iteration:
sw contains the third character of search_within i.e. D
if sw == sf: condition checks if the first character of the search_for i.e. D is equal to sw i.e. D. Its true so so the program control moves to this statement:
if search_within[index:index+len(search_for)] == search_for:
current value of index=3
len(search_for) returns the length of DEF i.e. 3
So the if condition checks for the search_for in search_within. The statement becomes:
if search_within[3:3+3] == search_for:
search_within[3:3+3] means from 3rd index position of search_within to 6-th index position of the search_within. This means from 4th element of search_within i.e. D to the last. Hence search_within[3:3+3] is equal to DEF.
search_for = DEF so
if search_within[3:3+3] == search_for: checks if
search_within[3:3+3] = DEF is equals to search_for = DEF
Yes it is true so
print(search_for,"found at index",index,"!") statement is executef which prints the following message:
DEF found at index 3!
This output is because search_for = "DEF" and index=3