[Python] Hilo general

Rivendel

#1590 tendras que resetear el atributo de la clase que creas, no reasignarla a una variable no?

KooPad

#1590 Es posible que start sea variable global y no la actualices bien? Recuerda que para modificar variables globales en python tienes que hacerlo explícito.

eondev

#1590 pega el script entero y le damos un repaso

1
-Entropy-

¡Milagro! Ya funciona. Con el código que puso el compañero:

    if Angle > Drift and carKMH > MinKMH:
        if not sound_playing:
            playsound(SoundFile, block = False)
            sound_playing = True
            start = time.time()
    if time.time() - start > 10:
        sound_playing = False

Pero es que había que añadir las variables así:

def acUpdate(deltaT):
    global AngleLabel, Angle, Timer, MinKMH, sound_playing, start, offset

Ahora sí.

Muchas gracias. Como siempre me pasa con estas cosas, grandes esfuerzos para resultados pequeños. Pero bueno, es lo que tiene la ignorancia y la ineptitud. Al menos ya sé algo más de Python: que no quiero verlo ni en pintura. XD

5 1 respuesta
eondev

#1594 un problema muy común en iniciados es enfocarse en bloques de código como te ha pasado a tí con el global y demás donde haces algo concreto sin tener la visión global de todo el código.

Si te lo coges con calma puedes ver que el flujo va desde el inicio hasta al final y que durante todo el tiempo de ejecución del script el estado de las variables y el flujo de datos varía.

A la próxima pilla papel y lapiz, empiezas desde el principio y vas trazando siguiendo el código. Así verás donde no hay mucho sentido en lo que el código expresa o qué puede estar fallando.

Al final es ser metódico y como con las mates despejando la x, seguir con calma los pasos desde el principio. Lo guay de Python como en las mates es que lo que escribes hace, con la ventaja de que el ordenador nunca se equivoca :P

1
-Entropy-

Estaba ahora intentando averiguar si sería posible modificar la condición de manera que tuviera en cuenta un tiempo mínimo de drift, en vez de que simplemente considere que se alcanza el nivel de ángulo mínimo.

Para ello podría crear la condición, empezar a contabilizar el tiempo con algo como startdrift = time.time(), crear una espera, volver a crear la condición y si es válida y el cálculo de la diferencia de tiempo entre ambas comprobaciones es superior a 1 segundo (por ejemplo), entonces reproducir el sonido. Claro que para crear esa espera tendría que usar sleep y eso me para el juego. No sé, seguiré pensando, que seguro que no es tan complicado.

1 respuesta
Aeran

Gracias a los poquitos conocimientos de Python que tengo e programado una pequeña aventura conversaciónal para una cita que tengo está noche jaja, ya os contaré y la comparto 😂

5
gonya707

#1596 con el código que te ha funcionado tienes el ejemplo perfecto para hacer eso que quieres. El segundo if es básicamente un contador de 10 segundos, si quoeres otro contador de un segundo para otra cosa solo tienes que cambiar el 10 y comparar los números que tocan

-Entropy-

He encontrado código de otra app que incorpora ya lo del tiempo mínimo de drift mantenido, así que he vuelto a hacer lo mismo: limpiar el código quitando lo que sobra, combinar el código de la reproducir el sonido e incluso he puesto sin problema la condición del tiempo mínimo entre reproducciones. Ahora resulta más realista.

Ahora lo que quiero mirar es si se puede hacer una función de elección aleatoria entre distintos ficheros de sonido. Supongo que Python tendrá algo para eso.

Por cierto, ayer también di con una web en la que le puedes pegar el código y te comprueba los errores. Es útil porque parece ser que este lenguaje es muy tiquismiquis y por cualquier tontería hace que todo falle.

2 respuestas
gonya707

#1599 sobre lo de elegir un sonido random, claro, es facil:

Define una lista de sonidos con las rutas o lo que sea, igual que definiste el unico sonido antes, y tambien importa la funcion choice

from random import choice
sound_list = [soundFile1, soundFile1, soundFile1, soundFile4]

Y cuando tengas que elegir uno random te lo asignas con choice y usas el mismo codigo de antes:

soundFile = choice(sound_list)
playsound(soundFile, block = False)
...etc
1 respuesta
werty

#1599 lo de la web no te lo hace un IDE tmb? tipo pycharm? o es más preciso?

CaNaRy_r00lz

#1600 Pregunta random, si tienes 1000 sonidos y no quieres escribir todos, se puede usar el random para que lea en una carpeta y pille un archivo random de ahi?

3 respuestas
Yekale7

#1602 Sí, puedes listar los archivos de una carpeta y hacer un random.choice de ese listado.

1 respuesta
Rivendel

#1602 si tienes una lista con los nombres si, haces random choice lo metes en un string
with open("filename.mp3", "r") as file
etc... lo reproduces

1 respuesta
gonya707

