![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Un valor es una de las cosas fundamentales como una letra o un número que maneja un programa. Los valores que hemos visto hasta ahora son el 2 (resultado de la suma 1 + 1), y "¡Hola, Mundo!".
Estos valores son de distinto tipo: 2 es un número entero, y "¡Hola, Mundo!" es una cadena, que se denomina de este modo porque contiene una "cadena" de letras. El intérprete y tú podéis identificar las cadenas porque van entre comillas.
La sentencia de impresión también funciona con números enteros.
>>> print 4
4
Si no estás seguro del tipo al que pertenece un valor, el intérprete te lo puede decir.
>>> type("¡Hola, Mundo!")
<type 'string'>
>>> type(17)
<type 'int'>
Como era de suponer, las cadenas pertenecen al tipo string (cadena) y los números enteros pertenecen al tipo int (entero). De manera menos obvia, los números decimales pertenecen a un tipo que se denomina float, ya que estos números se representan mediante un formato denominado coma flotante.
>>> type(3.2)
<type 'float'>
¿Y qué sucede con valores como "17" y "3.2"? Parecen números y, sin embargo, van entre comillas, como las cadenas.
>>> type("17")
<type 'string'>
>>> type("3.2")
<type 'string'>
Luego son cadenas.
Si tecleas un número entero grande, tal vez sientas la tentación de utilizar comas entre grupos de tres dígitos, como en 1,000,000. No es un número entero típico de Python, pero es válido:
>>> print 1,000,000
1 0 0
El resultado no se corresponde en absoluto con lo que nos esperábamos. Python interpreta 1,000,000 como una lista de tres objetos a imprimir. Por lo tanto, recuerda que no debes poner comas en los números enteros.
Comentarios
Una de las características más sobresalientes de un lenguaje de programación es la capacidad de manejar variables. Una variable es un nombre que hace referencia a un valor.
La sentencia de asignación crea nuevas variables y les da valores:
>>> mensaje = "¿Qué pasa, tío?"
>>> n = 17
>>> pi = 3.14159
Este ejemplo produce tres asignaciones. La primera asigna la cadena "¿Qué pasa, tío?" a una nueva variable denominada mensaje. La segunda le da al número entero 17 una n , y la tercera asigna el número de coma flotante 3.14159 a pi.
Una forma habitual de representar variables en papel consiste en escribir su nombre con una flecha que señale el valor de la variable. Este tipo de figura se denomina diagrama de estado, ya que muestra en qué estado se encuentra cada una de las variables (considéralo como el estado mental de la variable). Este diagrama muestra el resultado de las sentencias de asignación:

La sentencia de impresión también funciona con variables.
>>> print mensaje
¿Qué pasa, tío?
>>> print n
17
>>> print pi
3.14159
En cada caso, el resultado es el valor de la variable. Las variables también tienen tipos; una vez más, podemos preguntarle al intérprete qué son.
>>> type(mensaje)
<type 'string'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>
El tipo de una variable es el tipo del valor al que hace referencia.
Comentarios
Por lo común, los programadores escogen nombres justificados para sus variables: dan cuenta del uso que se hace de la variable.
Los nombres de variables pueden ser arbitrariamente grandes, y contener tanto letras como números; no obstante, tienen que empezar por una letra. Aunque es válido utilizar letras mayúsculas, por convención no lo hacemos. Si lo haces, recuerda que el programa es sensible a ellas. Pedro y pedro son variables distintas.
El carácter guión bajo (_) puede aparecer en un nombre. Se utiliza a menudo en nombres que presentan múltiples palabras, como mi_nombre o precio_del_te_en_china.
Si no le das un nombre válido a una variable, te sale un error sintáctico:
>>> 76trombones = "gran desfile"
SyntaxError: invalid syntax
>>> menos$ = 1000000
SyntaxError: invalid syntax
>>> class = "Informatica 101"
SyntaxError: invalid syntax
76trombones no es válido porque no empieza por una letra. menos$ no es válido porque contiene el signo del dólar, un carácter que tampoco es válido. Sin embargo, ¿qué es lo que sucede con class?
Resulta que class es una de las palabras clave de Python. Las palabras clave definen las reglas y estructura del lenguaje, y no pueden utilizarse como nombres de variables.
Python tiene veintiocho palabras clave:
and continue else for import not raise
assert def except from in or return
break del exec global is pass try
class elif finally if lambda print while
Es probable que quieras mantener esta lista a mano: si el intérprete rechaza uno de los nombres de tus variables y no sabes la razón, comprueba si el nombre se encuentra en esta lista.
Comentarios
Una sentencia es una instrucción que el intérprete de Python puede ejecutar. Hemos visto dos tipos de sentencias: impresión y asignación.
Si tecleas una sentencia en la línea de órdenes, Python la ejecuta y muestra el resultado, si es que lo hay. El resultado de una sentencia de impresión es un valor. Las sentencias de asignación no producen ningún resultado.
Por lo general, un guión contiene una secuencia de sentencias. Cuando hay más de una sentencia, los resultados aparecen de uno en uno a medida que las sentencias se ejecutan.
Por ejemplo, el guión
print 1
x = 2
print x
produce la salida
1
2
Una vez más, la sentencia de asignación no produce ninguna salida.
Comentarios
Una expresión es una combinación de valores, variables y operadores. Cuando tecleas una expresión en la línea de órdenes, el intérprete la evalúa y muestra el resultado:
>>> 1 + 1
2
Un valor, al igual que una variable, se considera por sí una expresión.
>>> 17
17
>>> x
2
Por extraño que parezca, la evaluación de una expresión no es exactamente lo mismo que la impresión de un valor.
>>> mensaje = "¿Qué pasa, tío?"
>>> mensaje =
"¿Qué pasa, tío?"
>>> print mensaje
¿Qué pasa, tío?
Cuando Python muestra el valor de una expresión, utiliza el mismo formato que utilizarías tú para introducir un valor. En el caso de las cadenas, esto supone que incluye las comillas. Sin embargo, la sentencia de impresión imprime el valor de la expresión que, en este caso, son los contenidos de la cadena.
En un guión, una expresión es de por sí una sentencia válida, pero no tiene ninguna función. El guión
17
3.2
"¡Hola, Mundo!"
1 + 1
no produce salida alguna. ¿Cómo cambiarías el guión para mostrar los valores de estas cuatro expresiones?
Comentarios
Los operadores son símbolos especiales que representan cómputos, como la suma y la multiplicación. Los valores que utiliza el operador se denominan operandos.
Todo lo que aparece a continuación son expresiones válidas de Python cuyo significado es más o menos claro:
20+32 hora-1 hora*60+minuto minuto/60 5**2 (5+9)*(15-7)
Los símbolos +, -, /, y el uso del paréntesis para agrupar operaciones representan en Python lo que representan en Matemáticas. El asterisco (*) es el símbolo de la multiplicación, y ** es el símbolo de la exponenciación.
Cuando un nombre de variable ocupa la posición de un operando, se reemplaza con su valor antes de que se realice la operación.
La suma, resta, multiplicación y exponenciación hacen lo que sería de esperar; sin embargo, es probable que la división te sorprenda. La siguiente operación tiene un resultado inesperado:
>>> minuto = 59
>>> minuto/60
0
El valor de minuto es 59, y 59 dividido entre 60 es 0.98333, no 0. La razón de esta discrepancia es que Python está haciendo una división entera.
Si los dos operandos son números enteros, el resultado también debería ser un número entero; sin embargo, por convención, la división entera siempre se redondea por lo bajo, incluso en casos como éste, en los que el siguiente número entero está muy cercano.
Una posible solución para este problema consiste en calcular un porcentaje en vez de una fracción.
>>> minuto*100/60
98
Una vez más, se redondea el resultado por lo bajo, pero ahora al menos la respuesta es aproximadamente correcta. Otra alternativa es usar la división de coma flotante, a la que llegaremos en el Capítulo 3.
Comentarios
Cuando aparece más de un operador en una expresión, la orden de evaluación depende de las reglas de prioridad. Python sigue las mismas reglas de prioridad que las Matemáticas para sus operadores. El acrónimo PEMDSR es práctico para recordar el orden de las operaciones:
Por lo general, no se pueden realizar operaciones matemáticas con cadenas, ni siquiera cuando parecen números. Lo que aparece a continuación no es válido (en el supuesto de que mensaje sea del tipo cadena):
mensaje-1 "Hola"/123 mensaje*"Hola" "15"+2
Curiosamente, el operador + sí funciona con cadenas, pero no hace exactamente lo que sería de esperar. En las cadenas, el operador + representa una concatenación, que implica una unión de los dos operandos a través del enlace de sus extremos. Por ejemplo:
fruta = "ciruela"
horneado= " pan bizcochado"
print fruta + pan bizcochado
La salida de este programa es ciruela pan bizcochado. El espacio entre la palabra bizcochado forma parte de la cadena, y es necesario dejar ese espacio entre cadenas concatenadas.
El operador * también funciona con cadenas: realiza repeticiones. Por ejemplo, 'Bien'*3 es 'BienBienBien'. Uno de los operandos tiene que ser una cadena; el otro, un número entero.
Por un lado, esta interpretación de + y * resulta comprensible por analogía con la suma y la multiplicación. Del mismo modo que 4*3 equivale a 4+4+4, se espera que "Bien"*3 sea lo mismo que "Bien"+"Bien"+"Bien" y, de hecho, lo es. Por otro lado, es significativo el modo en que difieren la repetición y concatenación de cadenas de la suma de números enteros y la multiplicación. ¿Se te ocurre alguna propiedad que puedan tener la suma y la multiplicación de la que carezcan la repetición y la concatenación de cadenas?
Comentarios
Hasta ahora, hemos visto por separado los elementos que tiene un programa variables, expresiones y sentencias , pero sin mencionar cómo combinarlos.
Una de las características más útiles que tienen los lenguajes de programación es la capacidad de tomar bloques pequeños y componerlos. Por ejemplo, sabemos añadir números e imprimirlos; sin embargo, resulta que podemos hacer las dos cosas al mismo tiempo:
>>> print 17 + 3
20
A decir verdad, se tiene que hacer la suma antes de la impresión, así que en realidad no suceden al mismo tiempo. La cuestión es que cualquier expresión que implique números, cadenas y variables se puede utilizar en una sentencia de impresión. Ya has visto un ejemplo:
print "Numero de minutos desde medianoche: ", hora*60+minuto
También puedes poner expresiones arbitrarias a la derecha de una sentencia de asignación:
porcentaje = (minuto * 100) / 60
Puede que esta capacidad no resulte impactante ahora, pero ya verás otros ejemplos en los que la composición posibilita la expresión de cómputos complejos de una manera clara y concisa.
Advertencia: Existen límites relativos a la posición de ciertas expresiones. Por ejemplo, el lado izquierdo de una sentencia de asignación tiene que corresponder a un nombre de variable, y no a una expresión. Por lo tanto, lo que aparece a continuación no es válido: minuto+1 = hora.
Comentarios
A medida que los programas se alargan y complican, resultan más difíciles de leer. Los lenguajes formales son densos; a menudo, cuando vemos un trozo de código, nos cuesta deducir lo que hace o el por qué.
Por este motivo, es una buena idea añadir a tus programas notas que expliquen en un lenguaje natural lo que hace el programa. Estas notas se denominan comentarios, y se señalan con el símbolo #:
# calcula el porcentaje de la hora que ha transcurrido
porcentaje = (minuto * 100) / 60
En este caso, el comentario aparece en una línea aparte. También puedes poner comentarios al final de una linea:
porcentaje = (minuto * 100) / 60 # cuidado: división entera
Se ignora todo lo que aparece desde # hasta el final de la línea: no produce ningún efecto en el programa. El mensaje va dirigido al programador o futuros programadores que puedan utilizar ese código. En este caso, se le recuerda al lector el curioso funcionamiento de la división entera.
Comentarios
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |