Autor
|
Tema: Buscador de combinaciones inexistentes no funciona. (Leído 539 veces)
|
Tachikomaia
Conectado
Mensajes: 1.479
Hackentifiko!
|
Relacionado con: https://foro.elhacker.net/hacking/descartar_combinaciones_de_caracteres_al_buscar_password-t522886.0.htmlCódigo dado por GPT: import itertools def cargar_diccionario(ruta): """Carga el diccionario desde un archivo .txt y devuelve un conjunto de palabras en minúsculas.""" with open(ruta, 'r', encoding='utf-8') as archivo: return set(palabra.strip().lower() for palabra in archivo) def generar_combinaciones(alfabeto): """Genera todas las combinaciones posibles de dos letras del alfabeto.""" return {a + b for a, b in itertools.product(alfabeto, repeat=2)} def buscar_combinaciones(diccionario, combinaciones): """Busca combinaciones dentro de las palabras del diccionario.""" presentes = set() # Buscar combinaciones dentro de palabras individuales for palabra in diccionario: for i in range(len(palabra) - 1): presentes.add(palabra[i:i+2]) # Buscar combinaciones entre palabras consecutivas lista_palabras = sorted(diccionario) # Ordenar las palabras for i in range(len(lista_palabras) - 1): ultima_letra = lista_palabras[-1] primera_letra = lista_palabras[i + 1][0] presentes.add(ultima_letra + primera_letra) return combinaciones - presentes # Paso 1: Cargar diccionarios diccionario_es = cargar_diccionario('diccionario_es.txt') diccionario_en = cargar_diccionario('diccionario_en.txt') # Paso 2: Generar combinaciones posibles alfabeto_es = 'abcdefghijklmnñopqrstuvwxyz' alfabeto_en = 'abcdefghijklmnopqrstuvwxyz' combinaciones_es = generar_combinaciones(alfabeto_es) combinaciones_en = generar_combinaciones(alfabeto_en) # Paso 3: Buscar combinaciones inexistentes en cada diccionario inexistentes_es = buscar_combinaciones(diccionario_es, combinaciones_es) inexistentes_en = buscar_combinaciones(diccionario_en, combinaciones_en) # Paso 4: Combinar resultados y mostrar combinaciones inexistentes en ambos idiomas inexistentes_totales = inexistentes_es.intersection(inexistentes_en) print(f"Combinaciones inexistentes en ambos idiomas ({len(inexistentes_totales)}):") print(sorted(inexistentes_totales))
Tengo los diccionarios y les puse los nombres que dice ahí: diccionario_es.txt diccionario_en.txt El programa se cierra enseguida sin que yo pueda ver qué pasa. ¿Cual es la falla, cómo lo arreglo?
|
|
|
En línea
|
|
|
|
EdePC
|
El programa se cierra enseguida sin que yo pueda ver qué pasa. ¿Cual es la falla, cómo lo arreglo? O_o? Es un aplicación/script de consola o línea de comando (como john the ripper), usa una consola (CMD, Símbolo del Sistema, PowerShell, etc), también puedes poner una "pausa" antes de que se cierre pero si hay errores no los mostrará a no ser que lo ejecutes en una consola que es como debe de ser. Para poner la pausa puedes agregar un input al final o donde quieras la pausa: input("Presione Enter para continuar ...")
|
|
|
En línea
|
|
|
|
Tachikomaia
Conectado
Mensajes: 1.479
Hackentifiko!
|
Es un archivo py abierto con Python, eso me lo enseñaron aquí, posiblemente tú.
Luego te digo el resultado.
|
|
|
En línea
|
|
|
|
Tachikomaia
Conectado
Mensajes: 1.479
Hackentifiko!
|
No cambió el resultado, se cierra enseguida. import itertools def cargar_diccionario(ruta): """Carga el diccionario desde un archivo .txt y devuelve un conjunto de palabras en minúsculas.""" with open(ruta, 'r', encoding='utf-8') as archivo: return set(palabra.strip().lower() for palabra in archivo) def generar_combinaciones(alfabeto): """Genera todas las combinaciones posibles de dos letras del alfabeto.""" return {a + b for a, b in itertools.product(alfabeto, repeat=2)} def buscar_combinaciones(diccionario, combinaciones): """Busca combinaciones dentro de las palabras del diccionario.""" presentes = set() # Buscar combinaciones dentro de palabras individuales for palabra in diccionario: for i in range(len(palabra) - 1): presentes.add(palabra[i:i+2]) # Buscar combinaciones entre palabras consecutivas lista_palabras = sorted(diccionario) # Ordenar las palabras for i in range(len(lista_palabras) - 1): ultima_letra = lista_palabras[-1] primera_letra = lista_palabras[i + 1][0] presentes.add(ultima_letra + primera_letra) return combinaciones - presentes # Paso 1: Cargar diccionarios diccionario_es = cargar_diccionario('diccionario_es.txt') diccionario_en = cargar_diccionario('diccionario_en.txt') # Paso 2: Generar combinaciones posibles alfabeto_es = 'abcdefghijklmnñopqrstuvwxyz' alfabeto_en = 'abcdefghijklmnopqrstuvwxyz' combinaciones_es = generar_combinaciones(alfabeto_es) combinaciones_en = generar_combinaciones(alfabeto_en) # Paso 3: Buscar combinaciones inexistentes en cada diccionario inexistentes_es = buscar_combinaciones(diccionario_es, combinaciones_es) inexistentes_en = buscar_combinaciones(diccionario_en, combinaciones_en) # Paso 4: Combinar resultados y mostrar combinaciones inexistentes en ambos idiomas inexistentes_totales = inexistentes_es.intersection(inexistentes_en) print(f"Combinaciones inexistentes en ambos idiomas ({len(inexistentes_totales)}):") print(sorted(inexistentes_totales)) input("Presione Enter para continuar ...")
¿Será que requiere una versión más nueva que la que tengo? El problema que describes probablemente no está relacionado con la versión de Python, sino con un **error en tu código** que provoca que el programa termine antes de lo esperado. Vamos a analizarlo detalladamente.
### Posibles problemas en el código
1. **Error en la sección de combinaciones entre palabras consecutivas**: En el método `buscar_combinaciones`, en esta línea:
```python ultima_letra = lista_palabras[-1] primera_letra = lista_palabras[i + 1][0] presentes.add(ultima_letra + primera_letra) ``` Hay un error de lógica. La variable `ultima_letra` intenta tomar el valor de la última palabra completa de la lista (`lista_palabras[-1]`), pero lo que necesitas es la **última letra de la palabra actual** (`palabra_actual[-1]`). Aquí tienes una corrección:
```python ultima_letra = lista_palabras[-1] # Última letra de la palabra actual primera_letra = lista_palabras[i + 1][0] # Primera letra de la siguiente palabra presentes.add(ultima_letra + primera_letra) ```
2. **Falta de manejo de excepciones en la lectura de los archivos**: Si los archivos `diccionario_es.txt` o `diccionario_en.txt` no existen, el programa lanzará un error y se cerrará. Asegúrate de manejar este caso con un bloque `try-except` para evitar que el programa termine inesperadamente:
```python def cargar_diccionario(ruta): """Carga el diccionario desde un archivo .txt y devuelve un conjunto de palabras en minúsculas.""" try: with open(ruta, 'r', encoding='utf-8') as archivo: return set(palabra.strip().lower() for palabra in archivo) except FileNotFoundError: print(f"Error: No se encontró el archivo {ruta}.") return set() ```
3. **Errores en los datos de entrada**: Si el archivo de diccionario contiene caracteres especiales, líneas vacías o palabras que no se procesan correctamente, el programa podría comportarse de manera inesperada. Asegúrate de que los archivos de entrada estén en el formato correcto (palabras en minúsculas, una por línea).
4. **El programa finaliza correctamente pero no esperas ese comportamiento**: Si el programa no tiene errores, la última línea:
```python input("Presione Enter para continuar ...") ```
debería mantener la ventana abierta hasta que presiones **Enter**. Sin embargo, si estás ejecutándolo desde un entorno donde la ventana se cierra automáticamente al finalizar (por ejemplo, al ejecutar un archivo `.py` en Windows haciendo doble clic), esto puede parecer un cierre inesperado.
Para evitar este problema, te recomiendo ejecutar el programa desde una terminal o consola manualmente con:
```bash python tu_programa.py ```
Esto asegurará que la ventana no se cierre automáticamente después de la ejecución.
---
### Solución ajustada del código
Aquí está el código corregido con las observaciones mencionadas:
```python import itertools
def cargar_diccionario(ruta): """Carga el diccionario desde un archivo .txt y devuelve un conjunto de palabras en minúsculas.""" try: with open(ruta, 'r', encoding='utf-8') as archivo: return set(palabra.strip().lower() for palabra in archivo if palabra.strip()) except FileNotFoundError: print(f"Error: No se encontró el archivo {ruta}.") return set()
def generar_combinaciones(alfabeto): """Genera todas las combinaciones posibles de dos letras del alfabeto.""" return {a + b for a, b in itertools.product(alfabeto, repeat=2)}
def buscar_combinaciones(diccionario, combinaciones): """Busca combinaciones dentro de las palabras del diccionario.""" presentes = set() # Buscar combinaciones dentro de palabras individuales for palabra in diccionario: for i in range(len(palabra) - 1): presentes.add(palabra[i:i+2]) # Buscar combinaciones entre palabras consecutivas lista_palabras = sorted(diccionario) # Ordenar las palabras for i in range(len(lista_palabras) - 1): ultima_letra = lista_palabras[-1] # Última letra de la palabra actual primera_letra = lista_palabras[i + 1][0] # Primera letra de la siguiente palabra presentes.add(ultima_letra + primera_letra) return combinaciones - presentes
# Paso 1: Cargar diccionarios diccionario_es = cargar_diccionario('diccionario_es.txt') diccionario_en = cargar_diccionario('diccionario_en.txt')
# Verificar si los diccionarios se cargaron correctamente if not diccionario_es or not diccionario_en: print("No se pudieron cargar los diccionarios. Por favor, verifica los archivos.") exit()
# Paso 2: Generar combinaciones posibles alfabeto_es = 'abcdefghijklmnñopqrstuvwxyz' alfabeto_en = 'abcdefghijklmnopqrstuvwxyz' combinaciones_es = generar_combinaciones(alfabeto_es) combinaciones_en = generar_combinaciones(alfabeto_en)
# Paso 3: Buscar combinaciones inexistentes en cada diccionario inexistentes_es = buscar_combinaciones(diccionario_es, combinaciones_es) inexistentes_en = buscar_combinaciones(diccionario_en, combinaciones_en)
# Paso 4: Combinar resultados y mostrar combinaciones inexistentes en ambos idiomas inexistentes_totales = inexistentes_es.intersection(inexistentes_en)
print(f"Combinaciones inexistentes en ambos idiomas ({len(inexistentes_totales)}):") print(sorted(inexistentes_totales)) input("Presione Enter para continuar ...") ```
---
### Resumen de los cambios
1. **Corrección de la lógica al buscar combinaciones entre palabras consecutivas.** 2. **Manejo de excepciones al cargar los archivos.** 3. **Validación para asegurarte de que los diccionarios se carguen correctamente.** 4. **Sugerencia de ejecutar el programa desde la terminal para evitar que la ventana se cierre automáticamente.**
Con estas correcciones, el programa debería funcionar correctamente si tienes una versión de Python reciente (3.6 o superior).Demasiado lío, el código me lo dió él, si ahora dice que tiene errores mejor empiezo por algo más simple que yo pueda entender.
|
|
« Última modificación: Hoy a las 13:25 por Tachikomaia »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
buscador en php... q no funciona. AYUDA POR FAVOR
PHP
|
miguelangelss4
|
4
|
3,410
|
25 Abril 2009, 11:19 am
por miguelangelss4
|
|
|
No funciona mi buscador
GNU/Linux
|
Choclito
|
7
|
4,676
|
25 Diciembre 2010, 08:07 am
por Choclito
|
|
|
Buscador de combinaciones numéricas
Dudas Generales
|
hcalderon11
|
0
|
3,529
|
16 Febrero 2012, 21:49 pm
por hcalderon11
|
|
|
Google explica a los usuarios cómo funciona el algoritmo de su buscador de....
Noticias
|
wolfbcn
|
0
|
2,033
|
6 Marzo 2013, 22:35 pm
por wolfbcn
|
|
|
Un buscador de torrents sin anuncios, enfocado en la privacidad y que funciona
Noticias
|
wolfbcn
|
0
|
1,280
|
20 Enero 2018, 02:14 am
por wolfbcn
|
|