Capítulo 4 Traducción http://inventwithpython.com/


Ir al Capítulo 5 – Chistes

Temas tratados en este capítulo:

  • sentencia import
  • Módulos
  • Argumentos
  • sentencia while
  • Condiciones
  • Bloques
  • Booleanos
  • Operadores de comparación
  • La diferencia entre = y ==.
  • sentencia if
  • La palabra clave break.
  • Funciones str() e int().
  • Función random.randint().

El Juego “Adivina el Número”

Vamos a hacer un juego de “Adivina el Número”. En este juego, la computadora “pensará” en un número aleatorio entre 1 y 20, y le pedirá al usuario que lo adivine. Usted sólo tiene seis oportunidades, pero la computadora le dirá si su suposición es demasiado alta o demasiado baja. Si adivina el número dentro de los seis intentos, usted gana.

Este es un buen juego para que usted pueda comenzar, ya que utiliza números aleatorios, ciclos, y la entrada del usuario en un programa bastante corto. A medida que escriba este juego, usted aprenderá cómo convertir los valores a diferentes tipos de datos (y por qué necesitaría hacerlo).

Debido a que este programa es un juego, vamos a llamar al usuario el jugador, pero la palabra “usuario” también sería correcta.

Muestra de la ejecución de “Adivina el Número”

Así es como el jugador verá nuestro juego cuando el programa se ejecute. El texto que ingresa el jugador está en negritas.

Hola! ¿Cómo te llamas?
Alberto
Bueno, Alberto, estoy pensando en un número entre 1 y 20.
Adivinalo.
10
Tu intento es demasiado alto.
Adivinalo.
2
Tu intento es demasiado bajo.
Adivinalo.
4
Buen trabajo, Alberto! Has adivinado mi número en 3 intentos!

Introduzca el código exactamente como aparece aquí, y luego guardelo haciendo clic en el menú File y luego en Save As. Dele un nombre al archivo, tal como adivina.py y a continuación, ejecutelo presionando la tecla F5. No se preocupe si no entiende el código por ahora, más adelante voy a explicarlo paso a paso.

Código Fuente de “Adivina el Número”

Aquí está el código fuente de nuestro juego “Adivina el Número”. Al introducir este código en el editor de archivos, asegúrese de prestar atención a la sangría de algunas de las líneas. Algunas líneas tienen cuatro u ocho espacios al inicio de ellas. Después de que usted haya escrito el código, guarde el archivo como adivina.py. Puede ejecutar el programa desde el editor de archivos presionando F5. Si ve un mensaje de error, compruebe que ha escrito el programa exactamente como está escrito aqui.

Si no desea escribir todo este código, puede descargarlo en inglés desde el sitio web original de este libro en la dirección URL http://inventwithpython.com/chapter4.

Nota Importante! Asegúrese de ejecutar este programa con Python 3, y no con Python 2. Los programas en este libro utilizan Python 3, obtendrá errores si intenta ejecutarlos con Python 2. Puede hacer clic en Help y luego en About IDLE para averiguar cual es la versión de Python que tiene.

adivina.py
Este código puede descargarse en ingles desde http://inventwithpython.com/guess.py
Si obtiene errores después de escribir este código, puede compararlo con el código del libro con la herramienta en línea desde http://inventwithpython.com/diff o por correo electrónico con el autor en al@inventwithpython.com (N. del T. unicamente en inglés)

  1. # Este es un juego de adivinar el número.
  2. import random
  3. numeroIntentos = 0
  4. print (‘¡Hola! ¿Cuál es tu nombre? ‘)
  5. miNombre = input()
  6. numero = random.randint(1, 20)
  7. print ( ‘Bien, ‘ + miNombre + ‘, estoy pensando en un número entre 1 y 20.’)
  8. while numeroIntentos < 6:
  9.     print ( “Adivinalo.) # Hay cuatro espacios antes de print
  10.     adivina = input()
  11.     adivina = int(adivina)
  12.     numeroIntentos = numeroIntentos + 1
  13.     if adivina < numero:
  14.         print (‘Tu intento es demasiado bajo.’) # Hay ocho espacios antes de print.
  15.     if adivina > numero:
  16.         print ( ‘Tu intento es demasiado alto. ‘ )
  17.     if adivina == numero:
  18.         break
  19. if adivina == numero:
  20.     numeroIntentos = str(numeroIntentos)
  21.     print ( ‘Buen trabajo,’ + miNombre + ‘! Has adivinado mi número en’ + numeroIntentos + ‘ intentos! ‘)
  22. if adivina != numero:
  23.     numero = str(numero)
  24.     print ( ‘No. El número que estaba pensando era ‘ + numero)

A pesar de que estamos entrando en nuestro código fuente en una nueva ventana del editor de archivos, podemos volver a la shell para entrar en las instrucciones individuales para ver lo que hacen. El intérprete de comandos interactivo shell es muy bueno para experimentar con diferentes instrucciones cuando no se está ejecutando un programa. Usted puede regresar al intérprete de comandos interactivo haciendo clic en su ventana o en su botón de la barra de tareas. En Windows o Mac OS X, la barra de tareas está en la parte inferior de la pantalla. En Linux la barra de tareas puede ser localizado en la parte superior de la pantalla.

