[Python] Hilo general

Deoxys

#59 Precisamente si no tienes compatibilidad con algún módulo que necesites usar (O alguna otra preferencia personal) no tiene sentido no pasarse a python 3. Ya quedan muy pocas librerías que no sean compatibles con python 3.

1 1 respuesta
K0N1G

#60 #61 Gracias! Pero por lo que veo scrapy no es compatible :(

1 respuesta
Deoxys

#62 Están trabajando en ello, si no ha salido ya le quedará muy poco :P

B

Alguien me sabría decir si existe alguna forma (que no sea añadir a mi "utils" algo hecho por mi) para castear listas a arrays de numpy de forma recursiva?

2 respuestas
HeXaN

#64 Pon un ejenplo, anda, que es temprano y no entiendo.

1 respuesta
Markitos_182

#64 Numpy si no recuerdo mal permite castear listas a arrays de su tipo, pero me da que lo de recursivo te lo vas a tener que sacar de la manga tú...

1 respuesta
B

#65 #66 Ya lo tengo solucionado, gracias a ambos igualmente.

1 respuesta
9 días después
ciza

#67 de paso pon la solución, yo simplemente suelo hacer array(lista)

freSka

Hola chicos, tengo una duda, tengo que evaluar una operación tipo string y dar un valor sin ningún tipo de funcion(estilo eval o exec).. como puedo hacerlo ?

gracias de antemano !!

1 respuesta
Deoxys

#69 Te refieres a que te pasan una función en una string y tienes que ejecutarla/leerla sin eval/exec? :?

def execute(words):
  with open ("/tmp/temp_python.py","w+") as out:
    out.write(words)
  import subprocess
  try:
    ans=subprocess.check_output("python /tmp/temp_python.py")
    subprocess.call("rm /tmp/temp_python.py")
  except:
    ans="Fail!"
  return ans

¯_(ツ)_/¯

16 días después
HeXaN

Nueva versión de Python: https://docs.python.org/3.6/whatsnew/3.6.html

Phatality

Alguien familiarizado con la suite de data science (Anaconda)?

1 respuesta
7 días después
HeXaN

#72 ¿Qué tienes pensado hacer con ella?

1 respuesta
Phatality

#73 Ver si me va mejor que R para temas de análisis de datos en general.

3 respuestas
HeXaN

#74 Como todo, depende del problema que tengas entre manos. Ahora mismo Python está creciendo en el mundillo este, pero R tiene muchísimos módulos específicos que marcan la diferencia. Yo, si no es para ámbito profesional, usaría Python por su facilidad.

1 respuesta
ciza

#75 me da la impresión de que si es para ámbito profesional, que #74 lo confirme

Kaiserlau

#74 no te vale con jupyter? puedes usar R igualmente aparte de todo el arcoiris de python claro xd

B

una preguntita sobre vpython y wxpython.
Tengo una ventana creada y le inserto un marco de vpython para que se muestren las cosas.

La cosa es que quiero que ese marco se muestre SIEMPRE y no solo cuando creo un objeto

sabeis como se pone?
scene.Show o scene.display no funcionan xd

He pensado crear un objeto invisible para que asi siempre se muestre la ventanita, pero es una solucion un poco cutre xD

B

y incrustar y desincrustar un display en un widget alguien sabe?xD llevo dias frustado con esta mierda y una no se como desinsertarlo sin perder lo que hay dentro sdfñhsdflkjshdfñjsdfh

1 respuesta
HeXaN

#79 ¿Por qué usas esos sistemas de la prehistoria?

1 respuesta
B

#80 si me dices que hay mas moderno y parecio me pongo con ello, soy un noob

9 días después
E

Hola, tengo que desarrollar una serie de algoritmos en python (y no he tocado nada de él). Tengo una duda conceptual respecto a la herencia, a ver si alguien me la puede solucionar:

En el siguiente código tengo una variable que es frontera, sin embargo, no está definida ni declarada en ningún sitio de la clase BúsquedaGeneral (aparece por primara vez en la función buscar). Aquí os dejo la clase para que podáis mirarlo vosotros mismos:

class BúsquedaGeneral:
    def __init__(self, detallado=False):
        self.detallado = detallado
        if self.detallado:
            self.Nodo = NodoConProfundidad
        else:
            self.Nodo = NodoSimple
        self.explorados = ListaNodos()

