6 nov. 2016

Python 10. Colores en inglés y Juego de cartas


Más programas:

¿Sabes los colores en inglés?
Este programa sirve para saber si sabemos los colores en inglés. Va preguntando cómo se dice cada uno de los colores y nosotros le debemos responder con la palabra en inglés
# Colores en inglés
colores=['negro','blanco','rojo','verde','amarillo','azul','rosa','gris','naranja']
colors=['black','white','red','green','yellow','blue','pink','grey','orange']

print ('¡A ver qué tal sabes los colores en inglés!')
aciertos=0
for i in range(0,9):
    print('¿Cómo se dice en inglés '+colores[i]+' (escribe en minúsculas)?')
    dice_jugador=input()
    if dice_jugador==colors[i]:
       print ('¡Correcto!')
       aciertos=aciertos+1
    else:
       print ('¡Has fallado!')

print ('Has acertado '+ str(aciertos)+' de 9 intentos')


Juego de cartas. La carta de más valor
En este juego participan 2 jugadores.
El ordenador pregunta el nombre de los 2 jugadores.
Genera aleatoriamente una carta para cada jugador.
Va diciendo que jugador ha ganado en cada tirada y espera 5 segundos entre cada tirada.
Repite la tirada 5 veces,
Al final dice cuántas veces ha ganado cada jugador.

#Este juego es el de la carta más valiosa
#juegan 2 jugadore y gana el mejor de 5 tiradas

import random
import time
print ('¿Como se llama el jugador 1?')
nombre0=input()
print ('¿Como se llama el jugador 2?')
nombre1=input()
gana0=0
gana1=0
x=1
while x<6:
   x=x+1
   número=[0,0]
   palo=[0,0]
   númeroletras=[0,0]
   paloletras=[0,0]
   for i in range(0,2):
      número[i]=random.randint(1,10)
      palo[i]=random.randint(1,4)
      if número[i]==1:
         númeroletras[i]='el dos'
      if número[i]==2:
         númeroletras[i]='el cuatro'
      if número[i]==3:
         númeroletras[i]='el cinco'
      if número[i]==4:
         númeroletras[i]='el seis'
      if número[i]==5:
         númeroletras[i]='el siete'
      if número[i]==6:
         númeroletras[i]='la sota'
      if número[i]==7:
         númeroletras[i]='el caballo'
      if número[i]==8:
         númeroletras[i]='el rey'
      if número[i]==9:
         númeroletras[i]='el tres'
      if número[i]==10:
         númeroletras[i]='el as'
      if palo[i]==1:
         paloletras[i]='oros'
      if palo[i]==2:
         paloletras[i]='copas'
      if palo[i]==3:
         paloletras[i]='espadas'
      if palo[i]==4:
         paloletras[i]='bastos'

   print(nombre0+' ha sacado '+númeroletras[0]+' de '+paloletras[0]+'. '+nombre1+' ha sacado '+númeroletras[1]+' de '+paloletras[1]);
   if número[0]>número[1]:
       gana0=gana0+1
       print ('Ha ganado '+ nombre0)
   if número[1]>número[0]:
       gana0=gana0+1
       print ('Ha ganado '+ nombre1)
   if número[0]==número[1]:
       print ('No gana nadie')
   time.sleep(5)
print (nombre0+ ' ha ganado '+ str(gana0)+' veces y '+nombre1+' ha ganado '+ str(gana1)+' veces')

Ejercicios

  1. Modifica el programa de los colores para que calcule el % de aciertos. Debe también indicar en los colores que se contesten de manera errónea lo que ha dicho el usurio y cual sería la respuesta correcta.
  2. Modifica el programa de los colores para que sirva para otro tipo de preguntas. Por ejemplo capitales de países, ríos que pasan por una ciudad,...
  3. Modifica el programa de los colores para que el ordenador haga preguntas que tengan 4 posibles respuestas (a, b, c, y d) y el jugador debe indicar la correcta.
  4. Crea una macro para jugar a piedra papel o tijera. Habrá 2 jugadores. Deberán jugar 5 partidas.
  5. Modifica la macro para jugar a piedra papel o tijera. En este caso habrá un único jugador que puede elegir lo que quiere y juega contra el ordenador. Deberán jugar 6 partidas.

Python 09. Generador de frases (Matrices y funciones)


En este apartado vamos a aprender:
  • A definir funciones
  • Matrices o arrays
  • A gestionar el tiempo con time.sleep(x)
  • Escribir en la misma linea con la orden print('texto',end='')
  • Gestión de bucles con continue
Antes de comenzar con el programa principal vamos a ver un poco como funcionan las matrices y las funciones:

Las matrices:
Los arrays o matrices son listas de elementos a las que ponemos un nombre para poder trabajar con ellas. Vamos a ver un ejemplo con la matriz días
Si tecleamos en la shell de Python lo siguiente:

>>>días=['lunes','martes','miércoles','jueves','viernes']
>>>días
['lunes', 'martes', 'miércoles', 'jueves', 'viernes']
>>>días[0]
'lunes'
>>>días[4]
'viernes'

Cuando definimos una matriz, automáticamente se le asigna a cada item o elemento de la matriz un número de orden o índice (index). Este índice empieza a contar por 0, por lo que el primer elemento de la matriz será matriz[0] y el último siempre será matriz[número de elementos de la matriz - 1]

Se puede operar con los elementos de una matriz como se operaba con las cadenas
>>>días[1]+días[3]
'martesjueves'

Una orden que se puede aplicar a matrices es len que sirve para obtener la longitud (número de elementos) de una matriz

 >>>len(días)
5

Las funciones:
Una función es una parte del código que se define, se guarda y se ejecuta cuando el programador desea. Son como programas dentro de otros programas.
Se suelen emplear cuando el programador va a utilizar un grupo de instrucciones en varias ocasiones durante el programa.
Por ejemplo: En un videojuego se puede definir la función "sumar puntuación" que haría la suma de 10 puntos y emitiría un sonido; y que sería llamada cada vez que el jugador mata una nave enemiga.
Una función se define empleando la sentencia def nombrefunción (algo).
Vamos a hacer un ejemplo para entender como funciona:
#función de ejemplo, para quedar bien
def quitarEdad(añosDeMás):
    añosDeMenos=int(añosDeMás)-10
    return añosDeMenos

print('¿Cuántos años tienes?')
edad=input()

edadNueva=quitarEdad(edad)
print('Pues no aparentas más de '+str(edadNueva))

Definimos la función quitarEdad y la asignamos un atributo que es añosDeMás y que se coloca entre paréntesis.
En la siguiente línea lo que hacemos es realizar una operación que resta 10 a la edad original (añosDemás) y el valor se lo asigna a la variable añosDeMenos.
La línea return índica que debe volver a la línea donde fue llamada y que el valor de salida será añosDeMenos.
Lo que hace esta función es transformar el número que se le ponga en otro 10 años menor.
Para llamar a la función se utiliza la orden edadNueva=quitarEdad(edad)

Introducción del programa de generar frases:
El programa va a generar frases aleatorias a partir de unas matrices de palabras que le indicamos.

Código:
1. # Generador automático de frases
2. import random
3. import time
4. personas=['Juan','Luis','Irene','Kevin','Adriana']
5. verbos=['ama','odia','no entiende','insulta','sonrie','escucha']
6. def escogePalabra(palabraLista):
7.    índice=random.randint(0,len(palabraLista)-1)
8.    return palabraLista[índice]
9.
10. otrojuego='sí'
 11.  
12. while otrojuego=='sí':  
13.     persona=escogePalabra(personas)
14.     persona2=escogePalabra(personas)
15.     verbo=escogePalabra(verbos)
16.     print('Voy a decirte algo de '+persona)
17.     time.sleep(1)
18.     print()
19.     print(persona+ ' '+verbo+ ' a ', end='')
20.     time.sleep(2)
21.     print(persona2)
22.     time.sleep(2)
23.     print()
24.     print('¿Quieres que te diga otra cosa? (Escribe sí o no)')
25.     otrojuego=input()
26.     if otrojuego=='sí':
27.        continue
28.     if otrojuego=='no':
29.        break
30.
31. print('¡Hasta luego!') 

El programa en el editor de archivos se verá así:

El resultado

Por partes:
Con import importamos dos módulos. El módulo random genera números aleatorios ( ya lo conocemos) y el módulo time sirve para incorporar retardos en los programas.
2. import random
3. import time

Utilizamos 2 matrices. En este caso tenemos las matrices personas y verbos.
4. personas=['Juan','Luis','Irene','Kevin','Adriana']
5. verbos=['ama','odia','no entiende','insulta','sonrie','escucha']

Creamos una función que se llama escogePalabra y que servirá para elegir una de las palabras de la lista.
En la línea 7 generamos un número que esté entre 0 y el número de palabras de la lista menos 1. Esto es porque, como ya hemos visto, las palabras de las matrices empiezan por 0 y el último elemento es un número menor que la cantidad de elementos.
En la línea 8 le decimos a la función que envíe un valor de retorno a la línea que ha llamado a la función de un valor de elemento [índice] de la matriz palabralista.

6. def escogePalabra(palabraLista):
7.    índice=random.randint(0,len(palabraLista)-1)
8.    return palabraLista[índice]

En la línea 10 declaramos una variable que se llama otrojuego y le asignamos inicialmente el valor de 'sí'
10. otrojuego='sí'

En la línea 12 abrimos un bucle con la orden while que se mantendrá mientras la variable otrojuego='sí'
12. while otrojuego=='sí':  