Si el programa no funciona después de que usted lo ha escrito, compruebe si ha escrito el código exactamente como aparece en este libro. También puede copiar y pegar el código en línea en la herrmienta “diff” en http://inventwithpython.com/diff. esta le mostrará cómo el código es diferente del código fuente de este libro. En el editor de archivos, pulse Ctrl-A para “Seleccionar todo” el texto que has escrito, a continuación, pulse Ctrl + C para copiar el texto en el portapapeles. A continuación, pega este texto haciendo clic en el campo de texto de la herramienta de diferencias en el sitio web y haz clic en el botón “Compare”. (NOTA DEL TRADUCTOR: Esta herramienta solo funciona con el código en inglés) El sitio web le mostrará todas las diferencias entre el código y el código en este libro.

Hay una herramienta de diferencias para cada programa en este libro en el sitio web de http://inventwithpython.com.

La sentencia Import

Echemos un vistazo a cada línea de código a su vez, para ver cómo funciona este programa.

  1. # Este es un juego de adivinar el número.

Esta línea es un comentario. Los comentarios se introdujeron en nuestro programa Hola Mundo en el Capítulo 3. Recuerde que Python ignora todo lo que hay después del signo #. Esto sólo nos recuerda lo que hace el programa.

  1. import random

Esta es una sentencia import. Las sentencias no son funciones (note que ni en import ni en random hay paréntesis después de su nombre). Recuerde, las sentencias son instrucciones que realizan alguna acción, pero no se evalúan como un valor. Ya has visto las sentencias: las de asignación almacenan un valor en una variable (pero la sentencia no evalúa nada).

Si bien Python incluye muchas funciones incorporadas, algunas de las funciones existentes en programas separados llamados módulos. Los módulos son programas Python que contienen funciones adicionales. Nosotros usamos las funciones de estos módulos poniendo en nuestros programas la sentencia import. En este caso, estamos importando el módulo random .

La sentencia import se compone de la palabra clave import seguida por el nombre del módulo. En conjunto, la palabra clave y el nombre del módulo componen la sentencia. La línea 2 es, pues, una sentencia import que importa el módulo llamado random, que contiene varias funciones relacionadas con los números al azar. (Vamos a utilizar una de estas funciones más tarde en la computadora para obtener un número aleatorio que podamos adivinar.)

  1. numeroIntentos = 0

Esta línea crea una nueva variable llamada numeroIntentos. Vamos a almacenar el número de turnos que el jugador hace en esta variable. Dado que el jugador no ha hecho ningún intento hasta ahora, almacenamos el entero 0 aquí.

  1. print ( “¡Hola! ¿Cuál es tu nombre? “)
  2. miNombre = input()

Líneas 6 y 7 son las mismas que las líneas en el programa Hola Mundo que vimos en el capítulo 3. Los programadores de código a menudo reutilizan el código de sus otros programas cuando necesitan programar para hacer algo que ya han codificado antes.

La línea 6 es una llamada de función a la función print (). Recuerde que una función es como un mini-programa que nuestro programa ejecuta, y cuando nuestro programa llama a una función esta ejecuta el mini-programa. El código dentro de la función print () muestra la cadena que puso dentro de los paréntesis en la pantalla.

Cuando estas dos líneas finalizan su ejecución, la cadena que es el nombre del jugador será almacenada en la variable miNombre. (Recuerde, la cadena podría no ser realmente el nombre del jugador. Es justo la cadena que el jugador escribió. Las computadoras son tontas y sólo siguen sus programas sin importar qué.)

La función random.randint()

  1. numero = random.randint(1, 20)

En la línea 9 llamamos a una nueva función llamada randint (), y después almacenamos el valor de retorno en una variable llamadanumero . Recuerde que las llamadas a funciones son expresiones, ya que se evalúan a un valor. A este valor le llamamos valor de retorno de la llamada a la función.

Debido a que el randint () es proporcionado por el módulo random, debemos precederla con random. (No olvidar el periodo!) para decirle a nuestro programa que la function randint () está en el módulo random.

La función randint () devuelve un entero aleatorio entre (e incluyendo) los dos enteros que le demos. Aquí, le damos los números enteros 1 y 20 entre los paréntesis que siguen al nombre de la función (separados por una coma). El número entero aleatorio que randint () devuelve se almacena en una variable llamada numero -este es el número secreto que el jugador trata de adivinar.

Sólo por un momento, vuelve al shell interactivo e introduzca import random para importar el módulo random. A continuación, introduzca random.randint (1, 20) para ver lo que la llamada a la función evalúa. Debe devolver un número entero entre 1 y 20. A continuación, introduzca el mismo código de nuevo y la llamada a la función, probablemente devolverá un número entero diferente. Esto es porque cada vez que se llama la función randint (), devuelve un número aleatorio, como cuando se lanzan los dados usted obtendrá un número al azar en cada ocasión.

>>> import random
>>> Random.randint (1, 20)
12
>>> Random.randint (1, 20)
18
>>> Random.randint (1, 20)
3
>>> Random.randint (1, 20)
18
>>> Random.randint (1, 20)
7
>>>

Cada vez que queremos añadir azar a nuestros juegos, podemos utilizar la función randint (). Y usamos la aleatoriedad en la mayoría de los juegos. (Piense en los juegos de mesa que muchos utilizan como los dados.)

