![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
El valor es uno de los elementos fundamentales (como por ejemplo una letra o un n�mero) que manipula un programa. Los valores que hemos visto hasta el momento son 2 (el resultado de sumar 1 + 1) y Hola, mundo.
Estos valores son de distintos tipos: 2 es un entero y Hola, mundo es una cadena, llamada as� porque contiene una "cadena" de letras. Usted (y el int�rprete) puede identificar las cadenas porque est�n encerradas entre comillas.
La sentencia print tambi�n funciona con enteros:
>>> print 4
4
Si no est� seguro del tipo que tiene un determinado valor, puede pregunt�rselo al int�rprete de Python.
>>> type("Hola, mundo")
<type 'string'>
>>> type(17)
<type 'int'>
No es sorprendente que las cadenas sean de tipo string (cadena en ingl�s) y los enteros sean de tipo int (por integer en ingl�s). De forma menos obvia, los n�meros con decimales (separados por medio de un punto en ingl�s) son de tipo float debido a la representaci�n de estos n�meros en el formato llamado de coma flotante (floating-point).
>>> type(3.2)
<type 'float'>
�Qu� ocurre con los valores como "17" y "3.2"? Parecen n�meros, pero est�n entre comillas como las cadenas.
>>> type("17")
<type 'string'>
>>> type("3.2")
<type 'string'>
Son cadenas.
Cuando escriba un entero largo, podr�a estar tentado de usar comas entre grupos de tres d�gitos, como en 1,000,000. �ste no es un entero legal en Python, pero es una expresi�n legal:
>>> print 1,000,000
1 0 0
En fin, no era eso lo que quer�amos. Python interpreta 1,000,000 como una lista de tres n�meros que debe imprimir. As� que recuerde no insertar comas en sus enteros. * Note
Una de las caracter�sticas m�s potentes de los lenguajes de programaci�n es la capacidad de manipular variables. Una variable es un nombre que hace referencia a un valor.
La sentencia de asignaci�n crea nuevas variables y les asigna un valor:
>>> mensaje = "Que onda?"
>>> n = 17
>>> pi = 3.14159
Este ejemplo muestra tres asignaciones. La primera de ellas asigna el valor "Que onda?" a una variable nueva, de nombre mensaje. La segunda le da el valor entero 17 a n, y la tercera le da el valor de n�mero en coma flotante 3.14159 a pi.
Una forma habitual de representar variables sobre el papel es escribir el nombre con una flecha se�alando al valor de la variable. Este tipo de representaci�n se llama diagrama de estado, ya que muestra en qu� estado se halla cada una de las variables (consid�relo como el "estado de �nimo" de la variable"). El siguiente diagrama muestra el efecto de las tres sentencias de asignaci�n anteriores:
La sentencia print tambi�n funciona con variables.
>>> print mensaje
"Que onda?"
>>> print n
17
>>> print pi
3.14159
En cada caso, el resultado es el valor de la variable. Las variables tambi�n tienen tipo. De nuevo, podemos preguntar al int�rprete lo que 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 se refiere.
Como norma general, los programadores eligen nombres significativos para sus variables: esto permite documentar para qu� se usa la variable.
Los nombres de las variables pueden tener una longitud arbitraria. Pueden estar formados por letras y n�meros, pero deben comenzar con una letra. Aunque es aceptable usar may�sculas, por convenci�n no lo hacemos. Si lo hace, recuerde que la distinci�n es importante: Bruno y bruno son dos variables diferentes.
El gui�n bajo (_) tambi�n es legal y se utiliza a menudo para separar nombres con m�ltiples palabras, como mi_nombre o precio_del_cafe_colombiano.
Si intenta darle a una variable un nombre ilegal, obtendr� un error de sintaxis.
>>> 76trombones = "gran desfile"
SyntaxError: invalid syntax
>>> mas$ = 1000000
SyntaxError: invalid syntax
>>> class = "Curso de Programaci�n 101"
SyntaxError: invalid syntax
76trombones es ilegal porque no comienza por una letra. mas$ es ilegal porque contiene un car�cter ilegal, el signo del d�lar. Pero �qu� tiene de malo class?
Resulta que class es una de las palabras reservadas de Python. El lenguaje usa las palabras reservadas para definir sus reglas y estructura, y no pueden usarse como nombres de variables.
Python tiene 28 palabras reservadas:
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
Tal vez quiera mantener esta lista a mano. Si el int�rprete se queja de alguno de sus nombres de variable, y usted no sabe por qu�, compruebe si est� en esta lista.
Una sentencia es una instrucci�n que puede ejecutar el int�rprete de Python. Hemos visto dos tipos de sentencias: print y la asignaci�n.
Cuando usted escribe una sentencia en la l�nea de comandos, Python la ejecuta y muestra el resultado, si lo hay. El resultado de una sentencia print es un valor. Las sentencias de asignaci�n no entregan ning�n resultado.
Normalmente un gui�n contiene una secuencia de sentencias. Si hay m�s de una sentencia, los resultados aparecen de uno en uno tal como se van ejecutando las sentencias.
Por ejemplo, el gui�n
print 1
x = 2
print x
prsenta la salida
1
2
De nuevo, la sentencia de asignaci�n no produce ninguna salida.
Una expresi�n es una combinaci�n de valroes, variables y operadores. Si teclea una expresi�n en la l�nea de comandos, el int�rprete la eval�a y muestra el resultado:
>>> 1 + 1
2
Un valor, y tambi�n una variable, se considera una expresi�n por s� mismo.
>>> 17
17
>>> x
2
Para complicar las cosas, evaluar una expresi�n no es del todo lo mismo que imprimir un valor.
>>> mensaje = "Que onda?"
>>> mensaje
"Que onda?"
>>> print mensaje
Que onda?
Cuando Python muestra el valor de una expresi�n, usa el mismo formato que usted usar�a para introducir un valor. En el caso de las cadenas, eso significa que incluye las comillas. Pero la sentencia print imprime el valor de la expresi�n, lo que en este caso es el contenido de la cadena.
En un gui�n, una expresi�n sin m�s es una sentencia v�lida, pero no hace nada. El gui�n
17
3.2
"Hola, mundo"
1 + 1
no presenta ninguna salida. �C�mo cambiar�a usted el gui�n para mostrar los valores de estas cuatro expresiones?
Los operadores son s�mbolos especiales que representan c�lculos simples, como la suma y la multiplicaci�n. Los valores que usa el operador se llaman operandos.
Las siguientes expresione son legales en Python y su 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 de los par�ntesis para el agrupamiento, se usan todos de la misma forma que en matem�ticas. El asterisco (*) es el signo de multiplicaci�n y ** el s�mbolo para exponenciaci�n.
Cuando aparece el nombre de una variable en el lugar de un operando, se sustituye con su valor antes de realizar la operaci�n.
La suma, resta, multiplicaci�n y exponenciaci�n hacen lo esperado, pero la divisi�n le puede sorprender. La operaci�n que sigue tiene un resultado inesperado:
>>> minuto = 59
>>> minuto/60
0
El valor de la variable minuto es 59, y 59 dividido entre 60 es 0.98333 y no 0. El motivo de la discrepancia reside en que Python est� llevando a cabo una divisi�n de enteros.
Cuando ambos operandos son enteros, el resultado ha de ser tambi�n un entero; por convenci�n, la divisi�n de enterios simpre se redondea a la baja, incluso en casos como estos en los que el siguiente entero est� muy pr�ximo.
Una alternativa posible en este caso es el c�lculo de un porcentaje y no el de una fracci�n:
>>> minuto*100/60
98
De nuevo se redondea el resultado a la baja, pero al menos ahora la respuesta es aproximadamente correcta. Otra alternativa es la divisi�n de coma flotante, que veremos en el Cap�tulo 3.
Cuando aparece m�s de un operador en una expresi�n, el orden de evaluaci�n depende de las reglas de precedencia. Python sigue las mismas reglas de precedencia que los propios matem�ticos para sus operaciones matem�ticas. Los ingleses usan el acr�nimo PEMDAS como regla parea recordar el orden de las operaciones:
En general no es posible realizar operaciones matem�ticas con cadenas, incluso si las cadenas parecen n�meros. Las siguientes sentencias son ilegales (suponiendo que mensaje sea de tipo string)
mensaje-1 "Hola"/123 mensaje*"Hola" "15"+2
Es curioso que el operador + funcione con cadenas, aunque no haga exactamente lo que usted esperar�a. Para cadenas, el operador +representa la concatenaci�n, lo que significa que se unen los dos operandos uni�ndolos extremo con extremo. Por ejemplo:
fruta = "pl�tano"
bizcochoBueno = " pan de leche"
print fruta + bizcochoBueno
La salida del programa es pl�tano pan de leche. El espacio delante de pan es parte de la cadena, y es necesario para introducir el espacio que separa las cadenas concatenadas.
El operador * tambi�n funciona con cadenas; lleva a cabo la repetici�n. Por ejemplo 'Chiste'*3 es 'ChisteChisteChiste'. Uno de los operandos ha de ser una cadena, el otro ha de ser un entero.
Por un lado, esta interpretaci�n de + y * cobra sentido por analog�a con la suma y la multimplicaci�n. Igual que 4*3es equivalente a 4+4+4, esperamos que 'Chiste'*3 sea lo mismo que 'Chiste'+'Chiste'+'Chiste', y as� es. Por otro lado, la concatenaci�n y la repetici�n son de alguna manera muy diferentes de la adici�n y la multiplicaci�n de enteros. �Puede encontrar una propiedad que tienen la suma y la multiplicaci�n de enteros y que no tengan la concatenaci�n y la repetici�n de cadenas?
Hasta ahora hemos examinado los elementos de un programa (variables, expresiones y sentencias) por separado, sin hablar de c�mo combinarlos.
Una de las caracter�sticas m�s �tiles de los lenguajes de programaci�n es su capacidad de tomar peque�os bloques de construcci�n y ensamblarlos. Por ejemplo, sabemos c�mo sumar n�meros y c�mo imprimirlos; resulta que podemos hacer las dos cosas a un tiempo:
>>> print 17 + 3
20
En realidad, no debemos decir "al mismo tiempo", puesto que en realidad la suma tiene que realizarse antes de la impresi�n, pero la cuesti�n es que cualquier expresi�n relacionada con n�meros, cadenas y variables puede usarse dentro de una sentencia print. Ya hemos visto un ejemplo de ello:
print "N�mero de minutos desde la medianoche: ", hora*60+minuto
Y tambi�n puede poner expresiones arbitrarias en la parte derecha de una sentencia de asignaci�n:
porcentaje = (minuto * 100) / 60
Esta capacidad puede no resultar muy sorprendente, pero ya veremos otros ejemplos donde la composici�n hace posible expresar c�lculos complejos con limpieza y brevedad.
ATENCI�N: Hay l�mites al lugar donde pueden usarse ciertas expresiones. Por ejemplo, la parte izquierda de una sentencia de asignaci�n tiene que ser un nombre de variable, no una exrpresi�n. Por tanto es ilegal lo siguiente: minute+1 = hour.
Conforme los programas van creciendo de tama�o y complic�ndose, se vuelven m�s complicados de leer. Los lenguajes formales son densos y con frecuencia es dif�cil observar un trozo de c�digo y averiguar lo que hace, o por qu� lo hace.
Por ello es una buena idea a�adir notas a su programa que expliquen, en un lenguaje natural, qu� hace el programa. Estas notas se llaman comentarios y se marcan con el s�mbolo #:
# calcula el porcentaje de la hora que ha pasado ya
porcentaje = (minuto * 100) / 60
En este caso, el comentario aparece en una l�nea propia. Tambi�n puede poner comentarios al final de otras l�neas:
porcentaje = (minuto * 100) / 60 # ojo: divisi�n de enteros
Todo lo que va del # al final de la l�nea se ignora (no tiene efecto sobre el programa). El mensaje est� destinado al programador, o a futuros programadores que podr�an tener que usar el c�digo. En este caso avisa al lector sobre el sorprendente comportamiento de la divisi�n de enteros.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |