Revisar programa python

Iniciado por 987123564, 12 Agosto 2016, 18:07 PM

0 Miembros y 1 Visitante están viendo este tema.

987123564

Hola, he hecho un programa que te manda a unas páginas web para descargar episodios de pokemon según la temporada y episodios que introduzcas. Me encantaría que me dijesen como mejorarlo y algunos errores que pueda tener. Gracias por adelantado  ;-).
Saludos.
Código (python) [Seleccionar]

"""
Nota: Los episodios de pokemon se llaman asi:
P0k3M0N.numero_temporadaxnumero_episodio.Es.avi.mp4
Ejemplo: P0k3M0N.1x01.Es.avi.mp4
"""
import webbrowser
import os
import temporadas
import time

#abre el archivo ultimo que contiene el utlimo episodio al que se accedio
f1 = open('ultimo.txt', 'r')

#abre el archivo ultimos que contiene los utlimos episodios a los que se accedieron
f4 = open('ultimos.txt', 'r')

#variable que guarda si el usuario quiere salir del bucle
salir = False
lista1 = []
lista2 = []

#añade a lista todos los archivos que tengan P0k3M0N en el nombre que hay en el directorio actual
for archivo in os.listdir("."):
   if "P0k3M0N" in archivo:
       lista1.append(archivo)

#añade a lista2 solo el numero del episodio
for i in lista1:
   index = i.find("x")
   str1 = i[index + 1:index + 3]
   lista2.append(str1)

#muestra el ultimo episodio que se puso
print("Ultimo: " + f1.readline())
#muestra los ultimos episodios que se pusieron
print("Ultimos: " + f4.readline())

f1.close()
f4.close()

x = 1
lista3 = []
lista4 = []

for i in range(int(lista2[-1])):
   y = str(x)
   if y in lista2:
       lista3.append(str(x))
   x += 1

cuenta1 = 0
cuenta2 = 0

for i in lista4:
cuenta1 += 1

for i in lista3:
cuenta2 += 1

if cuenta1 != 0:
print("Tienes sueltos los siguientes: " + str(lista4))

if cuenta2 != 0:
print("Tienes seguidos desde el " + lista3[0] + " hasta el " + lista3[-1])


while salir == False:
   print("[1] Temporada completa")
   print("[2] Episodios sueltos")
   print("[3] Salir")
   input2 = input()
   input1 = str(input2)
   if input1 == "3":
       salir = True
   else:
       if input1 == "1":
           temporada = input("Temporada: ")
           episodios = temporadas.episodios(temporada)
           index = episodios.find("-")
           primero = episodios[:index]
           segundo = episodios[index + 1:]
           x = int(primero)
           for i in range(int(segundo) - int(primero)):
               if len(str(x)) == 1:
                   url = "http://seriesblanco.com/serie/979/temporada-" + str(temporada) + "/capitulo-0" + str(x) + "/pokemon.html"
                   webbrowser.open_new_tab(url)
                   time.sleep(20)
               else:
                   url = "http://seriesblanco.com/serie/979/temporada-" + str(temporada) + "/capitulo-" + str(x) + "/pokemon.html"
                   webbrowser.open_new_tab(url)
                   time.sleep(20)
               x += 1
       else:
           input4 = input("Temporada: ")
           temporada = str(input4)
           arch = open('temporadas.txt', 'r')
           total = arch.readlines()
           numero = total[int(input4) - 1]
           search1 = numero.find("-")
           search2 = numero.find("\n")
           segundo = numero[search1 + 1:search2]
           print("Esta temporada tiene " + segundo + " capitulos")
           input3 = input("Episodios: ")
           episodios = str(input3)
           if "-" in episodios:
               index = episodios.find("-")
               primero = episodios[:index]
               segundo = episodios[index + 1:]
               x = int(primero)
               numeros = "123456789"
               for i in range(int(segundo) - int(primero) + 1):
                   if str(x) in numeros:
                       url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-0" + str(x) + "/pokemon.html"
                       webbrowser.open_new_tab(url)
                   else:
                       url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-" + str(x) + "/pokemon.html"
                       webbrowser.open_new_tab(url)
                   x += 1
                   if int(segundo) > 10:
                       time.sleep(10)
               os.remove("ultimos.txt")
               f3 = open('ultimos.txt', 'w')
               f3.write(episodios)
               f3.close()
           elif "," in episodios:
               numeros = "123456789"
               cuenta = 0
               lista = []
               index = episodios.find(",")
               numero = episodios[:index]
               lista.append(numero)
               while index != -1:
                   index = episodios.find(",")
                   print(index)
                   if episodios[index + 1] == " ":
                       episodios = episodios[index + 2:]
                       print(1)
                   elif episodios[index + 1] in numeros:
                       print(episodios)
                       episodios = episodios[index + 1:]
                       print(episodios)
                       print(2)
                   numero = episodios[:index]
                   lista.append(numero)
               lista.pop(-1)
               print(lista)
               for i in lista:
                   cuenta += 1
               for i in range(cuenta):
                   if len(lista[i]) == 1:
                       url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-0" + lista[i] + "/pokemon.html"
                       webbrowser.open_new_tab(url)
                   else:
                       url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-" + lista[i] + "/pokemon.html"
                       webbrowser.open_new_tab(url)
           else:
               if len(episodios) == 1:
                   url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-0" + episodios + "/pokemon.html"
                   webbrowser.open_new_tab(url)
                   os.remove("ultimo.txt")
                   f2 = open('ultimo.txt', 'w')
                   f2.write(episodios)
                   f2.close()
               else:
                   url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-" + episodios + "/pokemon.html"
                   webbrowser.open_new_tab(url)
                   os.remove("ultimo.txt")
                   f2 = open('ultimo.txt', 'w')
                   f2.write(episodios)
                   f2.close()

