Python - Seguimiento de mi primer proyecto [Diario]

B

Actualizado.

Hola, espero que te encuentres bien.

Hace unos dias cree este post donde expresaba lo perdido que estaba en relacion a la programacion, como realizar algo y entrar de lleno en al practica.

Pues bien, el 25 de Octubre empece a hacer el diario. Aqui les dejo lo que quiero realizar:

  • Una app que la primera vez que la abras te indique ponerle un nombre, y apartir de ahi cada vez que la vuelvas a abrir te mostrara la fecha actual seguido de una instruccion ("Escribe") asi sabras que dia escribiste esa entrada. Cuando vuelvas a abrir la aplicacion, se te mostrara lo que hayas escrito dias antes.

El funcionamiento es sencillo, pero me gusta porque estoy haciendo algo. Cuando tenga el codigo le creare una interfaz grafica, todo a su tiempo.

Pues bien, el objetivo de este hilo es yo plantearles las dudas que me vayan surgiendo (y no haya resuelto, tengan por seguro que si publico una duda aqui es porque no tengo ni idea y he gastado tiempo en intentar resolverlo) y ustedes me ayuden dandole luz a mi camino sobre que deberia de pensar a la hora de resolver mi problema.

No quiero la solucion escrita en codigo, quiero indicadores que me ayuden a yo poder pensar y entonces realizar el codigo.

¿Ejemplo? Tengo un problema, quiero sumar dos numeros.

"Pues tienes que pensar donde se guardan esos numeros y que el resultado se debe de guardar en otro lugar"

¿Me explico? mas o menos creo. Aqui les dejo mi codigo a dia de hoy (26 de octubre)

spoiler

Muchas gracias, me aclararon muchas dudas:

  • 1. Hacer algo util, aunque no sea la bomba.
  • 2. Aprender a buscar mejor en internet lo que yo exactamente quiero (lo he notado muchisimo).
  • 3. Aprender a hacerme las preguntas antes de realizar el proyecto. Estos comentarios por parte de @Mahjunia y @JuAn4k4 me ayudaron mucho a estructurarme:

Si acabas de empezar y no sabes por dónde empezar haciendo una to-do list tienes que preguntarte "qué tiene que hacer el usuario?" y te lo vas apuntando/desglosando, y así vas a tener una lista de funcionalidades y sabrás por dónde empezar.

Un ejemplo guarro sería
-ver lista de mensajes
-el usuario da a un botón añador para escribir texto
-el usuario escribe texto en un campo
-darle a botón guardar para guardar el texto
-volver atrás una vez guardado y mostrar lista completa
-usuario puede editar o borrar texto
Etcetc

1) ¿Como empiezo? Te instalas un IDE, te miras "Create react app", la arrancas ves que funcione, commit, push (repo en github) y ya seguir poco a poco:

2) Que necesita la app? X
3) Como lo hago ? buscando en google, encontraras dos, tres soluciones. Eliges una por la que te sea más fácil seguir su documentación y/o te funcione bien.
4) Funciona? No lo toques, y vuelve a 2

  • 4. Saber desde lo mas minimo para el funcionamiento del programa, su creacion y conectar eso que he creado a otra cosa para crear, crear, y crear. Gracias @KoRMuZ .

Hacer la mayoría de los proyectos iniciales sirve para ver el flujo de la aplicación desde que escribe el usuario en un input hasta que recibe los datos procesados, aprender como bien has dicho.

4
B

Pues he terminado el codigo, se que es una chorrada de programa pero me ha ayudado. He pensado mas en este programa que en ejercicios de HackerRank. El codigo seguramente tenga errores, muchos, pero por ahora me funciona y siguiendo el consejo de @JuAn4k4 "si funciona, no lo toques"

Antes que nada gracias, la verdad que despues del hilo que hice Quiero seguir avanzando, pero estoy estancado. senti una motivacion y apoyo a realizar algo. Sin ustedes ser conscientes me han ayudado @zoeshadow @eondev @desu @JuAn4k4

Me ha costado un poco porque me paraba a leer, probaba algunas cosas y tal. Muchas veces me venia la solucion y no estaba delante de PC asi que lo dejaba. Algo de lo que estoy orgulloso es que cada dia que le dedicaba un tiempo al codigo, solucionaba un error o añadia algo que queria.

Resumen del funcionamiento:

spoiler

- Les dejo el codigo en Repl.it.

- El codigo en formato code:

spoiler

Una prueba

Input:

Output en el archivo "Diario.txt":

Esta todo como queria menos algunas cosas como estas:

  • No puedo crear parrafos, cuando ejecuto el programa el metodo .write() espera un Enter para escribir en un archivo.
  • Cuando abro el archivo Diario.txt si mi input ha sido de muchos caracteres lo lee todo en una sola linea y no en un formato de parrafo.