También puede probar diferentes gamas de números, cambiando los argumentos. Por ejemplo, escriba random.randint (1, 4) a obtener sólo números enteros entre 1 y 4 (incluyendo tanto 1 y 4). O intente random.randint (1000, 2000) para obtener números enteros entre 1000 y 2000. Aquí hay un ejemplo de llamada a la función random.randint () para ver cuáles son los valores que devuelve. Los resultados que se obtienen cuando se llama a la función random.randint () probablemente serán diferentes (que es al azar, después de todo).

>>> Random.randint (1, 4)
3
>>> Random.randint (1, 4)
4

>>> Random.randint (1000, 2000)
1294
>>> Random.randint (1000, 2000)
1585

>>>

Podemos cambiar el código del juego ligeramente para que el juego se comportan de manera diferente. Pruebe a cambiar la línea 9 y 10 esto:

  1. numero = random.randint(1, 20)
  2. print ( ‘Bien, ‘ + miNombre + ‘, estoy pensando en un número entre 1 y 20.’)

Por estas líneas:

  1. numero = random.randint(1, 100)
  2. print ( “Bien, ‘+ miNombre +”, estoy pensando en un número entre 1 y 100.)

Y ahora el equipo piensa en un número entero entre 1 y 100. Un cambio en la línea 9 va a cambiar el rango de números aleatorios, pero recuerda cambiar la línea 10 para que el juego también le diga al jugador la nueva gama en lugar de la antigua.

Llamar a funciones que están dentro de módulos

Por cierto, no olvide introducir random.randint (1, 20) y no sólo randint (1, 20), o la computadora no sabrá cómo buscar en el módulo random la función randint () y obtendrá un error como este:

>>> randint(1, 20)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
NameError: name ‘randint’ is not defined
>>>

Recuerde que su programa para funcionar necesita import random antes de llamar a la función random.randint (). Esta es la razón por la que las sentencias import random por lo general van al inicio del programa.

Pasar argumentos a las funciones

Los valores enteros entre los paréntesis en la llamada a función random.randint (1, 20) se llaman argumentos. Los argumentos son los valores que se pasan a una función cuando la función es llamada. Los argumentos le dicen a la función cómo comportarse. Al igual que los cambios de entrada del jugador de cómo se comporta nuestro programa, los argumentos son insumos para las funciones.

Algunas funciones requieren que usted le pase los valores cuando se las llama. Por ejemplo, mire estas llamadas a función:

input()
print ( ‘Hola’)
random.randint (1, 20)

La función input() no tiene argumentos, pero la llamada a la función print() tiene una y la llamada a función randint () tiene dos. Cuando tenemos más de un argumento, los separamos cada uno con comas, como se puede ver en este ejemplo. Los programadores dicen que los argumentos están delimitados (es decir, separados) por comas. Así es como la computadora sabe dónde un valor termina y empieza otro.

Si pasa muchos o muy pocos argumentos en una llamada a función, Python mostrará un mensaje de error, como se puede ver a continuación. En este ejemplo, el primero llama randint () con un único argumento (muy pocos), y luego llama randint () con tres argumentos (demasiados).

>>> Random.randint (1)
Traceback (most recent call last):
File “<pyshell#1>”, line 1, in <module>
random.randint (1)
TypeError: randint() takes exactly 3 positional arguments (2 given)
>>> Random.randint (1, 2, 3)
Traceback (most recent call last):
File “<pyshell#2>”, line 1, in <module>
random.randint (1, 2, 3)
TypeError: randint() takes exactly 3 positional arguments (4 given)
>>>

Observe que el mensaje de error dice que pasó de 2 y 4 argumentos en lugar de 1 y 3. Esto es así porque Python siempre pasa un extra, el argumento invisible. Este argumento está fuera del alcance de este libro, y usted no tiene que preocuparse por ello.

Bienvenida al jugador

Las líneas 10 y 12 dan la bienvenida al jugador y le dice sobre el juego, y luego empieza a dejar que el jugador adivine el número secreto. La línea 10 es bastante simple, pero la línea 12 se introduce un concepto avanzado (pero útil) llamado un bucle.

  1. print ( “Bien”, ‘ + miNombre + ‘, estoy pensando en un número entre 1 y 20.)

En la línea 10 la función print () da la bienvenida al jugador por por su nombre, y le dice que la computadora está pensando en un número aleatorio.

Pero espera – no digo que la función print () tiene sólo una cadena (string)? Puede parecer que allí hay más de una cadena Pero observa en la línea con cuidado. Los signos más concatenan las tres cadenas para evaluar a una sola cadena, y que es la tcadena que print () imprime la función. Podría verse como que las comas separan las cadenas, pero si se mira de cerca se ve que las comas están dentro de las comillas, y parte son parte de las cadenas.

Loops

La línea 12 tiene algo llamado una sentencia, while lo que indica el comienzo de un bucle while. Loops son partes de código que se ejecuta una y otra vez. Pero antes de que podamos aprender acerca de los bucles while, tenemos que aprender algunos conceptos de otros primero. Estos conceptos son los bloques, booleanos, operadores de comparación, las condiciones, y, por último, la sentencia while.

Bloques

Un bloque es una o más líneas de código agrupado junto con el nivel mínimo de sangría. Se puede decir que un bloque empieza y termina mirando a la sangría de la línea (es decir, el número de espacios en el frente de la línea).

Un bloque comienza cuando una línea se sangría de cuatro espacios. Cualquier línea siguiente que es también sangría de cuatro espacios es parte del bloque. Un bloque dentro de un bloque comienza cuando una línea se sangra con otros cuatro espacios (para un total de ocho espacios delante de la línea). El bloque termina cuando hay una línea de código con la misma sangría antes de que el bloque de empezar.