En la líneas 13,14 y 15 llamamos a la función que hemos definido, escogePalabra, Le asignamos un atributo que es personas en la 13 y 14 y verbos en la 15. En cada una de estas líneas la función se pone a funcionar. Se puede decir que el programa trae la función a donde la hemos llamado para que se ejecute y continúa en el mismo sitio con el valor de retorno que ha generado (persona, persona2 y verbo).
13.     persona=escogePalabra(personas)
14.     persona2=escogePalabra(personas)
15.     verbo=escogePalabra(verbos)

En la línea 16 imprimimos una línea de información. En ella se escribe el nombre de la primera persona que se ha generado aleatoriamente.
La línea 17 se genera una espera con la orden time.sleep(1). Esto se hace con el módulo time que importamos al principio y permanece en espera el tiempo en segundos que se ponga dentro del paréntesis)
La orden print() introduce una línea en blanco como resultado. Deja espacio entre la anterior línea y la siguiente.
16.     print('Voy a decirte algo de '+persona)
17.     time.sleep(1)
18.     print()

Las siguientes líneas van introduciendo la frase aleatoria con retardos de 2 segundos para darle emoción.
Hay que observar la linea 19 donde introducimos un nuevo atributo end='' que lo que hace es que la siguiente cosa que se imprima se haga en la misma línea y no en la línea siguiente como es habitual.
Como se ve la frase es del estilo de: persona+verbo+' a '+persona2
19.     print(persona+ ' '+verbo+ ' a ', end='')
20.     time.sleep(2)
21.     print(persona2)
22.     time.sleep(2)
23.     print()

En la línea 24 se le pregunta al jugador si quiere que el ordenador le diga otra frase
Lo que el usuario diga se mete en la variable otrojuego.
A continuación con ordenes if se comprueba que ha dicho el jugador.
Si dice que si se aplica una nueva sentencia continue que hace que el programa debe volver al comienzo del bucle while.
Si dice que no se acabara el bucle y continua. También continuará si el usuario se equivoca al teclear e introduce algo que no sea sí (por ejemplo es fácil equivocarse si no se pone el sí con tilde)
24.     print('¿Quieres que te diga otra cosa? (Escribe sí o no)')
25.     otrojuego=input()
26.     if otrojuego=='sí':
27.        continue
28.     if otrojuego=='no':
29.        break

Finalmente el ordenador se despide
31. print('¡Hasta luego!') 

Ejercicios:
  1. Cambia los valores de los personas y verbos de las matrices del programa.
  2. Pon las órdenes necesarias para evitar que persona y persona2 sean la misma,
  3. Dibuja el flujograma del programa. Utiliza por ejemplo el programa Draw de Libreoffice. Tienes una explicación de los flujogramas aquí
  4. Diseña un programa que permita pasar de dolares a euros y viceversa utilizando funciones.
    • Debe preguntar si quieres pasar de euros a dolares o de dolares a euros.
    • El resultado debe tener 2 decimales (orden round(número, decimales))
    • Ten cuidado con los números y las cadenas. Recuerda la orden str(número)
    • Después de hacer el cálculo nos debe decir que si queremos hacer otro.
    • Aquí ves el resultado que tiene que dar:



Python 08. Quiniela (FOR)


Vamos a ver a continuación una nueva orden: La orden FOR

El programa imprimirá una linea de información y a continuación generará el resultado (1, X, 2) de los quince partidos de la quiniela. (1 significa que gana el equipo de casa, X es empate y 2 es que gana el equipo visitante)

Código:

#Generar el resultado de la quiniela

print ('Este es el resultado de la quiniela. ¡Seguro que acierto!')

import random

for i in range(1,16):
    numero=random.randint(1,3)
    if numero ==1:
        resultado='1'
    if numero ==2:
        resultado='2'
    if numero ==3:
        resultado='X'
    print('Partido '+ str(i)+'. El resultado será '+resultado)

El programa en el editor de archivos se verá así:


Flujograma:


Por partes:
La orden print() imprime en pantalla lo que se encuentra entre comillas dentro del paréntesis como ya sabemos
print ('Este es el resultado de la quiniela. ¡Seguro que acierto!')

La función import random la llamamos para generar números aleatorios
import random

La orden for i in range (1,16) repetirá todo lo que viene debajo en este caso 15 veces y cada vez que lo haga el valor de la variable i se irá incrementando. La primera vez la i valdrá 1, la siguiente 2 y así sucesivamente. El valor 16 no lo hace solo hace hasta menos de 16.
La orden numero=random.randint(1,3) genera números que pueden ser 1, 2 o 3 y se los asigna a la variable número.
Las ordenes if asignan los integer: 1, 2 y 3 respectivamente a los strings: 1, 2 y X
La orden print del final imprime en pantalla el número del partido y el resultado. teniendo en cuenta que saldrá 15 veces por la orden for.

