Countdown number game solver
Globals
Since target, numbers and math_functions are global constants, they should be all-caps - e.g. TARGET. That said, you should refactor this so that the target and numbers are parametric, so that they can (eventually) be randomly generated.
Solution does not belong as a global, since it is mutable - its presence prevents your program from being re-entrant.
Likewise, the globally-scoped code starting with for x should be moved into a function.
Use of operators
This falls into the category of &quot;code as data&quot;. This block:
            if function[1] == &quot;+&quot;:
                value += permutation[function[0]+1]
            elif function[1] == &quot;-&quot;:
                value -= permutation[function[0]+1]
            elif function[1] == &quot;/&quot;:
                value /= permutation[function[0]+1]
            else:
                value *= permutation[function[0]+1]

can be greatly simplified if you change your math_functions to be a tuple (or maybe dictionary) of character-operator pairs, where you import your operators from https://docs.python.org/3/library/operator.html .