A continuación, te proporciono un ejemplo de código en Python que cumple con las especificaciones que mencionaste:
```python
import tkinter as tk
from tkinter import ttk
import random
import pandas as pd
class Aplicacion(tk.Tk):
def __init__(self):
super().__init__()
self.title("Generador de números aleatorios")
self.geometry("800x600")
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.columnconfigure(2, weight=1)
# Crear etiquetas y campos de texto
self.etiqueta_precio = ttk.Label(self, text="Precio:")
self.etiqueta_precio.grid(column=0, row=0, padx=10, pady=10)
self.campo_precio = ttk.Entry(self, width=20)
self.campo_precio.grid(column=1, row=0, padx=10, pady=10)
self.etiqueta_factor = ttk.Label(self, text="Factor:")
self.etiqueta_factor.grid(column=0, row=1, padx=10, pady=10)
self.campo_factor = ttk.Entry(self, width=20)
self.campo_factor.grid(column=1, row=1, padx=10, pady=10)
self.etiqueta_minimo = ttk.Label(self, text="Valor mínimo:")
self.etiqueta_minimo.grid(column=0, row=2, padx=10, pady=10)
self.campo_minimo = ttk.Entry(self, width=20)
self.campo_minimo.grid(column=1, row=2, padx=10, pady=10)
self.etiqueta_maximo = ttk.Label(self, text="Valor máximo:")
self.etiqueta_maximo.grid(column=0, row=3, padx=10, pady=10)
self.campo_maximo = ttk.Entry(self, width=20)
self.campo_maximo.grid(column=1, row=3, padx=10, pady=10)
# Crear botón para ejecutar la tarea
self.boton_ejecutar = ttk.Button(self, text="Ejecutar", command=self.ejecutar_tarea)
self.boton_ejecutar.grid(column=1, row=4, padx=10, pady=10)
# Crear botón para descargar en CSV
self.boton_descargar = ttk.Button(self, text="Descargar en CSV", command=self.descargar_csv)
self.boton_descargar.grid(column=1, row=5, padx=10, pady=10)
# Crear texto para mostrar resultados
self.texto_resultados = tk.Text(self, width=60, height=20)
self.texto_resultados.grid(column=0, row=6, columnspan=3, padx=10, pady=10)
def ejecutar_tarea(self):
try:
precio = float(self.campo_precio.get())
factor = float(self.campo_factor.get())
minimo = float(self.campo_minimo.get())
maximo = float(self.campo_maximo.get())
# Generar números aleatorios
numeros_aleatorios = [random.uniform(minimo, maximo) for _ in range(100)]
# Calcular resultados
resultados = []
for i in range(100):
resultado = precio * numeros_aleatorios[i] * factor
resultados.append(resultado)
# Calcular promedios
promedios = [sum(resultados[i:i+10]) / 10 for i in range(0, 100, 10)]
# Mostrar resultados en el texto
self.texto_resultados.delete(1.0, tk.END)
self.texto_resultados.insert(tk.END, "Resultados:\n")
for i, resultado in enumerate(resultados):
self.texto_resultados.insert(tk.END, f"Resultado {i+1}: {resultado:.2f}\n")
self.texto_resultados.insert(tk.END, "\nPromedios:\n")
for i, promedio in enumerate(promedios):
self.texto_resultados.insert(tk.END, f"Promedio {i+1}: {promedio:.2f}\n")
except ValueError:
self.texto_resultados.delete(1.0, tk.END)
self.texto_resultados.insert(tk.END, "Error: Por favor, ingrese valores numéricos.")
def descargar_csv(self):
try:
precio = float(self.campo_precio.get())
factor = float(self.campo_factor.get())
minimo = float(self.campo_minimo.get())
maximo = float(self.campo_maximo.get())
# Generar números aleatorios
numeros_aleatorios = [random.uniform(minimo, maximo) for _ in range(100)]
# Calcular resultados
resultados = []
for i in range(100):
resultado = precio * numeros_aleatorios[i] * factor
resultados.append(resultado)
# Calcular promedios
promedios = [sum(resultados[i:i+10]) / 10 for i in range(0, 100, 10)]
# Crear DataFrame
df = pd.DataFrame({
"Resultado": resultados,
"Promedio": promedios
})
# Descargar en CSV
df.to_csv("resultados.csv", index=False)
self.texto_resultados.delete(1.0, tk.END)
self.texto_resultados.insert(tk.END, "Archivo descargado correctamente.")
except ValueError:
self.texto_resultados.delete(1.0, tk.END)
self.texto_resultados.insert(tk.END, "Error: Por favor, ingrese valores numéricos.")
if __name__ == "__main__":
app = Aplicacion()
app.mainloop()
```
Este código crea una aplicación con un formulario para ingresar el precio, factor, valor mínimo y valor máximo. También incluye botones para ejecutar la tarea y descargar los resultados en CSV. La tarea consiste en generar 100 números aleatorios dentro del rango especificado, calcular los resultados multiplicando el precio y factor por los números aleatorios, y calcular los promedios de los resultados. Los resultados se muestran en un texto y se pueden descargar en CSV.