Mi pregunta se ve así:
10-7//2*3+1Se supone que debo resolver la ecuación.
Mi respuesta parece salir como 8 cuando uso PEMDAS:
First its's 2*3 = 6; 10-7//6+1 second = 7//6= 1; 10-1+1 Third = 10-8 = 8;Pero cuando lo pongo en python, obtengo un 2. ¿Por qué es así?
Parece que el orden de los programas es el siguiente:
first: 7//2=3; 10-3*3+1 second: 3*3=9; 10-9+1 third:10-9+1= 2; 2no lo entiendo
PEMDAS es P , E , MD , AS ; la multiplicación y la división tienen la misma precedencia , y lo mismo ocurre con la suma y la resta. Cuando aparece un operador de división antes de la multiplicación, la división va primero.
El orden en que se ejecutan los operadores de Python se rige por laprecedencia del operador y sigue las mismas reglas. Los operadores con mayor precedencia se ejecutan antes que los de menor precedencia, pero los operadores tienen la misma precedencia cuando están en el mismo grupo.
Para 10-7//2*3+1 , tiene 2 clases de operadores, de menor a mayor:
+, - (correlación con AS == suma y resta )*, @, /, //, % (en correlación con MD , por lo tanto, multiplicación y división ). Entonces // y * se ejecutan primero; la multiplicación y la división caen en el mismo grupo , no en un orden establecido aquí ( MD no significa que la multiplicación viene antes de la división):
10 - ((7 // 2) * 3) + 1 Entonces 7 // 2 se ejecuta primero, seguido de la multiplicación por 3. Luego obtienes la resta de diez y sumas uno al final.
Hemos pasado por alto un tema que no afecta su caso particular, pero que es muy importante para escribir programas Python reales. PEMDAS no trata realmente sobre el orden de las operaciones; no decide en qué orden se evalúan las cosas. Realmente se trata de agrupar argumentos . PEMDAS dice que a + b + c * d se evalúa como (a + b) + (c * d) , pero no dice si se evalúa primero a + b o c * d .
En matemáticas, no importa lo que evalúes primero, siempre y cuando respetes la agrupación de argumentos. En Python, si evaluó b() y c() primero en a() + (b() + c()) solo porque están entre paréntesis, podría obtener un resultado completamente diferente, porque las funciones de Python pueden tener efectos secundarios. efectos
La evaluación de expresiones de Python funciona principalmente de izquierda a derecha. Por ejemplo, en a() + b() + (c() * d()) , el orden de evaluación es el siguiente:
a()b()+ , ahora que sus argumentos están listosc()d()* , ahora que sus argumentos están listos+ , ahora que sus argumentos están listos Esto es a pesar de la alta precedencia de * y los paréntesis alrededor de la multiplicación.
PEMDAS se expresa mejor como
P Parentheses, then E Exponents, then MD Multiplication and division, left to right, then AS Addition and subtraction, left to rightEntonces, en tu expresión, la división debe hacerse antes de la multiplicación, ya que está a la izquierda de la multiplicación. Después de hacer eso, luego haga la resta y luego la suma.
Esto está documentado aquí (Documentación de Python / Expresiones / Precedencia de operadores):