def es_expandible(self, nodo):
    return True

def expandir_nodo(self, nodo, problema):
    return (nodo.sucesor(acción)
            for acción in problema.acciones_aplicables(nodo.estado))

def buscar(self, problema):
    self.frontera.vaciar()
    self.explorados.vaciar()
    self.frontera.añadir(self.Nodo(problema.estado_inicial))
    while True:
        if not self.frontera:
            return None
        nodo = self.frontera.sacar()
        if self.detallado:
            print('{0}Nodo: {1}'.format('  ' * nodo.profundidad, nodo))
        if problema.es_estado_final(nodo.estado):
            return nodo.solución()
        self.explorados.añadir(nodo)
        if self.es_expandible(nodo):
            nodos_hijos = self.expandir_nodo(nodo, problema)
            for nodo_hijo in nodos_hijos:
                if nodo_hijo not in self.frontera and nodo_hijo not in self.explorados:
                    self.frontera.añadir(nodo_hijo)

Ahora tengo la siguiente clase, la cual en teoría según he leído hereda de BúsquedaGeneral:

class BúsquedaEnAnchura(BúsquedaGeneral):
    def __init__(self, detallado=False):
        super().__init__(detallado)
        self.frontera = ColaNodos()

Aquí si estamos declarando y dando valor a la variable frontera.

¿Cómo es posible que un atributo que no está declarado en la superclase, sino en la subclase, sea usado por la superclase?No se si me explico ni si es esto lo que hace, me he metido de lleno en python con problemas de IA con experiencia 0 previamente en python y me está costando. A ver si alguién puede echarme una mano y explicarme que es lo que está ocurriendo aquí exactamente.

Un saludo y muchas gracias de antemano.

1 respuesta
Deoxys

Creo que lo que está pasando es que, al heredar de la superclase, esos métodos pasan a ser parte de la subclase (Que es precisamente la idea de la herencia), y entonces la subclase puede usarlos con sus atributos (En este caso, frontera).

Haz una prueba e intenta usar esas funciones directamente desde una instancia de BusquedaGeneral, ya verás cómo peta.

1 1 respuesta
cabron

#82

Solo te va a funcionar si llamas al método buscar() desde la subclase BusquedaEnAnchura, ya que ahí si existe 'frontera'.

Si intentas ejecutar buscar() directamente desde la superclase o desde otra subclase que no defina frontera, te petará.

El motivo por el que funciona es por que python no tiene tipado estático, así que no comprueba en tiempo de compilación si los miembros existen (en Java o C++ eso no funcionaría por que no compilaría), pero en python sí funciona por que no es hasta en tiempo de ejecución que se comprueba si existe o no.

1
E

#83 #82 vale, ya me ha quedado claro. Estoy acostumbrado a JAVA y esto me ha descolocado totalmente. Muchas gracias a ambos ^^

B

He empezado esta semana un curso de Python después de mucho tiempo sin programar y tengo una dudilla que lo mismo es un poco tonta.

El objetivo es reproducir la función len(), obviamente sin usarla. El problema es que cuando acabo de recorrer la cadena y contar caracteres no se como parar el bucle sin saber el final de la cadena. He probado con

while cadena[i]!=""

Pero supongo que no puede comparar algo que no existe, me sigue dando el error de bucle infinito.

1 respuesta
HeXaN

#86 ¿La lista puede contener lo que sea?

1 respuesta
B

#87 En principio una cadena ascii aleatoria.

Definir una función que calcule la longitud de una cadena dada. (Hemos visto que Python
dispone de la función len para realizar esta operación, la idea es reproducir la
funcionalidad sin hacer uso de ella).

def longitud(cadena):
    i=0
    while cadena[i]!="":    
print cadena[i], i i = i + 1 i = i + 1 #Sumar uno más al total (inicio = 0) return i prueba="Agapito" print "Longitud de la cadena '",prueba,"': ",longitud(prueba)

Y la salida que muestra pues es:

Longitud de la cadena ' Agapito ':  A 0
g 1
a 2
p 3
i 4
t 5
o 6
Line 5: IndexError: string index out of range
3 respuestas
cabron

#88

Cambia el while por un for c in cadena:

1 1 respuesta
E
def longitud(cadena):
    return sum(map(lambda x:1, cadena))
1 respuesta

Usuarios habituales