A continuación se muestra un diagrama del código con los bloques descritos y numerados. Los espacios se han llenado cuadrados de color negro para hacerlas más fáciles de contar.


Figura 4-1: Bloques y su sangría.

Por ejemplo, mire el código anterior. Los espacios han sido reemplazados por casillas negras para que sean más fáciles de contar. La línea 12 tiene un sangrado de cero espacios y no dentro de cualquier bloque. La línea 13 tiene una sangría de cuatro espacios. Dado que este sangrado es mayor que el sangrado de la línea anterior, podemos decir que un bloque nuevo ha comenzado. Líneas 14, 15, 17 y 19 también tienen cuatro espacios para el sangrado. Estas dos líneas tienen la misma cantidad de sangría que la línea anterior, por lo que sabemos que están en el mismo bloque. (No contamos líneas en blanco cuando miramos para el sangrado.)

La línea 20 tiene una sangría de ocho espacios. Ocho espacios de más de cuatro espacios, así que sabemos un bloque nuevo ha comenzado. Este es un bloque que está dentro de otro bloque.

Línea 22 sólo cuenta con cuatro espacios. De la línea antes de la línea 22 había un mayor número de espacios. Debido a que el sangrado haya disminuido, sabemos que el bloque ha terminado. La línea 22 se encuentra en la misma cuadra que las otras líneas, con cuatro espacios.

La línea 23 aumenta la sangría de ocho espacios, por lo que de nuevo un bloque nuevo ha comenzado.

Para recapitular, la línea 12 no es en ningún bloque. Líneas 13 a 23 en un solo bloque (marcado con el círculo 1). La línea 20 se encuentra en un bloque en un bloque (marcado con un círculo 2). Y la línea 23 es la única línea en otro bloque en un bloque (marcado con un círculo 3).

Cuando se escribe código en IDLE, cada letra es la misma anchura. Puede contar el número de letras por encima o por debajo de la línea para ver cuántos espacios se han puesto por delante de esa línea de código.

En esta figura, las líneas de código dentro del cuadro 1 están todos en el mismo bloque, y los bloques 2 y 3 están dentro del bloque 1. Bloque 1 se sangra con al menos cuatro espacios desde el margen izquierdo, y los bloques 2 y 3 son sangría ocho espacios desde el margen izquierdo. Un bloque puede contener una sola línea. Tenga en cuenta que los bloques 2 y 3 son sólo una línea de cada uno.

El tipo de datos Boolean

El tipo de datos Boolean tiene sólo dos valores: Verdadero o Falso. Estos valores son mayúsculas y minúsculas y no son valores de cadena, en otras palabras, usted no pone un “carácter de comillas alrededor de ellos. Vamos a utilizar valores booleanos con los operadores de comparación para formar condiciones. (Ver más abajo.)

Operadores de comparación

En la línea 12 de nuestro programa, la línea de código que contiene la sentencia, mientras que:

  1. mientras que numeroIntentos <6:
Los operadores de comparación Tabla 2-1:.
Operador Regístrate Nombre del operador
< Menos de
> Mayor que
<= Inferior o igual a
> = Mayor o igual a
== Igual a
!= No es igual a

La expresión que sigue a la palabra clave al mismo tiempo (numeroIntentos <6) contiene dos valores (el valor en el numeroIntentos variable y el valor entero 6) conectado por un operador (el signo <, la “menos de” signo). El signo <se llama un operador de comparación.

El operador de comparación se utiliza para comparar dos valores y evaluar a un Verdadero o Falso valor booleano. Una lista de todos los operadores de comparación está en la tabla 2-1.

Condiciones

Una condición es una expresión que combina dos valores con un operador de comparación (como <o>) y se evalúa como un valor booleano. Una condición es sólo otro nombre para una expresión que se evalúa como verdadero o falso. Usted encontrará una lista de otros operadores de comparación en la tabla 2-1.

Condiciones siempre se evalúan como un valor booleano, ya sea verdadero o falso. Por ejemplo, la condición en nuestro código, numeroIntentos <6 pide “es el valor almacenado en numeroIntentos menos que el número 6?” Si es así, entonces la condición se evalúa como True. Si no, la condición se evalúa como False.

En el caso de nuestro programa de adivinar el número, en la línea 4 que almacena el valor 0 en numeroIntentos. Ya que 0 es menor de 6, esta condición se evalúa el valor booleano de True. Recuerde, una condición es sólo un nombre para una expresión que utiliza los operadores de comparación como <o!=.

Experimente con booleanos, operadores de comparación, y condiciones

Introduce las siguientes expresiones en el shell interactivo para ver los resultados de Boole:

>>> 0 <6
Cierto.
>>> 6 <0
Falso.
>>> 50 <10
Falso.
>>> 10 <11
Cierto.
>>> 10 <10
Falso.

La condición 0 <6 devuelve el valor booleano True porque el número 0 es menor que el número 6. Pero debido a que 6 no es inferior a 0, la condición 6 <0 se evalúa como False. 50 no sea inferior a 10, así que 50 <10 es falso. 10 es inferior a 11, por lo que 10 <11 es True.