for i in range(1,16):
    numero=random.randint(1,3)
    if numero ==1:
        resultado='1'
    if numero ==2:
        resultado='2'
    if numero ==3:
        resultado='X'
    print('Partido '+ str(i)+'. El resultado será '+resultado)

Ejercicios:

  1. Modifica el programa para que salgan el doble de 1 que de X y 2 ya que habitualmente es más común que gane el equipo de casa.
  2. Diseña un programa que sirva para que el jugador pueda hacer cuantas tiradas de dados quiera, con dados del número de caras que el jugador desee. Después el programa deberá informar al jugador de la puntuación obtenida en cada tirada. El programa deberá saludar al jugador y dirigirse a él por su nombre". Este sería el resultado del programa:



Python 07. Edad y piropeador (if...and, if...else)


En este apartado vamos a profundizar un poco en las ordenes condicionales, ampliando lo que conocemos de la orden if y  usando la orden else.

Vamos a hacer un programa en el que se preguntará la edad al jugador y se creará una frase con el nombre del usuario y una palabra diferente en función del rango en que se encuentre la edad.
1. #Un programa para la edad
2. 
3. print ('Hola, ¿Cómo te llamas?')
4. nombre=input()
5. 
6. print('Hola, '+nombre+', ¿Cuantos años tienes?')
7. edad=input()
8. edad=int(edad)
9. 
10. if edad<13:
11.     print(nombre+', eres un niño')
12. if edad>=13 and edad<18:
13.     print(nombre+', eres un adolescente')
14. if edad>=18 and edad<30:
15.     print(nombre+', eres un joven')
16. if edad>=30 and edad<65:
17.     print(nombre+', eres un adulto')
18. if edad>=65:
19.     print(nombre+', eres un jubilado')


El resultado deberá ser algo coma esto:

Por partes:

Las lineas 1 a 4 ya sabemos  que son la presentación y la introducción del nombre por parte del usuario.

1. #Un programa para la edad
2. 
3. print ('Hola, ¿Cómo te llamas?')
4. nombre=input()

Las lineas 6-8 también te serán conocidas, empleamos exactamente el mismo código que en el apartado anterior, Es importante  ejecutar la función edad=int(edad), que sirve para transformar el valor introducido por el jugador en un número entero. El contenido que se obtiene de la función input() siempre es una cadena (string), esto quiere decir que aunque se pongan números el ordenador los tratará como texto. Si no hacemos a transformación de cadena a entero (integer), Python no será capaz de ejecutar operaciones matemáticas con el valor introducido.

6. print('Hola, '+nombre+', ¿Cuantos años tienes?')
7. edad=input()
8. edad=int(edad)

Las lineas 10-19 son las que contienen el núcleo del programa. Compara la edad introducida por el usuario con valores que nosotros le definimos y, en función de ellos, dan un resultado. la orden and me permite establecer rangos. Al poner and se deben cumplir las dos condiciones (la que está antes y la de después del and)


10. if edad<13:
11.     print(nombre+', eres un niño')
12. if edad>=13 and edad<18:
13.     print(nombre+', eres un adolescente')
14. if edad>=18 and edad<30:
15.     print(nombre+', eres un joven')
16. if edad>=30 and edad<65:
17.     print(nombre+', eres un adulto')
18. if edad>=65:
19.     print(nombre+', eres un jubilado')


If quiere decir "si", en la manera de "pensar" de Python funciona, más o menos, del siguiente modo:

Python va escogiendo entre dos valores de manera escalonada, y nosotros tenemos que definirle esos valores. 

Otro ejemplo.
En este caso tenemos el programa piropeador para hombres y mujeres.


1. #piropeador para hombre y mujer
2. 
3. print ('Hola, ¿Cómo te llamas?')
4. nombre=input()
5. 
6. print('Hola, '+nombre+', ¿Eres un hombre o una mujer?')
7. sexo=input()
8. 
9. if sexo=='hombre':
10.     print(nombre+', eres muy guapo')
11. else:
12.     print(nombre+', eres muy guapa')



Else quiere decir algo como "en cualquier otro caso", y se aplica cuando no se cumple la condición que se ha indicado en el if
Lo que hace la orden es:
if  <condición>:
    <hacer algo si se da la condición>
else:
     <hacer otra cosa si no se da la condición>

Ejercicios:

  1. Modifica los rangos y mensajes del programa de la edad.
  2. Añade un mensaje que salga si la edad es mayor de 100 años y que diga "Eres Matusalén"
  3. Haz un programa que de mensajes (eres un poco pequeño, tienes una estatura media, eres muy alto) sobre la altura que se introduzca
  4. Modifica el programa del apartado anterior (Python 6) para que, en vez de dar la pista de "demasiado alto" o "demasiado bajo", dé la pista "caliente", "templado" o "frío" según esté de cerca el número introducido respecto al número secreto? Seguramente necesitarás de la orden abs(x), que devuelve el valor absoluto (sin tener en cuenta el signo) de x.