¿Ahora que?

El codigo es un programa de consola, lo que tengo pensado para seguir aprendiendo es llegar a crear una interfaz grafica con Tkinter (u otra mas, recomendaciones aceptadas). Asi poder añadirle boton de creacion de una entrada, borrar una entrada, no poder modificar el texto de la fecha, poder escribir en negrita, cursiva, etc...

2
B

.

2
aren-pulid0

yo no me liaría mucho con git y demás...

Simplemente ve haciendo las cositas que se te ocurran y nos dejas una screenshot de lo que has hecho, te lo hará mas divertido

2
B

Tampoco tiene mucha dificultad usar git, los propios IDEs ya lo tienen integrado... supongo que si usa PyCharm (puedes conseguir licencia gratis Jetbrains de 2 años y luego la puedes ir renovando 1 año), sino npi que use GitKraken o aprenda Git por la línea de comandos y au lo más básico.

1 respuesta
KoRMuZ

Give cane to it! (Inglés perfecto)

1
isvidal

Animos.

PD: Me pone nervioso tu titulo, de verdad: [Diario} Seguimiento de mi proyecto en Python

(Mucho mejor, dame manita si compartes)

2 1 respuesta
B

#7 Tienes razon, pero no puedo modificar el titulo. Me lo apunto para otros hilos :D.

B

.

2
B
spoiler

¿Como ven el codigo? ¿algo para cambiar? ¿algo que nunca deberia hacer?

2 respuestas
aren-pulid0

#10 yo que tú me haría un librito llamado Python Crash Course

1 respuesta
B

#11 este?
https://www.amazon.es/dp/1593279280/ref=cm_sw_r_cp_apa_i_I6dMFbE85D3Z8

2 respuestas
aren-pulid0

#12 Si, pero te lo puedes bajar en PDF, no merece la pena como para comprarlo en físico.

Lleva ejercicios, los conceptos básicos de Python y te dará una guía de estilo de como se escribe en este lenguaje.

Por ejemplo los nombres de las clases son camel case.

class DiarioEscritura:
    pass
1 respuesta
privet

#10 eso de

Objeto_nombre_diario_escritura = nombre_diario_escritura()
Objeto_nombre_diario_escritura.nombre_global()
Objeto_nombre_diario_escritura.escribiendo()

que es? xD

1 respuesta
B

#13 PDF gratis oficial o pirata? No me importa pagar estas cosas originales.

1 respuesta
B

#12 #15 Gracias! Aqui tienen el link en PDF (segunda edicion, 2019) https://www.pdfdrive.com/python-crash-course-a-hands-on-project-based-introduction-to-programming-d190067998.html

#14 Explico lo que yo pretendia desde el principio:

[Esto cuando no habia creado la clase] Necesitaba utilizar la variable filename_created de la funcion nombre_global() dentro de la funcion escribiendo(), pero no podia por encapsulamiento bla bla...

Entonces lo que hice fue crear la clase meter las dos funciones dentro para que funcionen como objetos de una clase, referenciarse asi mismas y poder utilizarlas independientemente del metodo donde este. Es decir, ahora si puedo utilizar la variable filename_created dentro del metodo escribiendo().

Objeto_nombre_diario_escritura = nombre_diario_escritura()
Objeto_nombre_diario_escritura.nombre_global()
Objeto_nombre_diario_escritura.escribiendo()

Son los objetos de la clase, y llamo al metodo de la clase para que corran. Es como si fueran funciones independientes, pero como es una clase he creado un objeto de la clase Objeto_nombre_diario_escritura = nombre_diario_escritura() y he llamado a los metodos de la clase Objeto_nombre_diario_escritura.nombre_global()
Objeto_nombre_diario_escritura.escribiendo()

Consejos, si no deberia hacerlo, otras formas de hacerlo, si es no es correcto. ¡Gracias!

1
B

Actualizacion 27-Oct/28-Oct

Para ahorrarte los primeros parrafos puedes ir al punto "Vamos con mis dudas y objetivos". Recuerda que no busco me escribas el codigo directamente de lo que pregunto y planteo, si no indicaciones, pistas algo para que por mi mismo pensar y llegar a realizarlo. Aqui tienes todo el codigo:

Codigo en Repl.it

Codigo

Me he pasado desde las 7 de la tarde (27-Oct) mas o menos con pausas toqueteando cosas, y se las quiero enseñar para que comenten sobre ellas. Los cambios no han sido muy grandes, pues el funcionamiento del codigo sigue siendo el mismo que el de la primera version que cree.

