Jump Search in Python
For the moment, I did not dive into the details of your implementation, but one thing is obvious:


When you find search, you return an integer value corresponding to its position.
When you do not find it, you return a string .


This adds a little complication as how to call (and test) your function. But if you replace the returned string by None, it will be easier to call your function:

# Let us use your working example
if jump_search_2(arr, 16):
   # print("Found !")
else:
   # print("Not Found")
   # This is more pythonic than:
   # elif (jump_search_2(arr, 16) == "Not Found")