Python 06. Adivina el número


Python 06: Adivina el número


En este apartado vamos a hacer un programa que se basa en lo aprendido anteriormente y lo lleva un paso más allá. Vamos a aplicar la función randint para que el ordenador escoja un número entre 1 y 20 y daremos añ usuario seis intentos para conseguir adivinarlo. Ademas, el ordenador aplicará comparaciones para darle pistas al jugador y decirle si se pasa por arriba o por abajo del número secreto.

El código del programa:

1. #Este es un juego de adivinar el número
2. import random
3.
4. intentos=0
5.
6. print('¡Hola! ¿Cuál es tu nombre?')
7. nombre = input()
8.
9. numero=random.randint(1,20)
10. print('Bueno, '+nombre+', piensa un número entre 1 y 20.')
11.
12. while intentos<6:
13.     print ('¡Adivínalo! Tienes 6 intentos')
14.     adivina=input()
15.     adivina=int(adivina)
16.
17.     intentos=intentos+1
18.   
19.     if adivina<numero:
20.         print ('¡Demasiado pequeño!')
21.
22.     if adivina>numero:
23.         print('¡Demasiado grande!')
24.
25.     if adivina==numero:
26.         break
27.
28. if adivina==numero:
29.     intentos=str(intentos)
30.     print('Fabuloso, '+nombre+', acertaste el número en '+intentos+' intentos. ¡Estarás orgulloso-a!')
31.
32. if adivina!=numero:
33.     numero=str(numero)
34. print('¡Qué fatalidad '+nombre+' ! Yo estaba pensando en el número '+numero)
Guarda el programa con el nombre adivinar número.py y pruébalo

El resultado:

Si escribiches todo correctamente, el resultado tiene que dar algo como esto:



Por partes:
La primera y segunda lineas  son un comentario y la sentencia de importación del módulo random. Como siempre, dejamos lineas en blanco para facilitar la lectura.

1. #Este es un juego de adivinar el número
2. import random
3.

En la linea 4 declaramos una variable intentos a la que asignamos el valor 0. Esta variable la creamos porque necesitamos llevar la cuenta de los intentos que hace el jugador, para que sólo le permitamos 6.

 4. intentos=0

Las líneas 6 y 7 son la presentación

6. print('¡Hola! ¿Cuál es tu nombre?')
7. nombre = input()

En la linea 9 hacemos que el ordenador piense un número entre 1 y 20 con
random.randint(1,20) y guardamos el resultado en la variable numero. En la linea 10 imprimimos el saludo y la propuesta de juego.

9. numero=random.randint(1,20)
10. print('Bueno, '+nombre+', piensa un número entre 1 y 20.')

El bucle while:
La orden while que aparece en la linea 12 da comienzo a un bucle, una parte de código que se ejecuta siempre que se cumpla una condición. "While", en inglés, significa "mientras que", o sea que la linea le indica al ordenador que "mientras que intentos sea menor que 6, haz todo lo que viene debajo. Si intentos es igual o mayor que 6, sáltate todo lo que viene debajo hasta la linea break"



12. while intentos<6:
 
La sentencia while compare el valor de intentos con el entero 6, se ejecuta el bucle (lineas 13-27) mientras esta condición sea True.

Las lineas 13 y 14 imprimen la cadena ¡Adivínalo! recogen lo que el jugador introduzca en la variable adivina.

13.     print ('¡Adivínalo! Tienes 6 intentos')
14.     adivina=input()

La linea 15 sirve para convertir el tipo de variable. Ya explicamos que, para Python, no el lo mesmo el entero 6 que la cadena '6', y cuando el jugador introduce un valor
input(), este se almacenado como una cadena. Con la función int() convertimos el valor introducido por el jugador en adivina en un entero. 
(Por ejemplo si el jugador introduce el valor 15, la función input() almacenará como una cadena '15'. Con la función int() convertimos esa cadena '15' en el entero 15.)

15.     adivina=int(adivina)

La linea 17 hace lo que se conoce como establecer un incremento de variable o contador. Es decir, que cada vez que el ordenador ejecute esta instrucción, la variable
intentos va aumentando su valor en 1. Esto lo hacemos para llevar la cuenta de cuantas veces ha tenido el jugador que adivinar el número. Si llega a 6 intentos le daremos el mensaje de consolación.

17.     intentos=intentos+1
 