También necesita unos ficheros .txt y otro módulo.
El otro módulo se llama temporadas.py y contiene lo siguiente:
Código (python) [Seleccionar]

def episodios(n_temporada):
       f = open('temporadas.txt', 'r')
       temporadas = f.readlines()
       temporada = temporadas[int(n_temporada) - 1]
       index = temporada.find('\n')
       return temporada[:index]

Los ficheros .txt se llaman temporadas.txt, que contiene el número de episodios de cada temporada:
1-83
1-34
1-40
1-51
1-64
1-39
1-51
1-53
1-46
1-51
1-51
1-52
1-33
1-49
1-48
1-44
1-47
1-44

Y los otros son ultimo.txt y ultimos.txt que su contenido se actualiza cada vez que se usa el programa.
Ruego respuesta y que les parece.
Saludos y gracias de antemano  ;-).

tincopasan

mucho código para prestarle atención a todo pero a vuelo de pájaro te dire:
1) podés usar como mínimo funciones para que sea más claro y fácil de modificar
2)
Código (python) [Seleccionar]

print("[1] Temporada completa")
print("[2] Episodios sueltos")
print("[3] Salir")

¿para qué tantos print?

Código (python) [Seleccionar]
print("""
    [1] Temporada completa)
    [2] Episodios sueltos)
    [3] Salir
          """)


3)
Código (python) [Seleccionar]

input2 = input()
input1 = str(input2)


eso es redundancia!  input devuelve una clase string,¿por las dudas la volvés a declarar?

4)
Código (python) [Seleccionar]

if input1 == "3":
        salir = True
    else:
        if input1 == "1": #etc


podría ser:
Código (python) [Seleccionar]

if input1 == "3":
        salir = True
elif input1 == "1":  #etc


dicho sea de paso todo los elif se podrían hacer con el uso de un diccionario   y funciones como te dije antes
5)
Código (python) [Seleccionar]
print("Tienes seguidos desde el " + lista3[0] + " hasta el " + lista3[-1])
no está mal pero se podría:
Código (python) [Seleccionar]
print("Tienes seguidos desde el {} hasta el {}".format(lista3[0],lista3[-1]))

y seguramente hay más cosas que no vi ahora. Con tiempo y ganas lo reviso completo.



987123564

Cita de: tincopasan en 12 Agosto 2016, 20:53 PM
1) podés usar como mínimo funciones para que sea más claro y fácil de modificar
Código (python) [Seleccionar]
print("""
    [1] Temporada completa)
    [2] Episodios sueltos)
    [3] Salir
          """)

Yo pensaba que poner tres comillas solo servía para describir las funciones pero ahora ya o sé.  ;D
Citar
3)
Código (python) [Seleccionar]

input2 = input()
input1 = str(input2)


eso es redundancia!  input devuelve una clase string,¿por las dudas la volvés a declarar?
Ya pero lo que fue es que una vez lo puse así y me decía que lo que devolvía era un int y hasta que no puse eso me daba ese error

Citar
4)
Código (python) [Seleccionar]

if input1 == "3":
        salir = True
    else:
        if input1 == "1": #etc


podría ser:
Código (python) [Seleccionar]

if input1 == "3":
        salir = True
elif input1 == "1":  #etc

Lo que yo pretendía con eso era que se estructurase mejor para que me sea más fácil buscar las distintas partes.
Citar
dicho sea de paso todo los elif se podrían hacer con el uso de un diccionario   y funciones como te dije antes
5)
Código (python) [Seleccionar]
print("Tienes seguidos desde el " + lista3[0] + " hasta el " + lista3[-1])
no está mal pero se podría:
Código (python) [Seleccionar]
print("Tienes seguidos desde el {} hasta el {}".format(lista3[0],lista3[-1]))
Yo soy más o menos nuevo y no me sé estos trucos del diccionario, pero ya me lo voy apuntando. :D

Con esto que me has dicho ya es más de lo que esperaba así que perfecto.
Gracias y un saludo :D