[Python-es] Python 3.5.2

Ricardo Cárdenes ricardo.cardenes en gmail.com
Dom Dic 25 01:14:29 EST 2016


Añado, al respecto de calculadoras: en una normal, *donde no se pueden
introducir expresiones aritméticas*, sino que lo que hay en pantalla se
toma siempre como un operando completo, hubiese esperado lo contrario, ya
que estoy solicitando explícitamente elevar al cuadrado el número -2 y
entonces no hay ningún tipo de duda de que el resultado será "4" y no "-4"

2016-12-24 20:05 GMT-10:00 Ricardo Cárdenes <ricardo.cardenes en gmail.com>:

> Mire señor Alonso, yo no le he respondido a la ligera.
>
> Primero, como le dije, el caso de Python no es una excepción, sino *la
> regla* en cuanto a lenguajes de programación *que implementan la
> exponenciación* en su sintaxis - es decir, la precedencia está dictada por
> el propio lenguaje. Es decir, no lo busque en C, o en C++, o en Java, etc.
> De hecho, me molesté en documentarme brevemente antes de responder. Y mira
> que no hay muchos lenguajes que implementen la exponenciación en su
> sintaxise, pero le dejo una lista (no exhaustiva), sin irme a casos
> demasiado exóticos:
>
>   - ADA: los operadores de MAYOR precedencia son abs (valor absoluto), not
> (negación lógica) y ** (exponenciación). Dos niveles por encima de los
> operadores unarios, y uno por encima de la multiplicación/división.
>   - D: El operador ^^ (exponenciación) está un nivel por encima de los
> unarios
>   - FORTRAN: El operador ** tiene la precedencia más alta
>   - Haskell: Los operadores ^, ^^ y ** (todos de exponenciación) están por
> debajo sólo de "!!", que se usa para acceder a los índices de arrays
>   - PHP: ** está por encima de todos los demás operadores aritméticos (y
> mira que le tengo tirria a este lenguaje, pero por una vez...)
>   - Python (pero esto ya lo sabíamos): ** está, como viene siendo
> habitual, por encima de los unarios, pero por debajo de los operadores de
> indización
>   - R: ^ (exponenciación), está justo por encima de + y - unarios
>   - Ruby: ** está justo por encima del - unario (pero justo por debajo del
> + unario, cosas de la vida)
>
> Casos que conozco donde la precedencia de los unarios está por encima:
> Prolog, JavaScript y algunos casos patológicos como Excel (véase más abajo).
>
> En cuanto a calculadoras, he usado la que tengo más a mano (en mi teléfono
> móvil) y:
>
>    -4^2 = -16
>    (-4)^2 = 16
>
> tal como esperaba.
>
> Y en el caso de las matemáticas, don Aurelio Baldor (al que no conocía,
> por cierto) podrá cantar misa en Latín, pero cualquier de mis profesores de
> matemáticas me hubiera tirado de las orejas si se ocurre interpretar que:
>
>     -x^n = (-x)^n
>
> Aunque claro, siempre me animaron a usar paréntesis para que no cupiera
> duda.
>
> Si es cuestión de sacar referencias, pues nada. Citemos Wikipedia, que a
> su vez usa como referencias "Elementary Algebra for College Students"
> (Angel Allen) y "Taschebuch der Mathematik" (Grosche, Ziegler y Ziegler):
>
> There exist differing conventions concerning the unary operator − (usually
> read "minus"). *In written or printed mathematics*, the expression −32 is
> interpreted to mean 0 − (32) = −9, but in some applications and
> programming languages, notably Microsoft Office Excel (and other
> spreadsheet applications) and the programming language bc [...]
>
>
> Las negritas son mías, pero vamos, que la norma la que decimos nosotros,
> aunque algunos lenguajes de programación han escogido usar la convención
> contraria. Y Baldor, según vd., aunque la única copia a la que tenido
> acceso es una edición de 1985-86, en la que el capítulo XV no empieza hasta
> la página 155 y no aparece un sólo número negativo.
>
> Saludos,
> Ricardo
>
> 2016-12-24 6:52 GMT-10:00 Johnny Alonso <johnny.alonso.quintero en gmail.com>
> :
>
>> Hola Ricardo y Armando, si las expresiones que muestran son código
>> Python, lamento decirles que están bastante lejos de la realidad.
>>
>> Están comparando expresiones con operadores diferentes y que el resultado
>> en ocasiones les coincida es mera casualidad.
>> En Python el operador ** es potenciación y ^ equivale a la operación XOR
>> entre bist.
>> >>> -2**2
>> -4
>> >>> -(2^2)
>> 0
>> Armando ni siquiera coinciden los resultados, dándote el beneficio de la
>> duda, y utilizas el ^ como operador de potenciación, entonces:
>> La expresión -(2^2) en Python equivale a:
>> >>> -(2**2)
>> -4
>> Aquí los resultados con el operador ** coinciden, -4 en ambos casos, y lo
>> acepto como correcto desde el punto de vista del lenguaje, pero no desde el
>> punto de vista matemático, pues matemáticamente las expresión -2² es
>> diferente a -(2²).
>>
>> Los desarrolladores de lenguajes son libres de incorporar lo que desean,
>> esto también aplica para la precedencia de operadores y el sentido de
>> evaluación de las expresiones matemáticas, pero de igual forma lo
>> documentan para que los usuarios no incurramos en errores asumiendo que
>> todos cumplen las reglas de evaluación matemática al pie de la letra.
>>
>>
>>
>> Conjetura: Python no implementa el operador menos unario, pero si el
>> binario el cual tiene menor precedencia que el de potenciación, así:
>>
>> -x**n es interpretado en Python como 0-x**n.
>>
>> >>> -2**2
>>
>> -4
>>
>> >>> 0 - 2**2
>>
>> -4
>>
>>
>>
>> Saludos, Johnny Alonso
>>
>>
>>
>>
>>
>> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero=
>> gmail.com en python.org] *En nombre de *Armando Ortega
>> *Enviado el:* sábado, 24 de diciembre de 2016 6:24 a. m.
>>
>> *Para:* La lista de python en castellano
>> *Asunto:* Re: [Python-es] Python 3.5.2
>>
>>
>>
>> Buenos días.
>>
>> Ricardo tiene razón.
>>
>> -2**2 = -(2^2) = -4
>> (-2)**2 = -2^2 = 4
>>
>> Un saludo.
>>
>> El 24/12/16 a las 04:54, Johnny Alonso escribió:
>>
>> Hola Ricardo, Por definición “La potencia es resultado de tomar un número
>> como factor 2 o más veces”. Aritmética de Baldor, capítulo XV, Elevación a
>> potencias y sus operaciones inversas, página 152.
>>
>>
>>
>> -2**2 = -2 * -2
>>
>>
>>
>> Leyes de la potenciación:
>>
>> Todo número elevado a la cero  es igual a 1, x**0 = 1
>>
>> -2**0 = 1
>>
>>
>>
>> Todo número elevado a un exponente par (múltiplo de 2) es positivo, en
>> caso contrario se mantiene el signo del número.
>>
>> -2**2 = 4
>>
>> -2**3 = -8
>>
>>
>>
>> Lo anterior lo puedes verificar en la calculadora de un celular IPhone o
>> Samsung, incluso en la de Windows.
>>
>>
>>
>> Es evidente que en Python es así, y lo acepto porque así está
>> documentado, pero es algo para tener en cuenta cuando programas en él.
>>
>>
>>
>> Ricardo, con respecto a las matemáticas en este caso, estas equivocado.
>>
>>
>>
>> Saludos, Johnny Alonso
>>
>> *De:* Python-es [mailto:python-es-bounces+john
>> ny.alonso.quintero=gmail.com en python.org
>> <python-es-bounces+johnny.alonso.quintero=gmail.com en python.org>] *En
>> nombre de *Ricardo Cárdenes
>> *Enviado el:* viernes, 23 de diciembre de 2016 5:04 p. m.
>> *Para:* La lista de python en castellano
>> *Asunto:* Re: [Python-es] Python 3.5.2
>>
>>
>>
>> No, no es una excepción.
>>
>>
>>
>> En matemáticas, la exponenciación tiene prioridad:
>>
>>
>>
>>   -x^2 = -(x^2)
>>
>>
>>
>> Los lenguajes de programación que implementan este operador, suelen
>> adherirse a la regla (Python, PHP, D, Ruby, ...). Luego tienes disidentes
>> como JavaScript, pero bueno...
>>
>>
>>
>> Así que no, Python no es "una excepción a las reglas algebraicas".
>>
>>
>>
>> Saludos,
>>
>> Ricardo
>>
>>
>>
>> 2016-12-23 5:31 GMT-10:00 Johnny Alonso <johnny.alonso.quintero en gmail.com
>> >:
>>
>> Gracias Kiko, me queda claro, es excepción a las reglas algebraicas en
>> Python.
>>
>>
>>
>> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero=
>> gmail.com en python.org] *En nombre de *Kiko
>> *Enviado el:* viernes, 23 de diciembre de 2016 10:08 a. m.
>> *Para:* La lista de python en castellano
>> *Asunto:* Re: [Python-es] Python 3.5.2
>>
>>
>>
>>
>>
>>
>>
>> El 23 de diciembre de 2016, 16:05, Kiko <kikocorreoso en gmail.com>
>> escribió:
>>
>>
>>
>>
>>
>> El 23 de diciembre de 2016, 15:06, Johnny Alonso <
>> johnny.alonso.quintero en gmail.com> escribió:
>>
>> Hola todos, estoy iniciándome en Python y creo que se presenta un fallo
>> de precedencia con el operador menos unario:
>>
>> >>> -2**2  # probable error
>>
>> -4
>>
>> >>> -2 * -2  # Ok
>>
>> 4
>>
>> >>> pow(-2, 2)  # Ok
>>
>> 4
>>
>> >>>
>>
>> Por favor, si alguien sabe si esto está documentado podría indicarme en
>> donde lo encuentro, de lo contrario, podrían reportarlo a la fundación, yo
>> no lo se hacer.
>>
>>
>>
>>
>>
>> Se evalúa antes el operador potencia: https://docs.python.org/3/refe
>> rence/expressions.html#unary-arithmetic-and-bitwise-operations
>>
>> Antes he ido muy rápido: https://docs.python.org/3/refe
>> rence/expressions.html#the-power-operator
>>
>>
>>
>>
>>
>>
>> Saludos, JohnnyAlonso
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>>
>> Python-es mailing list
>>
>> Python-es en python.org
>>
>> https://mail.python.org/mailman/listinfo/python-es
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20161224/2884e468/attachment.html>


Más información sobre la lista de distribución Python-es