#1602 Y por añadir a lo que ya te han dicho, si no quieres tener que escribir a mano los nombres siempre que pongas nuevos ficheros, puedes usar os.walk() para autogenerar la lista de archivos en el directorio que sea

https://www.tutorialspoint.com/python/os_walk.htm

1 respuesta
CaNaRy_r00lz

#1605 Ostias me apunto eso, que seguro que sera util en el futuro!

#1603 #1604 Thanks!

-Entropy-

Vale, lo he estado probando antes de leer vuestras respuestas, siguiendo un ejemplo que he mirado por la web. El caso es que funciona pero en cada carrera elige aleatoriamente uno y siempre se usa ese uno, no va cambiando. Imagino que necesito alguna manera de hacer que tire los dados cada vez. Éste es el código que estoy probando:

SoundFiles = ["apps\python\Drift_Sound/hotshot.wav", "apps\python\Drift_Sound/impressive.wav", "apps\python\Drift_Sound/amazing.wav"]
SoundFile = random.choice(SoundFiles)

Edit: voy a probar poniendo SoundFile = random.choice(SoundFiles) directamente en la condición justo antes de reproducirse el fichero.

1 1 respuesta
gonya707

#1607 pon el random.choice justo antes de cuando pones la función playsound, así justo antes de reproducir nada refrescara el sonido poniendo uno nuevo

-Entropy-

Listo: funcionando. Me había fallado porque había puesto espacios en el indentado en vez de tabuladores, pero ahora ya sí va.

24 días después
Cecos94

Tengo pensado empezar a aprender Python y para Elo quería hacer un bot de Telegram con algo de web scraping, que librería me recomendáis, scrapy o beautifulsoup?

1 respuesta
Kaiserlau

#1610 con requests y BS va fino, super sencillo.

2 1 respuesta
Cecos94

#1611 gracias, empezare con ello. Si tengo algún problema ya pregunto por aquí

1 respuesta
B

#1612 Yo para eso, como te han comentado tiro de requests para obtener el HTML y luego lo recorro con lxml y xpath, bueno... realmente para no amargarme la existencia le meto también "cssselect" y a volar.

B

Buenas gente, primero pedir perdón si lo que pregunto es una tontería o si me explico como el culo. Soy novato total y ando peleándome con un libro y con este ejercicio en concreto.

El tema es que me gustaría poder imprimir en pantalla en una sola línea el mensaje "El numero favorito de (nombre) es (num)", pero no quiero que me saque la lista, sino cada elemento separado por comas, como hace el segundo print del código. He intentado dentro del f-string pero nada...

Piedad que estoy empezando desde -0 :)

numeros_favoritos = {
    'Antonio': ['7','10'],
    'Maria': ['17','21'],
    'Olivia': ['2','8'],
    'Jorge': ['14']
}

for nombre, num in numeros_favoritos.items():
    print(f"El número favorito de {nombre} es {num}") 
    print(*num, sep=", ")
2 respuestas
gonya707

#1614 La manera mas chachi seria usando list comprehension pero asumo que aun no controlas eso, me limitare a dar el consejo con bucles
Simplemente en cada iteracion del bucle que tienes necesitas hacer otro bucle for que te vaya rellenando una string con la lista de numeros. Es decir, tomar num en un bucle y crear un num_as_string que en el caso de antonio sea "7, 10". Una vez creada esa num_as_string puedes intercalarla con el fstring

La solucion hecha sin testear, pero intenta hacerlo tu antes de mirar:

spoiler
1 respuesta
Korvael

#1614

spoiler
2 1 respuesta
B

#1615 Vale pillo el concepto de hecho le di vueltas a hacerlo así, pero entendía que había un modo más simple de hacerlo, obviamente no como yo lo estaba intentando. Entiendo que ese modo más fácil es con las "list comprehension" como comentas.
Muchísimas gracias por tu ayuda.

#1616 Vale, entiendo que esta es la forma "avanzada" de hacerlo, obviamente sin tanto código como haciéndolo con bucles for. Ya llegaré ahí, si no desfallezco por el camino :).
Muchísimas gracias por la info.

Que mundo este de la programación... :rofl::rofl:

CaNaRy_r00lz

Alguien sabe de alguna web con ejercicios desde novato a experto? para ir haciendo, pk si esta muy bien lo que veo y "entiendo" con los ejemplos pero luego se que me va a pasar que cuando me vaya yo a hacer algo voy a flipar, asi que me gustaria hacer ejercicios para coger ese rodaje.
Si se que puedo mirar en google, pero salen 32424 y si alguien conoce una que le haya gustado lo agradeceria mas que estar probando miles

1 respuesta
Rivendel

#1618 https://www.codecademy.com/learn/learn-python-3 luego tiene bastantes por especialidad dentro del mismo lenguaje el que te he puesto es el basico, lo minimo

1 respuesta
CaNaRy_r00lz

#1619 Ostias gracias, no sabia que codeacademy tenia algo asi

Usuarios habituales