Las lineas 19-26 emplean la sentencia if, que ya conoces del apartado anterior, para evaluar si el número introducido por el jugador es mayor, menor o igual que el número secreto. Primeir evaluará la condición que ponemos en primero lugar, y si esta es True, el programa ejecutará la instrucción correspondiente. Si la condición es False pasará al siguiente if, y repetirá a operación. 
Si acertamos, la liña 25 evaluará un True, y la instrucción que se ejecuta será break. Esto indica al programa que se debe salir del bucle en el que estábamos, sin necesidad de esperar que el número de intentos sea 6 o mayor, como establecía la condición while intentos<6 que abría el bucle.

19.     if adivina<numero:
20.         print ('¡Demasiado pequeño!')
21.
22.     if adivina>numero:
23.         print('¡Demasiado grande!')
24.
25.     if adivina==numero:
26.         break

Después de que se ejecute la instrucción
break, o de que la condición while intentos<6 evalúe un False, salimos del bucle y llegamos a la linea 28. En esta linea comprobamos si el número introducido por el jugador (adivina) es igual que el número secreto. Si es así, en la linea 29, convertimos en cadena el entero de intentos mediante la función str(intentos), que funciona igual que explicamos antes con int() pero a la inversa. Hacemos esto porque a función print(), en Python, sólo admite variables que almacenen cadenas. 
La linea 30 imprimirá el mensaje de felicitación para el jugador/a.
Las lineas 32, 33 y 34 funcionan de manera semejante, pero reconociendo el valor introducido como diferente del número secreto y proporcionando un mensaje de consolación.

28. if adivina==numero:
29.     intentos=str(intentos)
30.     print('Fabuloso, '+nombre+', acertaste el número en '+intentos+' intentos. ¡Estarás orgulloso-a!')
31.
32. if adivina!=numero:
33.     numero=str(numero)
34. print('¡Qué fatalidad '+nombre+' ! Yo estaba pensando en el número '+numero)

Ejercicios:
  1. Cambia los parámetros del juego, para que el número elegido esté entre 5 y 30, que se permita un número mayor o menor de intentos y cambia también los mensajes de felicitación y consolación.

  2. Introduce las instrucciones precisas para que el programa informe al jugador/a de cuantos intentos lleva y cuantos le quedan, cada vez que este quiera adivinar.

  3. Introduce una variable puntos que al comienzo tenga un valor determinado y que, cada vez que el jugador falle, se le reste una cantidad concreta de puntos. Al final del programa, el mensaje de felicitación o consolación debe informarle de cuantos puntos ha obtenido.

  4. Haz un programa que calcule el índice de masa corporal (IMC) del jugador/a? 
  • Tendrá que pedir el peso en Kg y la altura en m, y luego calcular el índice con la fórmula: IMC=Kg/(m*m). 
  • Tienes que tener muy en cuenta las conversiones de tipos de datos con las funciones str() e int()
  • Ten en cuenta también que como el peso y el IMC van a tener decimales debemos utilizar la orden float() que sirve para indicar que es un número con decimales.
  •  Debes hacer que el IMC salga con sólo 2 decimales; utiliza para ello la orden round(cantidad, nº de decimales)


5 nov. 2016

Python 05. Cara o cruz


Python 05. Cara o cruz

Vamos a hacer un programa sencillo para elegir entre cara o cruz. Nos servirá para aprender cosas muy importantes para los juegos.

El código del programa:

Deberías escribirlo directamente en  file editor (no solo copiar y pegar). Recuerda no escribir los números de linea y copiar todo el resto tal como está.

1. #Este juego es para adivinar si ha salido cara o cruz
2.
3. import random
4.
5. numero=random.randint(1,2)
6.
7. if numero==1:
8.    lado='cara'
9. if numero==2:
10.    lado='cruz'
11.
12. print ('¿Hola, como te llamas?')
13. nombre=input()
14.
15. print (nombre+', ¿quieres cara o cruz?')
16. respuesta=input()
17.
18. if respuesta==lado:
19.    print('¡Muy bien, '+nombre+', ha salido '+lado+', has acertado!')
20.
21. if respuesta!=lado:
22.    print('¡Mala suerte, '+nombre+', ha salido '+lado+', has perdido!')
Cando lo tengas escrito, recuerda que debes guardar el archivo con extensión .py y para probalo pulsar F5 o hacer clic en Run- Run Module.

El resultado:

Si todo va bien, el resultado será algo como esto:

¿Hola, como te llamas?
Pedro
Pedro, ¿quieres cara o cruz?
cara
¡Muy bien, Pedro, ha salido cara, has acertado!
Por partes:

La primera linea es un comentario que indica lo que vamos a hacer

1. #Este juego es para adivinar si ha salido cara o cruz

La segunda linea (y otras más) las dejamos en blanco para separar un poco las distintas partes del programa y facilitar así su lectura.

La tercera linea es una sentencia import . Las sentencias no son funciones, son instrucciones que hacen algo pero que no nos dan ningún valor como resultado. Con import, lo que hacemos es traer un Módulo, que son programas que vienen con Python y tienen funciones adicionales. Para aligerar el programa no se incorporan por defecto, así que hay que traerlas con import. En realidad, lo que tienes que saber de momento es que, si quieres introducir azar en tu programa, deberás hacer un import random al principio del programa.

 3. import random

En la linea 5 creamos una variable numero, en la que almacenamos el resultado de una función perteneciente al módulo random, que es randint(x,y). Randint nos va a dar un integer, un número entero, que estará entre el valor de x u el valor de y. En este caso, solo podrán ser los valores 1 o 2.
Por ejemplo si queremos un entero  entre  1 y 10 deberiamos poñer random.randint(1,10), o si lo queremos entre  10 y 15 random.randint(10,15)

5. numero=random.randint(1,2)
En las lineas de la 7  a la10 empleamos la sentencia if para facer una comparación. Es decir, cogemos dos valores y comprobamos si se cumple una determinada condición que deseamos. Dependiendo de si se cumple o no, haremos que el programa haga una cosa u otra. En este caso:

7. if numero==1:
8.    lado='cara'
9. if numero==2:
10.    lado='cruz'
Aquí lo que hacemos es crear una variable lado y asignarle una cadena 'cara' ou una cadena 'cruz' dependiendo de si el número que ha salido es 1 o 2. Lo hacemos así porque es más fácil aplicar azar con randint a números que a cadenas. 
Tamvién es importante resaltar la sangria, que es el espacio que dejamos al principio de cada linea. Es muy importante respetarla, ya que, aparte de servir para leer y entender más fácilmente el programa, el file editor puede dar errores si no la aplicamos bien. De momento, recuerda que después de cada if la siguiente linea debe tener un espacio de tabulación.
Observa que ponemos dos signos =, ya que solo empreamos uno cuando queremos asignar una variable.

A continuación, las lineas 12 y 13 saludamos al jugador y le pedimos el nombre, para guardalo como nombre, como ya vimos antes.

12. print ('¿Hola, como te llamas?')
13. nombre=input()
Las lineas 15 y 16 preguntan al jugador si quiere cara o cruz, y almacenamos el resultado en la variable respuesta. El jugador tendrá que escribir exactamente 'cara' o 'cruz', si deja un espacio, confunde una letra, o incluso si pone una mayúscula, el programa le dirá que fallo. Más adelante aprenderemos mejores maneiras de hacer este programa para que no pasen esas cosas, pero de momento es mejor no complicárnos.

15. print (nombre+', ¿quieres cara o cruz?')
16. respuesta=input()

Las lineas de la 18 a la 22 vuelven a hacer una comparación, esta vez para ver si lo que ha escogido el jugador (respuesta) es igual que la variable lado que le asignamos al número que salió de la función randint. En el caso de que sea igual le daremos un mensaje de felicitación, en caso de que sea diferente (el signo != quere decir "no igual a") le daremos un aviso de que ha perdido. En los dos mensajes, incluímos la variable lado para que el jugador vea lo que sha salido

18. if respuesta==lado:
19.    print('¡Muy bien, '+nombre+', ha salido '+lado+', has acertado!')
20.
21. if respuesta!=lado:
22.    print('¡Mala suerte, '+nombre+', ha salido '+lado+', has perdido!')
Flujograma:



Ejercicios:

  1. Cambia los mensajes de bienvenida y de despedida.
  2. Modifica el programa para que haya una tercera opción "de canto".
  3. Haz un programa para adivinar la tirada de un dado. (Necesitas la sentencia variable=int(variable), que convierte un dato de tipo string en un dato de tipo integer  y/o la orden str(variable) que convierte un integer en una cadena (string)

Python 04. Cadenas


Hasta ahora, hemos trabajado principalmente con números. En Python llamamos a los números enteros (integer) y  a los números decimales (floating point number). Ten en cuenta que la diferencia entre Python, por ejemplo, de 5 a 5.0, teniendo en cuenta que el primer número es entero (número entero) y el segundo decimal (número de coma flotante).

Ahora trabajamos con otros datos, tales como cadenas o strings. Llamamos strings a cualquier trozo de texto, que puede incluir cualquier carácter, y definir encerrar entre comillas simples (') (tecla al lado del 0).
 >>> 'hola'
'hola'
También podemos almacenar cadenas de variables, prueba a hacerlo:
 >>> nombre='Luis'
>>> nombre
'Luis'
Puede poner cualquier carácter dentro de la cadena, el único problema es incluir la comilla simple ('),
También se pueden realizar operaciones con cadenas (cuidado con los espacio):
 >>> 'buenos'+'días'
'buenosdías'
>>> 'buenos '+'días'
'buenos días'
IMPORTANTE:
El editor IDLE:
Hasta ahora estabamos escribiendo directamente en la shell, que interpreta cada instrucción tan pronto como se pulsa la tecla Intro, y necesitamos otra forma de interactuar que permite múltiples instrucciones y guardarlas para no tener que escribir cada vez nuestro programa. Para ello, vamos al menú File y seleccionamos New window, así que se abrirá una ventana que es el editor de archivos o file editor.




¡Hola mundo!
En cualquier lenguajes de programación el primer programa que se suele hacer es uno que haga  aparecer "¡Hola mundo!" o "Hello World!" en la pantalla. También queremos hacer eso. 

Debes escribir en el editor de archivos. ¡No ponga los números de línea, son para orientarte!


1. #Este programa te pregunta por el nombre.
2. print ('Hola Mundo!')
3. print ('¿Cómo te llamas?')
4. nombre= input()
5. print ('Encantado de conocerte, '+nombre)

En cuanto tengas introducido el código, dale a File-Save As y ponle de nombre HolaMundo.py. Para voltar a abrirlo en otra ocasión deberás ir a File-Open, y buscarlo en la carpeta correspondiente.

Una vez guardado, para ver como funciona debes ir al menú Run-Run Module o apretar F5. Te preguntará el nombre y debes responderle.



Como funciona el programa "HolaMundo"

El ordenador entiende cada linea que escribimos como un paso de una receta, e irá paso por paso ejecutando todas nuestras ordenes hasta llegar al final. El orde en que el programa sigue las instruccións se llama flujo de ejecución.

Vamos a ver las ordenes una por una.

Comentarios

1. #Este programa te pregunta por el nombre.
Esta línea es un comentario. Cualquier texto después del símbolo "#" (almohadilla) es un comentario y  sólo están ahí para ayudar a entender el programa. Piensa que muchos programas se hacen entre muchas personas, o que puede que se desee volver algún día para ver un programa que hizo hace mucho tiempo; en tales casos, es importante, que existan las notas explicativas necesarias para que así se pueda entender lo que se ha hecho.

La función print()

2. print ('Hola Mundo!')
3. print ('¿Cómo te llamas?')
Estas dos lineas son llamadas a la función print. En Python, esas funciones llevan paréntesis después del nombre de función, y cuando escrebimos una función decimos que la estamos llamando. Lo que hace la función print() es hacer que apareza en pantalla aquello que hemos puesto entre paréntesis.

La función input()

4. nombre= input()
Lo que hacemos en esta linea es asignar una variable, nombre, a una llamada a una función, input(). El resultado es que el ordenador esperará que el usuario introduza una cadena, y hará que esa cadena quede almacenada en la variable nombre. Después, la linea 5 hará que aparezca en pantalla la cadena 'Encantado de conocerte, ' seguida del nombre que se introdujo (nombre).

5. print ('Encantado de conocerte, '+nombre)

Características de las variables:
  • Las variables siempre tienen que empezar por una letra.
  • Son diferentes las mayúsculas de las minúsculas
  • Es importante escoger los nombres de variables de forma adecuada para que sean faciles de interpretar. Por ejemplo la variable nombre
Flujograma:

Un flujograma ou diagrama de flujo es una representación gráfica del funcionamento de

un programa. No es preciso conocer el código para hacerlos, ya que se centran más en el orden de los sucesos que en las ordenes concretas que tenemos que ejecutar para conseguir el objetivo que nos proponemos. Para un programita tan sencillo coma éste, que no tiene ninguna opción de escojer, sería algo tan sencillo como esto:











Modificación del programa.

Haz que además del nombre te pregunte por la ciudad y salga un mensaje con el nombre y la ciudad

Autoevaluación: Cadenas o "strings"

Teoría:

- ¿Qué tipos de datos son integers, floating point numbers y strings?
- ¿Que es el flujo de ejecución?
- ¿Qué es un diagrama de flujo?
- ¿Qué es print()?r unha instrucción, pero é unha función.

Práctica:
¿Cuál de estas declaraciones de una cadena está bien escrita?


colegio=(grande)
colegio=grande
colegio='grande'
colegio=;grande;

¿Cuál será la salida en el shell de las siguientes instrucciones print()?

print('rojo')

print 'rojo'
taxError:invalid syntax
print (rojo)

color='rojo'
print(color)

color'rojo'
print ('color')

color='rojo'
print(rojo)


¿Cuál será la salida de estos programas?

Ciudad='Madrid';
colegio='IES María de Molina';
print(colegio+Ciudad);

marca='ford';
modelo='fiesta';
print('tengo un '+marca+modelo);


marca='ford';
modelo='fiesta';
print('tengo un '+marca+' '+modelo);

marca='fiesta';
modelo='ford';

print('tengo un '+marca+modelo);

print ('¿Cuanto mides?');
altura=input();
print ('¡'+altura+' es una buena altura!');
altura!

Twitter Facebook Tuenti LinkedIn gmail Favorites More