#flip
For starter, you can swap two variables in Python without using a temporary one:
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> print(a, b)
5 3
But above all, this function is better implemented using slices:
def flip(arr, i):
arr[:i] = reversed(arr[:i])
Or
def flip(arr, i):
arr[:i] = arr[i-1::-1]
#findMaxUpTo
Same here, slices and builtin functions can go a long way into simplifying the code. A "max" function that doesn't use the max builtin feels wrong to me.
A naïve rewrite would be:
def findMaxUpTo(arr, i):
val = max(arr[:i])
return arr.index(val)
It is good for now. But a better rewrite would make use of enumerateenumerate and the key argument of max. Possibly involving operator.itemgetter in the process and itertools.takewhile to avoid copying the array.
#pancake_sort
Not much to add here, except a note on your return value. Since you are mutating the array in-place, there is absolutely no reason to return a value. Once you call the function on an array, it will be sorted and all previous references to this array will now goodhold the sorted version. Returning a value can mislead the users that the original array remain untouched, which is false.
Similarly, you never make use of the output variable.
#miscelaneous
Your naming style is inconsistent and some variable names don't convey much meaning, please fix it.