Sin embargo, he aprendido algunas cosas referentes a los archivos y su manejo. Un listado rapido:

  • Crear el archivo, simplemente crear sin necesidad de que haya algo escrito.
  • Ahora me queda claro que el .close() es importante, pues no puedo escribir en un archivo si esta cerrado.
  • Hay metodos anidados, aunque no lo haya usado
  • Ya conozco bien el uso de la keyword self
  • No hay que tener tantas variables
  • Una variable que guarde una variable anterior si no hay necesidad, no tiene sentido.

Y otras cosas, pero no te quiero dar el coñazo, aqui les dejo una comparacion del primero codigo que publique con este nuevo. Lo veo limpio para mi nivel, me refiero a que he suprimido muchas cosas que vi hoy, no hacian nada de falta. Les dejo una comparacion, izquierda primer codigo derecha codigo a dia de hoy (27/28 Oct):


  • Vamos con mis dudas y objetivos.

1. Ejecutar un metodo una unica vez

Dentro de la clase tengo el metodo (constructor) init que tiene como objetivo que la variable start comience como True

    def __init__(self):
        self.start = True

Vale, lo que busco con este es que cuando llegue el momento de ejecucion del metodo nombre_global(), se cree el archivo y (lo importante en esta pregunta) la variable start que tenia como valor True pase a tener valor False.

    def nombre_global(self):
        self.filename_created = open(input("Nombre del diario. "), 'xt')

    if self.start:
        self.start = False

¿Que busco con esto? que el metodo nombre_global() se ejecute una unica vez, cuando se ejecuta el valor de la variable start del metodo initpasa a valer False, por lo tanto como el metodo nombre_global() solo se ejecutara si start = True no lo hara. Como me enrollo para algo tan sencillo de explicar, pero asi aprendo :D.

¿Estoy planteandolo bien, es viable? No estoy muy convencido de este trozo.

2. Añadir un texto por default cuando lea el archivo.

Bien, las tareas que he cumplido hasta ahora son crear el archivo y poder escribir en el. Lo que quiero hacer, y no he conseguido es que a la hora de leer el archivo me salga en este formato: (Dia/Mes/Año) Lo que escribiste [Dia/Mes/Año hace referencia a la fecha cuando escribiste la entrada].

A la hora de ejecutar el codigo y llegue al metodo donde me toca escribir escribiendo() si me sale el formato que yo he impuesto ["(Dia/Mes/Año) Escribe:"]. Lo hice con este trozo de codigo:

    def escribiendo(self):

    today = date.today()
    date_format = today.strftime("%b-%d-%Y")

    self.filename_created.write(input("(%s) Escribe: " % date_format))
    self.filename_created.close()

¿Problema? A la hora de leer el archivo creado, unicamente puedo leer lo que he escrito y no como yo explique antes quiero que salga. (...archivo me salga en este formato: (Dia/Mes/Año) Lo que escribiste [Dia/Mes/Año hace referencia a la fecha cuando escribiste la entrada].) . He probado varias formas pero ninguna me ha funcionado para mi proposito, les explico una que pense funcionaria pero no:

  • Guarde lo que escribi dentro de otra variable y imprimia esa variable con el formato de la fecha delante pero no, mision fallida.

Entonces, ¿que he de pensar para tener un texto default en un archivo donde yo haya escrito? He visto y probado el metodo .append() pero no, tampoco me funciono.

...Ahora pensando digo, ¿como guardare la informacion? es decir, si escribi una vez cuando ejecute el programa podre volver a escribir en el archivo?... algo habra, pero ya es tarde hay que dormir y cuidarme como me aconsejo @desu .

¡Gracias a todos!

desu

ya que me mencionas, no he leido ni lo que quieres hacer solo he visto el codigo del repl

edit: he visto que es tu primer proyecto, siempre piensa en resolver el problema, ten una actitud de ingeniero = resuelvo problemas. el codigo que escribas es para resolver un problema, como lo hago? Ve rompiendo el problema en sub problemas y resolviendolos. Este es el consejo mas importante que hay que interiorizar.

te dejo otros detalles

spoiler
1
7 días después
B

Actualizado.

zoeshadow

Igual podrías buscar más ejercicios que puedas hacer sin meterte a programar GUIs para solidificar ciertos conocimientos de programación y algoritmia. Por ejemplo...

(esto te serviría para aprender a hacer peticiones http, recoger los datos y transformarlos, una de las principales tareas de los programadores hoy en día)

Usando una api sencilla (como esta), puedes hacer un programa que acepte comandos
myprogram.py --ip -> te devuelva el campo "query" del json que devuelve esa API.
myprogram.py --isp -> te devuelva el campo "isp" del json que devuelve esa API.
Esto te va a obligar a lidiar con JSON/Mapas, hacer peticiones http, recoger comandos de consola

1 respuesta
B

#20 Pues optare por lo que me sugieres "...para solidificar ciertos conocimientos de programación y algoritmia". Gracias, de verdad.

Usuarios habituales