Soluciones de ejercicios de Python y Tkinter

Soluciones de ejercicios de Python y Tkinter

Aquí tienes las soluciones de los ejercicios de Python y Tkinter del día 18 que encontrarás en esta página.

  1. Solo tenías que utilizar el método randint() del módulo random, para recibir un número entro aleatorio.
import random
aleatorio = random.randint(0, 1000)
#Importaciones
import random

#Generar número aleatorio
aleatorio = random.randint(0, 1000)

#Solicitar número al usuario
numero = int(input("¿Podrás adivinar el número secreto?\nPuede ser un número del 0 al 1000.\n"))

#Bucle indeterminado para ir dando pistas al usuario.
while True:
    if numero < aleatorio:
        print("El número es más alto.")
        numero = int(input(f"Introduce un numero mayor que {numero}: "))
    elif numero > aleatorio:
        print("El número es más bajo")
        numero = int(input(f"Introduce un numero menor que {numero}: "))
    else:
        print(f"Lo has adivinado. Necesitaste {intentos} intentos.")
        break
#Importaciones
import random

#Generar número aleatorio
aleatorio = random.randint(0, 1000)

#Se cuentan los intentos
intentos = 0

#Se solicita el número al usuario, la primera vez
numero = int(input("¿Podrás adivinar el número secreto?\nPuede ser un número del 0 al 1000.\n"))

#Bucle indeterminado para ir dando pistas al usuario.
while True:
    if numero < aleatorio:
        print("El número es más alto.")
        numero = int(input(f"Introduce un numero mayor que {numero}: "))
    elif numero > aleatorio:
        print("El número es más bajo")
        numero = int(input(f"Introduce un numero menor que {numero}: "))
    else:
        print(f"Lo has adivinado. Necesitaste {intentos} intentos.")
        break
  1. Se crea una simple ventanita de Tkinter con un botón y una entrada.
#Importaciones
from tkinter import *

#Ventana
root = Tk()
root.title("www.programacionfacil.org")

#Entrada de datos
entrada = Entry(root)
entrada.pack()

#Botón
Button(root, text="Enviar").pack()
#Bucle de ejecución
root.mainloop()
  1. Le he añadido cosas a la ventana que no voy a explicar de nuevo. Lo que interesa, es la línea 7. Esta lleva un showinfo para indicar el comienzo del juego y las instrucciones.

En la línea 12, he añadido el método attributes() para que la ventana principal se muestre siempre al frente, ya que al salir antes que nada el showinfo(), en muchas ocasiones, queda la ventana por detrás.

Lo último que te interesa aquí, son las líneas de la 26 a la 53, que lleva el mismo juego de los ejercicios anteriores, solo que llevado a Tkinter con messagebox.

Por lo del uso de "global" en la variable "intentos", esto también lo explico en el vídeo.

#Importaciones
from tkinter import *
import tkinter.messagebox as msb
import random

#Mensaje de inicio del juego
msb.showinfo("Adivina el número.", "Introduzca un número del 0 al 1000. ¿Cuántos intentos necesitará para conseguir acertar el número secreto?")

root = Tk()
root.title("www.programacionfacil.org")
root.resizable(False, False)
root.attributes("-topmost", True)
ancho_ventana = 400
alto_ventana = 100

#Pantalla
ancho_pantalla = root.winfo_screenwidth()
alto_pantalla = root.winfo_screenheight()

coordenadas_x = int((ancho_pantalla/2) - (ancho_ventana/2))
coordenadas_y = int((alto_pantalla/2) - (alto_ventana/2))- 37

root.geometry("{}x{}+{}+{}".format(ancho_ventana, alto_ventana, coordenadas_x, coordenadas_y))

#Entrada de datos
entrada = Entry(root)
entrada.insert(0,"Escriba un número...")
entrada.bind("<Button-1>", lambda d : entrada.delete(0, END))
entrada.pack()

aleatorio = random.randint(0, 1000)
intentos = 1
print(aleatorio)

#Evento para el botón
def pulsar_boton():
    global intentos
    #Se obtiene el valor del Entry
    try:
        numero = int(entrada.get())

        if numero < aleatorio:
            msb.showinfo("¡Fallaste!", f"El número es mayor. Introduce un número mayor que {numero}.")
            intentos += 1
        elif numero > aleatorio:
            msb.showinfo("¡Fallaste!", f"El número es menor. Introduce un número menor que {numero}.")
            intentos += 1
        else:
            msb.showinfo("¡Excelente!", f"Lo has adivinado. Necesitaste {intentos} intento/s.")
    
    except:
        msb.showerror("¡Error!", "Valor no válido.")
        intentos += 1

#Botón
Button(root, text="Enviar", command=pulsar_boton).pack()
#Bucle de ejecución
root.mainloop()
  1. Cada uno devuelve una cosa diferente. Te pongo un ejemplo de como puedes comprobarlo por tu cuenta:
#Importaciones
import tkinter.messagebox as msb

#Capturamos en una variable el valor devuelto por el messagebox
valor = msb.showinfo("www.programacionfacil.org","Probando los messagebox")

#Se imprime el valor
print(valor)
  • showinfo: ok. Cruz de cierre - ok.
  • showwarning: ok. Cruz de cierre - ok.
  • showerror: ok. Cruz de cierre - ok.
  • askquestion: yes (botón sí), no (botón no). Cruz de cierre deshabilitada.
  • askyesno: True (botón sí), False (botón no). Cruz de cierre deshabilitada.
  • askokcancel: True (botón aceptar), False (botón cancelar y cruz de cierre).
  • askyesnocancel: True (botón sí), False (botón no), None (botón cancelar y cruz de cierre).
  • askretrycancel: True (botón reintentar), False (botón cancelar y cruz de cierre).

Por cierto, en la teórica, te he comentado que askquestion y askyesno son iguales. Para el usuario sí, pero como puedes ver, internamente, se tratan de forma distinta, al devolver dos valores diferentes.

  1. Hay varias formas de hacer esto. A mi me gusta hacerlo así:
#Importaciones
import tkinter.messagebox as msb

#Capturamos en una variable el valor devuelto por el messagebox
valor = msb.askyesnocancel("www.programacionfacil.org","Probando los messagebox")

if valor:
    print('El usuario ha pulsado el botón "Sí".')
elif valor is False:
    print('El usuario ha pulsado el botón "No".')
else:
    print('El usuario ha cancelado.')

Por cierto, creo que lo he explicado ya en el curso, pero por si acaso, lo explico de nuevo.

Lo del if es una abreviación de "if valor == True". Lo del elif es una forma diferente de poner "elif valor == False". El else, contempla cualquier otro valor, por lo tanto, si es "None" lo que devuelve la cruz de cierre o el botón de cancelar, se ejecuta su código.

2 comentarios en «0»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Ejercicios de Python y Tkinter
curso Java Entrada siguiente Instalación de IDE y Java para empezar a programar