#1649 como lo tienes hecho ahora hay una probabilidad bastante mas alta de que te salgan letras a numeros o simbolos porque estas escogiendo entre todo.
Podrias hacer como ha dicho #1650 o podrias hacer como bitwarden y preguntar cuantos simbolos, numeros y longitud quiere la persona y entonces hacer 3 bucles para cada uno con esas longituded y haces un shuffle.
#1652 Sí, de hecho en el ejercicio original se pregunta cuantos números, letras y símbolos quiere el usuario, pero he querido hacer una variación para practicar un poco más por mi cuenta.
Bueno ya casi lo tengo, he puesto un random.choice para todas las variables pero ahora si escribo que quiero un password de 8 caracteres me genera una contraseña con 8 números 8 letras y 8 símbolos lol
Lo fácil es preguntar con un input la cantidad de cada variable que quiere el usuario, pero no quería hacerlo fácil xd
#1654 Elige de manera aleatoria el número de letras, números y caracteres, algo así:
Long_Pass = 8
Cant_Let = np.random.randint(0, Long_Pass-2)
Cant_Num = np.random.randint(Cant_Let, Long_Pass-1)
Cant_Carac = Long_Pass - Cant_Let - Cant_Num
Otra forma si tienes generadas las tres contraseñas de 8 dígitos cada una es generar un vector de enteros de la misma longitud y de valores entre 0 y 2. Si en esa posición hay un 0, en la contraseña final en esa posición habrá una letra, si en esa posición hay un 1 habrá un número y si hay un 2 habrá un caracter. Por ejemplo el vector [0 1 0 2 1 2 1 0] sería como decir que en la pass final la forma es [Letra Número Letra Caracter Número Caracter Número Letra]. Con esto te aseguras de que la distribución de números, letras y caracteres es "equiprobable". Te dejo un código muy sencillito de entender para un nivel bajo-medio:
Pass_Let = "abcdefgh"
Pass_Num = "01234567"
Pass_Caract = "£$%^&@[]"
Vector = np.random.randint(0,3,size=8)
Pass = []
for i in range(Long_Pass):
if Vector [i] == 0:
Pass.append(Pass_Let[i])
elif Vector [i] == 1:
Pass.append(Pass_Num[i])
elif Vector [i] == 2:
Pass.append(Pass_Caract[i])
Buenas gente tengo una duda muy sencilla seguramente pero no entiendo pk no funciona.
Resulta que tengo una lista [1,2,3] y quiero odernarla al reves, es decir [3,2,1,] he buscado online y veo que se puede usar .reverse() o .reversed() bien mi problema es que .reverse() me devuelve none
a=[1,2,3]
print(a.reverse())
He visto que se puede hacer con slicing [::-1] pero no entiendo pk en los ejemplos que veo online funciona con reverse y yo no consigo hacerlo funcionar
#1656 no estoy delante del pc ahora mismo pero diría que .reverse() es un metodo que modifica la propia lista cambiando a.
Creo que tienes que hacerse a.reverse() y luego print a
En cambio con reversed() que es una funcion que devuelve los valores en distinto order pero no modifica la propia lista a no ser que la reasignes con a = reversed(a)
Algo así me suena que era
#1656 https://www.w3schools.com/python/ref_list_reverse.asp
#1657 reversed devuelve un iterator, reverse una lista que es iterable, no se muy bien la diferencia xd
#1658 reverse no devuelve nada, updatea la lista y ya, de ahi que no le funcione con el print
Si no se especifica un "return" cpython siempre va a devolver "none". Ya sea invocando una función, o al ejecutar "scripts"....
Puedes ver el bytecode que se genera con "dis":
import dis
def mytest():
print("Test!")
def mytestB():
print("Test!")
return 1234
dis.dis(mytest)
dis.dis(mytestB)
dis.dis("tt=123")
Ten en cuenta que las listas son de tipo mutable... así que, al menos que no te interese hacerlo... clonarla/crear una nueva no tiene sentido. Podrías decir... ¿y porque no simplemente devuelve la referencia a la lista? Supongo para forzar que no hagas "mylist = mylist.reverse()" y ahorrarse instrucciones.
Tengo una duda: Si quiero copiar una lista de un lugar de internet, para crear una lista con ella... Cómo lo hago si cada elemento está separado por un enter? Me refiero:
Existe una forma de que este formato me lo pase a una lista?
#1663 guarda en un file, la lees por linea y vas rellenado la lista. También puedes usar BS y ni tirar de file.
Una pregunta, aqui me gustaria que parase cuando llega a 50, pero como esta se para cuando llega a 47.593, lo puedo "arreglar" que en vez de poner >50 sea >51
Si pongo >= 50 sigue haciendo lo mismo, se puede mejorar lo que tengo? anteriormente lo habia hecho con un for loop pero luego pensando vi que con un while se podia hacer lo mismo y me quitaba los If´s.
Se trata de calcular el 6% empezando en el 100% de cada mes, pero se va calculando por mes, es decir el mes 1 es 100 el 2 es 94 el tercero es el 6& del mes 2 , etc y debe parar en 50 no menos
potency = 100
month = 0
while potency >= 50:
percent = (float(potency) * 0.06)
potency = round(float(potency) - float(percent),3)
month +=1
print(f"Month {month}")
print(f"Potency {potency}%")
#1667 El principal problema es que estás comprobando "potency" demasiado tarde... una solución sería que la comprobación del bucle solo tenga en cuenta valores en caso de que se vaya la cosa de madre... y hacer un "break" dentro del bucle cuando la condición de que potency<50.
Por ejemplo... ya que son 12 meses ... y para no marear con si month empieza en 0 pero no...
potency = 100.0
month = 1
while month <= 12:
percent = potency * 0.06
potency = round(potency - percent, 3)
if potency < 50:
break
print(f"Month {month}")
print(f"Potency {potency}%")
month += 1
** Ya que "potency" siempre va a tender a ser menor que 50 ... si no quieres "limitarlo" a 12 meses... podrías hace un bucle "infinito" (while True:), sabiendo que la condición de "potency<50" lo va a terminar parando si o si.
#1668 Entiendo, gracias, cuando lo hice con el for loop, tenia el break igual que has puesto tu, pero quise intentar hacerlo mas compacto el codigo.
Tengo una duda con sqlite3 , he creado una tabla y si intento obtener solo un dato de ella por la columna id , funciona perfecto , pero si lo intento por la columna nombre o apellido me dice "no such column" , no encuentro la solucion , que podria ser?
import sqlite3
from alumnos import Alumnos
clase = []
alumno1 = Alumnos(1, "Carlos", "Perez")
clase.append((alumno1.id, alumno1.nombre, alumno1.apellido))
alumno2 = Alumnos(2, "Luis", "Vazquez")
clase.append((alumno2.id, alumno2.nombre, alumno2.apellido))
alumno3 = Alumnos(3, "Juanjo", "Ballesta")
clase.append((alumno3.id, alumno3.nombre, alumno3.apellido))
alumno4 = Alumnos(4, "Ricardo", "Bayo")
clase.append((alumno4.id, alumno4.nombre, alumno4.apellido))
alumno5 = Alumnos(5, "Javi", "Yllana")
clase.append((alumno5.id, alumno5.nombre, alumno5.apellido))
alumno6 = Alumnos(6, "Roberto", "Pelaez")
clase.append((alumno6.id, alumno6.nombre, alumno6.apellido))
alumno7 = Alumnos(7, "Maria", "Fandiño")
clase.append((alumno7.id, alumno7.nombre, alumno7.apellido))
alumno8 = Alumnos(8, "Mati", "Argentino")
clase.append((alumno8.id, alumno8.nombre, alumno8.apellido))
conn = sqlite3.connect("Alumnos.db", isolation_level=None)
cursor = conn.cursor()
cursor.execute("""CREATE TABLE if not exists Alumnos (
ID INT PRIMARY KEY,
nombre TEXT,
apellido TEXT)""")
cursor.executemany("INSERT or replace into Alumnos VALUES(?,?,?)", clase)
alumno = cursor.execute("SELECT * FROM Alumnos WHERE nombre=Roberto")
print(alumno.fetchone())
cursor.close()
conn.close()
Salida : alumno = cursor.execute("SELECT * FROM Alumnos WHERE nombre=Roberto")
sqlite3.OperationalError: no such column: Roberto
EDIT: Vale , me auto respondo , al ponerlo asi , si me funciona: alumno = cursor.execute("SELECT * FROM Alumnos WHERE nombre=?", ("Roberto",)) ,aun asi sigo sin entender porque con id si funcionaba y con el resto no, si alguien lo pudiera explicar xD
Buenas, tengo una duda, estoy usando Pycharm para un proyecto con Python. En el equipo tengo instalado SQLite3 perfectamente, pero en Pycharm no me reconoce el archivo. ¿Debo instalar algún plugins en concreto en Pycharm?
Grax!
#1673 por lo que se python incluye herramientas para manejo de sqlite por defecto, no hay que instalar nada de nada, no tiene que ver con pycharm.
A no ser que te refieras a ver la base de datos desde pycharm como una tabla de datos, en ese caso si mal no recuerdo es una feature de la version de pago de pycharm, asi que no creo que dejen que haya ningun plugin con eso
#1674 Seguramente sea lo segundo que dices, porque a la persona que estoy viendo se le abre desde Pycharm.
Muchas gracias por responder!
#1663 Guardas en un archivo y luego usas split que devuelve una lista, así:
lista = cadena.split("\n")
Hey muchachos, tengo un par de millones de archivos json en s3 que me gustaría cargar en python. ¿Alguna recomendación para hacer esto eficiente?
¡Gracias!
#1677 ¿Que entiendes por cargar? ¿Dejarlos en memoria de forma permanente? ¿Subirlos procesarlos y guardar el resultado en otro sitio? ¿De cuantos GBs de datos estamo hablando?
Gracias por responder, #1678. En local debo hacer una clasificación sobre el texto de un campo de cada uno de los json, que son pequeños (de media < 10 kb). Así que mi idea es cargar todos los archivos json en local, estimo que serán unos 15 Gb de ram, y luego correr el clasificador.
#1679 tienes varias opciones. Las tres más directas serían: traer los ficheros a local e ir procesándolos ahí, crear una instancia EC2, configurarla y procesarlos (no le veo mucho sentido a esta opción), o usar AWS Lambda con una imagen Docker en la que tengas el clasificador. ¿Que es mejor? Depende del flujo de datos y lo que quieras hacer en un futuro. Si te interesa automatizarlo y que en un futuro los archivos que se vaya subiendo hagan esa clasificación de forma automática tiraría por Lambda aunque para esta primera ejecución inicial tendrías que hacerlo por bloques y no en una sola ejecución, pues hay límite de RAM sobre 10GB y 15 minutos de ejecución, y además, es más recomendable usar Lambda con menos memoria pues el precio se dispara mucho, no es lo más óptimo en cuanto a rendimiento/$ y el ‘fine-tuning’ de la memoria es algo que varía de caso a caso (aunque para el volumen de datos que estas manejando no va a ser muy grande la diferencia). El lado 'negativo' es que tienes que ver como juntar luego esos archivos que contienen los resultados de las clasificaciones, aunque es algo prácticamente trivial. Y como recomendación procesar cosas en ARM sale más barato que con x86 en AWS.
También existirán otras 15 formas de hacerlo porque AWS es inmenso, pero lo más directo debería ser eso.
Si quieres hacerlo todo con python vas a tener que usar boto3 (el SDK de AWS para python). https://boto3.amazonaws.com/v1/documentation/api/latest/index.html