Pero lo que alrededor de 10 <10? ¿Por qué evaluar a Falso? Es falso, porque el número 10 no es menor que el número 10. Son exactamente el mismo tamaño. Si Alice era la misma altura que Bob, que no quiso decir que Alice es más alto que Pedro o que Alice es más corta que la de Bob. Ambas de estas sentencias sería falso.

Prueba a introducir algunas condiciones al interior del depósito para ver cómo funcionan estos operadores de comparación:

>>> 10 == 10
Cierto.
>>> 10 == 11
Falso.
>>> 11 == 10
Falso.
10.10.
Falso.
10.= 11
Cierto.
>>> ‘Hola’ == ‘Hola’
Cierto.
>>> ‘Hola’ == ‘Good bye’
Falso.
>>> ‘Hola’ == ‘Hola’
Falso.
>>> ‘Good bye’!Hola!
Cierto.

Observe la diferencia entre el operador de asignación (=) y la “igual a” operador de comparación (==). La igualdad (=) el signo se utiliza para asignar un valor a una variable, y el equivalente a (signo ==) se utiliza en expresiones para ver si dos valores son iguales. Es fácil de utilizar uno accidentalmente cuando nos referimos a utilizar el otro, así que ten cuidado de lo que escribe pulg

Dos valores que son diferentes tipos de datos no siempre son iguales entre sí. Por ejemplo, puede ingresar el siguiente en el intérprete de comandos interactivo:

>>> 42 == ‘Hola’
Falso.
>>> 42!Hola!
Cierto.

Bucles con while

La sentencia, mientras que marca el comienzo de un ciclo. A veces en nuestros programas, queremos que el programa para hacer algo una y otra vez. Cuando la ejecución llega a una sentencia, mientras, se evalúa la situación junto a la palabra clave al mismo tiempo. Si la condición se evalúa como True, la ejecución se mueve en el interior del bloque de tiempo. (En nuestro programa, mientras que el bloque comienza en la línea 13.) Si la condición se evalúa como False, la ejecución se mueve todo el camino pasado, mientras que el bloque. (En nuestro programa, la primera línea después del bloque, mientras que es la línea 28.)

  1. mientras que numeroIntentos <6:


Figura 4-2: La condición de bucle while.

Figura 4-2 muestra cómo la ejecución de los flujos en función de la condición. Si la condición se evalúa como True (que lo hace por primera vez, porque el valor de numeroIntentos es 0), la ejecución, mientras que entrar en el bloque en la línea 13 y seguirá bajando. Una vez que el programa llega a la final del bloque, mientras que, en lugar de bajar a la línea siguiente, pero vuelve a crecer, mientras que a la línea de instrucción (línea 12). A continuación, re-evalúa la condición, y si es cierto que entramos en el bloque, mientras que otra vez.

Así es como funciona el bucle. Mientras que la condición es True, el programa mantiene la ejecución del código dentro del bloque, mientras que en varias ocasiones hasta llegar a la final del bloque y al mismo tiempo la condición es falsa. Y, hasta numeroIntentos es igual o superior a 6, vamos a seguir bucle.

Piense en la sentencia, mientras que decir “, mientras que esta condición se cumple, siga recorriendo el código de este bloque”.

Usted puede hacer el juego más difícil o más fácil de cambiar el número de turnos que el jugador recibe. Todo lo que tienes que hacer es cambiar esta línea:

  1. mientras que numeroIntentos <6:

en esta línea:

  1. mientras que numeroIntentos <4:

… y ahora el único jugador recibe cuatro suposiciones en lugar de seis conjeturas. Al establecer la condición de numeroIntentos <4, nos aseguramos de que el código dentro del bucle sólo se ejecuta en cuatro ocasiones en lugar de seis. Esto hace el juego mucho más difícil. Para hacer el juego más fácil, establecer como condición para numeroIntentos <8 o numeroIntentos <10, lo que hará que el bucle se ejecuta un par de veces más que antes y aceptar más respuestas de los jugadores.

Por supuesto, si quitamos la línea 17 en total entonces el numeroIntentos no aumentaría y la condición siempre sería verdad. Esto daría al jugador un número ilimitado de intentos.

Las conjeturas Player

Líneas 13 a 17 pedirá al siguiente jugador que adivinar lo que el número secreto y se les permite entrar en su conjetura. Nosotros guardamos esta suposición en una variable, y luego convertir el valor de la cadena en un valor entero.

  1.     print ( “Adivina.) # Hay cuatro espacios en frente de la impresión.
  2.     Supongo = entrada ()

El programa ahora se nos pide una conjetura. Nos tipo en nuestra suposición, y que el número se almacena en una variable llamada adivinar.

Conversión de cadenas en enteros con la función Int ()

  1.     Supongo = int (supongo)

En la línea 15, que llamamos una nueva función llamada int (). La función Int () toma un argumento. La entrada () la función devuelve una cadena de texto que el jugador escribió. Sin embargo, en nuestro programa, queremos un entero, no una cadena. Si el jugador entra en 5, como su conjetura, la entrada () función devuelve el valor de la cadena “5” y no el valor entero 5. Recuerde que Python considera la cadena “5” y el entero 5 a diferentes valores. Así que la función Int () tendrá el valor de cadena que se le da y devolver el formulario valor entero de la misma.

Vamos a experimentar con la función Int () en el shell interactivo. Pruebe a escribir lo siguiente:

>>> Int (’42 ‘)
42
>>> Int (42)
42
>>> Int ( ‘hola’)

