Les blagues de merde de programmeurs quoi... 
_Pytchoun on ne peut pas parce que notre expression est variable, on a pas quelque chose de déterminé comme " 1+2 ", mais plutôt un calcul dont on ne connait pas l'''opérateur''.
Reprenons l'exemple avec l'opération sur deux termes connus : 1 et 2 ( car finalement, peu importe qu'ils soient connus ou non : on peut très bien faire z = x + y sans passer par eval() ).
Si l'on veut faire une addition, on écrit : " z = 1 + 2 ", une multiplication : " z = 1 * 2 " et une soustraction : " z = 1 - 2 ". Ok, sauf que là, on ne sait pas d'avance quelle opération devra être utilisée : c'est relatif à un choix au hasard.
Et dans ce cas là, on ne peut pas faire " z = 1 choice(op) 2 ", Python ne peut pas exécuter ça, car pour lui ce que renverra choice(op) c'est une chaîne de caractères ( = string ).
Du coup ben on est obligé de passer par la fonction eval()...
Je te conseille de suivre un cours là, car franchement ne pas savoir ce qu'est un string c'est plutôt problématique.... Normalement c'est ce qu'on voit en premier, avant même d'aborder les conditions et l'aléatoire qui intervient plus tardivement. 