1 votos

Listas de nombres aleatoreos en pygame

Quisiera que me puedan decir como poder mostrar una lista aleatorea de nombres en forma decendente en pygame. La lista de nombres la tengo en el bloc de notas y quisiera que se me mostrase cuando importo la libreria pygame

2voto

JH Puntos 265

Actualización: la pregunta tiene como requerimiento poder aleatorizar la lista. Así que agrego algo al final para cumplir con ese requerimiento.

Puedes ordenar listas en Python usando la función sorted(), un ejemplo:

# Lista desordenada inicialmente
lista_nombres = ["Rika", "Alis", "Chaz", "Rune", "Wren"]

# Ordenamos usando sorted()
lista_nombres = sorted(lista_nombres)

Obtendrás una lista con la siguiente distribución:

["Alis", "Chaz", "Rika", "Rune", "Wren"]

Ahora bien, si tienes la lista en un archivo de texto, ¿cómo la conviertes en una lista de Python para así poder usar sorted() en ella? Sugiero hacer algo como lo siguiente:

def load_lista_nombres (filename):
    archivo = open(filename, "rb")
    texto = archivo.read()
    texto = texto.replace('\r', '')
    # Convertimos el string que cargamos desde el archivo en una lista
    # el criterio para dividir en substring será el caracter de fin de
    # linea \n
    lista_nombres = texto.split('\n')
    # Esto que sigue es necesario porque sino pueden quedar items vacios
    # en la lista
    lista_nombres = [i for i in sorted(lista_nombres) if i != ""]
    return lista_nombres

Este código se debe usar de la siguiente manera: filename es la ruta a un archivo, que puede ser relativa al directorio de trabajo actual, cuidado que el directorio de trabajo actual no siempre será donde se encuentre el script del juego. Si el script no encuentra el archivo prueba con una ruta completa. Ejemplo:

lista_nombres = load_lista_nombres("C:\\opt\\mi_juego\\lista_nombres.txt")

Obtener un nombre de una posición aleatoria de la lista que antes ordenamos:

En los comentarios evito usar tildes a conciencia en caso de que el script no tenga declarado el encoding al principio, ya que daría error al procesarse el código por culpa de los tildes en los comentarios.

import random

# como no pasamos ningun parametro a random.seed() se usara de forma
# automatica el tiempo actual del sistema, esto es exacto lo que
# queremos.
random.seed()

# Obtenemos un numero aleatorio entre 0 y el ultimo indice de la lista 
item = random.randint(0, len(lista_nombres) - 1)
nombre = lista_nombres[item]
print("Nombre elegido para hoy: " + nombre)

Probar muchas veces para ir sacando diferentes nombres. No se muestra cómo cargar la lista de nombres. Se puede usar uno de los códigos anteriores o hardcodearla en el programa.

En sí lo que hicimos fue valernos de las funciones estándar de Python. Usamos mucho la lista de Python. Usamos la función sorted para ordenar la lista aunque bien podríamos no haberla ordenado. Luego usamos la función randint para ir sacando enteros aleatorios. Inicializar el seed con random.seed() es importante para que cada vez que ejecutemos el script el comportamiento de randint cambie y no sea predecible. Si no inicializamos el seed con un valor diferente cada vez que se ejecuta el script cualquiera que conozca el algoritmo de generación usado podrá predecir el resultado. Usar la fecha y hora del sistema para eso es bastante estándar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X