Traceback (most recent call last):
Archivo “<pyshell#4>”, línea 1, en <module>
int ( ‘cuarenta y dos)
ValueError: inválido literal for int () con base 10: ‘Hola’
>>> Int ( «cuarenta y dos)

Traceback (most recent call last):
Archivo “<pyshell#5>”, línea 1, en <module>
int ( ‘cuarenta y dos)
ValueError: inválido literal for int () con base 10: «Cuarenta y dos”
>>> Int ( ’42’)
42
>>> 3 + int (‘2 ‘)
5

Podemos ver que la int (’42 ‘) llamada devolverá el valor entero de 42 años, y que int (42) hará lo mismo (aunque es una especie de sentido de convertir un entero a un entero). Sin embargo, aunque usted puede pasar una cadena a la función Int (), usted no sólo puede pasar cualquier cadena. Por ejemplo, pasar ‘hola’ a int () (como lo hacemos en el int ( ‘hola’) llamada) resultará en un error. La cadena se pasa a int () debe estar compuesto de números.

El entero se pasa a int () también debe ser numérico, en lugar de texto, por lo que int ( «cuarenta y dos»), también produce un error. Dicho esto, la función Int () es un poco indulgente, si nuestra cadena tiene espacios en cada lado, todavía se ejecutará sin error. Esta es la razón por la int ( ’42’) las obras de llamada.

El 3 + int (‘2 ‘) muestra una expresión que se añade un número entero de 3 a el valor de retorno de int (‘2’) (que evalúa a 2, así). La expresión se evalúa como 3 + 2, que a continuación se evalúa a 5. Así que, aunque no podemos añadir un número entero y una cadena (3 + ‘2 ‘nos mostraría un error), podemos añadir un número entero a una cadena que se ha convertido en un entero.

Recuerde, de nuevo en nuestro programa en la línea 15 de la variable supongo que originariamente el valor de la cadena de lo que el jugador escribió. Le sustituye el valor de cadena almacenada en adivinar con el valor entero devuelto por la función Int (). Esto se debe a que más tarde se compara adivinar el jugador con el número aleatorio del equipo se le ocurrió. , Sólo podemos comparar dos valores enteros para ver si uno es mayor (es decir, superior) o menos (es decir, más baja) que la otra. No podemos comparar un valor de cadena con un valor entero para ver si uno es mayor o menor que el otro, incluso si ese valor de la cadena es numérica, tales como “5”.

En nuestro juego de adivinar el número, si los tipos de jugadores en algo que no es un número, entonces la llamada a la función int () resultará en un error y el programa se bloqueará. En los otros juegos de este libro, vamos a añadir algo más de código para comprobar las condiciones de error como este y dar al jugador una nueva oportunidad para entrar en una respuesta correcta.

Tenga en cuenta que llamar int (supongo) no cambia el valor de la variable de adivinar. La int código (supongo) es una expresión que se evalúa la forma de valor entero de la cadena almacenada en la variable de adivinar. Debemos asignar este valor de retorno de adivinar el fin de cambiar el valor de adivinar a un entero con esta línea completa: adivinar = int (supongo)

El incremento de variables

  1.     numeroIntentos = numeroIntentos + 1

Una vez que el jugador ha tomado una conjetura, queremos aumentar el número de adivinanzas que nos recuerda el jugador que toma.

La primera vez que entramos en el bloque de bucle, numeroIntentos tiene el valor de 0. Python tendrá este valor y se añade 1 a la misma. 0 + 1 1. Luego Python almacenar el nuevo valor de 1 a numeroIntentos.

Piense en la línea 17 en el sentido de “la variable numeroIntentos debe ser uno más de lo que ya es”.

Cuando añadimos una a un valor, los programadores dicen que están incrementando el valor (porque es cada vez mayor por uno). Cuando se le resta uno de un valor, estamos decrementar el valor (porque es una reducción de un uno). La próxima vez que el bloque de bucles bucle alrededor, numeroIntentos tendrá el valor de 1 y se incrementa con el valor 2.

Guess es el reproductor es demasiado baja?

Líneas 19 y 20 de comprobar si el número que el jugador adivinar es menor que el número aleatorio secreto que el equipo se inventó. Si es así, queremos decirle al jugador que su suposición era demasiado baja, imprima este mensaje en la pantalla.

si las sentencias

  1.     si <adivinar número:
  2.          print ( “Su conjetura es demasiado baja.”) # Hay ocho espacios en frente de la impresión.

La línea 19 se inicia una instrucción if con la palabra clave, si. Junto a la palabra clave es si la condición. La línea 20 se inicia un nuevo bloque (se puede decir, porque ha aumentado la sangría de la línea 19 a la línea 20.) El bloque que sigue a la palabra clave si se llama si-bloque. Una sentencia if se utiliza si sólo desea un poco de código que se ejecutará si alguna condición es True. La línea 19 tiene una instrucción if con la condición de adivinar <número. Si la condición se evalúa como True, entonces el código en el bloque si es ejecutada. Si la condición es falsa, entonces el código en el bloque-si se omite.


Figura 4-3: si y mientras las sentencias.

Al igual que la sentencia, mientras que, si la sentencia también tiene una palabra clave, seguida de una condición, y luego un bloque de código. Ver la Figura 4-3 para una comparación de las dos sentencias.

