Open matiasmasjuan opened 1 year ago
Hola, ¿Se pueden ocupar las librerías math y typing? Quiero ocupar math para crear dinámicamente un círculo de jugadores en la ventana de juego dependiendo de la cantidad de jugadores, y typing para agregar type hints a mis variables, atributos, funciones y métodos
Hola @d-i-n-b !
Recuerda especificar siempre para qué quieres usar las librerías.
Hola, quiero usar la librería sys.argv
para saber el puerto que envían como argumento en la consola py main.py 3333
Hola @ooscarr !
Sí, puedes usar sys.argv
para recibir argumentos por consola.
Saludos!
Hola, ¿Se pueden ocupar las librerías math y typing? Quiero ocupar math para crear dinámicamente un círculo de jugadores en la ventana de juego dependiendo de la cantidad de jugadores, y typing para agregar type hints a mis variables, atributos, funciones y métodos
Hola @d-i-n-b !
Sí, puedes usar math
u typing
para lo que mencionas.
se puede ocupar beautifultable para el tema del log?
Hola @FelipeIGS:
No, no puedes. Librerías como beatifultable
, prettytable
, o tabulate
requieren ser instaladas para usarse, por lo que podrían generar problemas o errores al momento de la corrección.
Saludos!
Hola, se puede ocupar la libreria "copy" ? para poder hacer copias de bytearrays que puedan modificarse sin modificar la original.
Hola @StefanoBrunel : Sí, si puedes usar la librería copy
para eso. Saludos!
Hola,
se puede usar filter()
? Lo quiero usar para obtener clientes cuyo ID no ha sido aún ocupado por un socket dentro de un diccionario de nombre self.clientes
, que contiene 4 llaves inicialmente seteadas a "Undefined".
I.e. usuarios_disponibles = list(filter(lambda x: self.clientes[x] == "Undefined", self.clientes))
, que me retornará los usuarios que se encuentran disponibles para ser asignados a un socket, y, por ende, aceptar la conexión inmediatamente (y no dejarlo en lista de espera).
Gracias
Hola buenas se puede usar subprocess
para volver a cargar el programa otra vez, estuve viendo y parece que no es necesario instalarlo/
Hola @tomastrivino: Sí, puedes usar map
, filter
y reduce
, junto a las funciones lambda
:ok_hand:
Hola @tremendapithon : No, no puedes usar subprocess
. Esto debido a que no necesitan tener distintos subprocesos dentro de la ejecución del programa para acceder a distintos archivos/programas a la vez. Si bien lo mencionas para cargar nuevamente el programa, no debería ser necesario dado los requerimientos de la tarea, y podría dificultar la corrección.
@matiasmasjuan En realidad, ni tanto, solo facilita que un cliente que no pueda acceder a la sala lo pueda volver a intentar, sin tener que abrir la terminar o volver a iniciar al main.py, en ese caso se podria justificar o no?
tipo, cuando la sala se llena o existe una partida en curso, lo que hace es cerrar mi programa y volver a cargar otro desde el mismo programa cerrado, y en ese procedimiento el usuario se podra conectar cuando exista un cupo en el servidor.
incluso lo puedo hacer con os.system()
Ahora entiendo un poco más lo que intentas hacer. Si lo puedes realizar con os.system
, entonces estaría bien. Recuerda mencionar en tu readme el proceso que haces para manejar este tipo de casos 👌.
Saludos!
Hola! se puede ocupar la funcion math para ocupar facilitar el mod matematico de la codificacion
@matiasmasjuan Al final lo hice con os.system(), obtuve el mismo resultado y no me ha generado problemas.
@FelipeIGS : Sí, puedes usar math
para eso.
@matiasmasjuan Hola!, se puede usar el Qtimer de pyqt.core para ayudar al cliente a cargar la informacion que recibe del servidor
Gracias :)
Hola @TVMerlo : No sé si entendí muy bien tu pregunta, pero no encuentro mucho sentido de tener que usar Qtimers para cargar la información del cliente que recibe del servidor, a menos que quisieras implementar el bonus del turno con tiempo. Dado que los mensajes entre cliente y servidor se transmiten de forma casi instantánea, sería innecesario tener que implementar timers para enviar la información, y eso solo entorpecería y haría más lento la corrección, debido a la demora en actualizar la interfaz. Sin embargo, si planeas utilizarlos porque tienes problemas en que se mezcla la información, te recomendaría usar locks al momento de recibir o enviar dicha información 👀
Saludos!
Hola @matiasmasjuan. ¿Es posible ocupar la librería select
para ocuparlo de tal forma que pueda cerrar el listening del server pasado cierto límite de sockets aceptados? Dejo un snippet:
while True:
readable, writable, exceptional = select.select(conns, [], [])
if sock in readable: # new connection on the listening socket
conn, caddr = sock.accept()
conns.add(conn)
if len(conns) > LIMIT: # ">" because "sock" is also in there
conns.remove(sock)
sock.close()
else: # reading from an established connection
for c in readable:
buf = c.recv(4096)
if not buf:
conns.remove(c)
sock = get_listening_socket()
conns.add(sock)
else:
print("received: %s" % buf)
Hola @BenzoylMorexide !
No, no puedes utilizar select
para esta tarea. Esto debido a dos razones. La primera se debe a que en esta tarea no hay que limitar la cantidad o límite de sockets que puede aceptar el servidor, sino que este debe aceptar todas las conexiones posibles y redirige a los clientes a la sala de espera. En ese sentido, hacer uso de select
para lo que mencionas estaría contradiciendo el enunciado y conllevaría un descuento según la distribución de puntajes.
En segundo lugar, no es necesario requerir de una librería para lograr esto. Simplemente se podría cerrar el listening del server pasado un límite de sockets aceptados.
PD: puedes usar
```python # todo tu codigo
```
Para hacer snippet bonitos.
Algo del siguiente estilo:
while True:
readable, writable, exceptional = select.select(conns, [], [])
if sock in readable: # new connection on the listening socket
conn, caddr = sock.accept()
conns.add(conn)
if len(conns) > LIMIT: # ">" because "sock" is also in there
conns.remove(sock)
sock.close()
# etc
Saludos!
Hola! Se puede usar la función copy
de la librería copy
para crear copias de listas/diccionarios y poder modificarlas sin modificar la original?
Se que ya se permitió el uso de copy arriba, pero se preguntó específicamente para bytearrays y me han bajado por no preguntar cosas que consideré obvias ._. así que decidí preguntar igual.
Hola @c4ebt : Sí, puedes usar copy
para eso. Saludos!
Hola! se puede ocupar exec()?? quiero ocuparlo para poder mostrar un mensaje popup, el cual lo estaba implementando con QMessageBox(). el uso seria : QMessageBox().exec()
Hola @StefanoBrunel : Sí, puedes usar exec_()
para eso. Recuerda que ese método no tiene nada que ver con built-in prohibido exec
.
Saludos!
Para consultar sobre una librería deben responder esta issue con una pregunta de la siguiente forma:
¡Recuerden especificar en su README qué librerías utilizan!
✔ Librerías Permitidas
❌ Librerías Prohibidas
☠️ Built-ins Prohibidos
El uso de alguna de las siguiente funciones es automáticamente un 1,0 sin discusión: 😭
Malas prácticas
El uso de las siguientes prácticas será considerado una mala práctica:
except Exception:
o únicamenteexcept:
(excepciones bien capturadas sí estarán permitidas).Import *
o imports que no se encuentren al inicio del programa.Éxito en la tarea, programadores avanzados! 🎲🃏