La sentencia de si funciona casi de la misma manera como una sentencia, mientras que, también. Pero a diferencia del bloque, mientras que, la ejecución no salta de nuevo a la sentencia de si al final de la cuadra si. Simplemente continúa hasta la siguiente línea. En otras palabras, si los bloques no se repetirá.

Si la condición es True, se ejecutan todas las líneas dentro del bloque if. La línea sólo si dentro de este bloque en la línea 19 es una impresión () llamada a la función.

Si el entero que el jugador entra es menor que el entero aleatorio del equipo pensado, el programa muestra su suposición es demasiado baja. Si el entero el jugador entra es igual o mayor que el entero aleatorio (en cuyo caso, la condición junto a la palabra clave si hubiera sido falso), entonces este bloque se han saltado.

Adivina el jugador es demasiado alto?

Líneas 22 a 26 en nuestro programa de verificación, si creo que el jugador es demasiado grande o exactamente igual al número secreto.

  1.     si> Supongo número:
  2.          print ( “Su conjetura es demasiado alto.”)

Si creo que el jugador es mayor que el entero aleatorio, si entramos en el bloque que sigue a la sentencia if. La impresión () línea le dice al jugador que su suposición es demasiado grande.

Dejando Loops temprano con la instrucción break

  1.     == adivinar si el número:
  2.          romper

Esta condición, si los controles sentencia para ver si la conjetura es igual al número entero aleatorio. Si es así, entramos en la línea 26, si el bloque que le sigue.

La línea dentro del bloque-si es una sentencia de ruptura que le dice al programa que de inmediato saltar del bloque, mientras que a la primera línea después del final del tiempo-bloque. (La instrucción break no se molesta en verificar de nuevo, mientras que la condición de bucle, sólo se rompe de inmediato.)

La sentencia break es la palabra clave romper por sí mismo, sin condición o colon (: signo).

Si creo que el jugador no es igual al número entero aleatorio, no romper el bloque, mientras que, llegaremos a la parte inferior del bloque, mientras que de todos modos. Una vez que llegamos a la parte inferior del bloque, mientras que, el programa se repetirá de nuevo a la parte superior y otra vez, la condición (numeroIntentos <6). Recuerde que después de la numeroIntentos = numeroIntentos + 1 línea de código que se ejecuta, el nuevo valor de la numeroIntentos 1. Debido a que 1 es inferior a 6, entramos en el bucle de nuevo.

Si el jugador sigue adivinar demasiado alto o demasiado bajo, el valor de numeroIntentos cambiará a 2, luego 3, luego 4, luego 5, y 6. Si el jugador adivinar el número correctamente, la condición en el caso de adivinar == sentencia número sería verdad, y nos habría ejecutado la sentencia break. De lo contrario, seguimos en bucle. Pero cuando numeroIntentos ha almacenado el número 6, mientras que la condición de sentencia es falsa, ya que 6 no es inferior a 6. Porque si bien la condición de la sentencia es falsa, no vamos a entrar en el bucle y en lugar de ir al final del bloque de tiempo.

El resto de líneas de código se ejecuta cuando el jugador ha terminado de adivinar (ya sea porque el jugador adivinar el número correcto, o porque el jugador salió corriendo de conjeturas). La razón por la que el jugador salió del bucle anterior determinará si se gana o se pierde el juego, y el programa mostrará el mensaje apropiado en la pantalla para cada caso.

Compruebe si el won Player

  1. == adivinar si el número:

A diferencia del código de la línea 25, esta línea no tiene sangría, lo que significa que el bloque, mientras que ha terminado y esta es la primera línea, mientras que fuera del bloque. Cuando salimos del bloque de tiempo, lo hicimos bien porque el estado, mientras que la sentencia era falsa (cuando el jugador se queda sin conjeturas) o si se ejecuta la instrucción de ruptura (cuando el jugador adivina el número correctamente). Con la línea 28, de verificación de nuevo para ver si el jugador adivinado correctamente. Si es así, si entramos en el bloque que sigue.

  1.     numeroIntentos str = (numeroIntentos)
  2.     print ( ‘Buen trabajo,’ miNombre + + ‘! Lo has adivinado mi número en el ‘numeroIntentos + +’ conjeturas ‘)

Líneas 29 y 30 están dentro del bloque if. Ellos sólo se ejecutarán si el número de la condición en el caso de sentencia en la línea 28 era cierto (es decir, si el jugador adivinó correctamente el ordenador).

En la línea 29 (que es similar a la conjetura = int (supongo) el código de la línea 15), llamamos a la nueva función str (), que devuelve la forma de cadena de un argumento. Nosotros usamos esta función porque queremos cambiar el valor entero en numeroIntentos en su versión en cadena porque sólo podemos usar cadenas en las llamadas a imprimir ().

La línea 29 le dice al jugador que ha ganado, y cuántas conjeturas que las tomó. Anuncio en esta línea que se modifica el valor numeroIntentos en una cadena porque sólo podemos añadir cadenas a otras cadenas. Si fuéramos a tratar de añadir una cadena a un entero, el intérprete de Python mostrará un error.

Compruebe si el reproductor de Lost

  1. si creo!= Número:

En la línea 32, que usamos el operador de comparación!= Con la sentencia de si la condición para decir “no es igual a”. ” Si el valor de adivinar el jugador es inferior o superior (y por lo tanto, no es igual a) el número elegido por el equipo, entonces esta condición se evalúa como True, y entramos en el bloque que sigue a esta sentencia, si en la línea 33.

Líneas 33 y 34 están dentro del bloque si, y sólo se ejecutarán si la condición es True.

  1.     str = número (número)
  2.     print ( ‘No. El número que pensaba era “+ número)

En este bloque, le decimos al jugador lo que el número es porque no adivinar correctamente. Pero primero tenemos que guardar la versión de serie de serie como el nuevo valor de número.

Esta línea también en el interior del bloque si, y sólo se ejecuta si la condición era cierto. En este punto, hemos llegado al final del código, y el programa termina.

¡Felicidad! Acabamos de programar nuestro juego real primero!

Resumen: ¿Qué es exactamente la programación?

Si alguien te pregunta, “¿Qué es exactamente la programación de todos modos?” ¿Qué podrías decir a ellos? La programación es sólo la acción de escribir código para programas, es decir, la creación de programas que pueden ser ejecutadas por una computadora.

“Pero ¿qué es exactamente un programa?” Cuando usted ve a alguien usando un programa de ordenador (por ejemplo, jugar nuestro juego Guess The Number), todo lo que ves es un texto que aparece en la pantalla. El programa decide qué texto exacto para mostrar en la pantalla (que se llama el producto), sobre la base de sus instrucciones (es decir, el programa) y en el texto que el jugador pulse en el teclado (que se llama la entrada). El programa tiene instrucciones muy específicas sobre lo que el texto para mostrar al usuario. Un programa es sólo una colección de instrucciones.

“¿Qué tipo de instrucciones?” Hay sólo unos pocos tipos diferentes de instrucciones, de verdad.

Expresiones, que se componen de valores relacionados por los operadores. Las expresiones son evaluadas por un solo valor, como 2 + 2 se evalúa como 4 o ‘Hello’ + ” + ‘Mundo’ se evalúa como ‘Hola Mundo’. Las llamadas a funciones son también parte de las expresiones, ya que se evalúan como un valor único a sí mismos, y este valor puede ser conectado por los operadores a otros valores. Cuando las expresiones son junto a los si y mientras las palabras clave, también pedimos a las condiciones.

Las sentencias de asignación, que simplemente almacenar valores en variables, de modo que podamos recordar los valores más adelante en nuestro programa.

si, y romper son las sentencias de control de flujo, ya que decidir que se ejecutan instrucciones. El flujo normal de la ejecución de un programa es para iniciar en la parte superior y ejecutar cada instrucción de bajar uno por uno. Pero estos estados de flujo de control puede hacer que el flujo de instrucciones de salto, el bucle más instrucciones, o salir de bucles. Las llamadas a funciones también cambiar el flujo de ejecución por saltar al comienzo de una función.

La función print (), que muestra el texto en la pantalla. Además, la entrada () puede obtener el texto del usuario a través del teclado. Esto se llama I / O (pronunciado como las letras, “ojo-oh”), porque se trata de la entrada y salida del programa.

Y eso es todo, sólo los cuatro cosas. Por supuesto, hay muchos detalles acerca de esos cuatro tipos de instrucciones. En este libro usted aprenderá acerca de los nuevos tipos de datos y los operadores, sentencias de control de flujo, además de nuevo si, al mismo tiempo y de descanso, y varias funciones nuevas. Hay también diferentes tipos de I / O (entrada desde el ratón, y dar salida de sonido y los gráficos e imágenes en lugar de sólo texto.)

Para la persona que utiliza sus programas, que en realidad sólo se preocupan de que este último tipo, I / O. El usuario escribe en el teclado y luego ve las cosas en la pantalla o escucha cosas de los altavoces. Pero para el equipo para averiguar lo que las vistas para mostrar y lo que suena a jugar, se necesita un programa, y los programas son simplemente un grupo de instrucciones que el programador haya escrito.

Una página Web para el Programa de Seguimiento de

Si tiene acceso a Internet y un navegador Web, usted puede ir a la página web de este libro en http://inventwithpython.com/traces encontrará una página que rastrea a través de cada uno de los programas de este libro. Siguiendo con la traza línea por línea, podría ser más claro lo que el Guess el programa Número hace.


Figura 4-4: La página web de rastreo.

El lado izquierdo de la página web muestra el código fuente, y la línea de relieve es la línea de código que está a punto de ser ejecutado. Se ejecuta esta línea y pasar a la siguiente línea haciendo clic en el botón “Siguiente”. También puede ir un paso atrás haciendo clic en el botón “anterior”, o ir directamente a un paso escribiéndola en el cuadro blanco y haga clic en el “Jump” botón.

En la parte derecha de la página web, hay tres secciones. El “actual valores de las variables” sección se muestra cada variable que se ha asignado un valor, junto con el valor en sí. La sección “Notas” le dará una pista sobre lo que está sucediendo en la línea señalada. El “resultado del programa” sección muestra la salida del programa, y la entrada que se envía al programa. (Esta página web entra automáticamente en texto para el programa cuando el programa le pide.)

Así que a cada una de estas páginas web y haga clic en los botones “Siguiente” y “Anterior” para rastrear a través del programa como lo hicimos anteriormente.

Ir al Capítulo 3 – Cuerdas Ir al Capítulo 5 – Chistes
Anuncios

Publicado el 29 febrero 2012 en inventwithpython, Programación, Python y etiquetado en , , , . Guarda el enlace permanente. Deja un comentario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: