Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: 987123564 en 12 Agosto 2016, 18:07 pm



Título: Revisar programa python
Publicado por: 987123564 en 12 Agosto 2016, 18:07 pm
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
  1. """
  2. Nota: Los episodios de pokemon se llaman asi:
  3. P0k3M0N.numero_temporadaxnumero_episodio.Es.avi.mp4
  4. Ejemplo: P0k3M0N.1x01.Es.avi.mp4
  5. """
  6. import webbrowser
  7. import os
  8. import temporadas
  9. import time
  10.  
  11. #abre el archivo ultimo que contiene el utlimo episodio al que se accedio
  12. f1 = open('ultimo.txt', 'r')
  13.  
  14. #abre el archivo ultimos que contiene los utlimos episodios a los que se accedieron
  15. f4 = open('ultimos.txt', 'r')
  16.  
  17. #variable que guarda si el usuario quiere salir del bucle
  18. salir = False
  19. lista1 = []
  20. lista2 = []
  21.  
  22. #añade a lista todos los archivos que tengan P0k3M0N en el nombre que hay en el directorio actual
  23. for archivo in os.listdir("."):
  24.    if "P0k3M0N" in archivo:
  25.        lista1.append(archivo)
  26.  
  27. #añade a lista2 solo el numero del episodio
  28. for i in lista1:
  29.    index = i.find("x")
  30.    str1 = i[index + 1:index + 3]
  31.    lista2.append(str1)
  32.  
  33. #muestra el ultimo episodio que se puso
  34. print("Ultimo: " + f1.readline())
  35. #muestra los ultimos episodios que se pusieron
  36. print("Ultimos: " + f4.readline())
  37.  
  38. f1.close()
  39. f4.close()
  40.  
  41. x = 1
  42. lista3 = []
  43. lista4 = []
  44.  
  45. for i in range(int(lista2[-1])):
  46.    y = str(x)
  47.    if y in lista2:
  48.        lista3.append(str(x))
  49.    x += 1
  50.  
  51. cuenta1 = 0
  52. cuenta2 = 0
  53.  
  54. for i in lista4:
  55. cuenta1 += 1
  56.  
  57. for i in lista3:
  58. cuenta2 += 1
  59.  
  60. if cuenta1 != 0:
  61. print("Tienes sueltos los siguientes: " + str(lista4))
  62.  
  63. if cuenta2 != 0:
  64. print("Tienes seguidos desde el " + lista3[0] + " hasta el " + lista3[-1])
  65.  
  66.  
  67. while salir == False:
  68.    print("[1] Temporada completa")
  69.    print("[2] Episodios sueltos")
  70.    print("[3] Salir")
  71.    input2 = input()
  72.    input1 = str(input2)
  73.    if input1 == "3":
  74.        salir = True
  75.    else:
  76.        if input1 == "1":
  77.            temporada = input("Temporada: ")
  78.            episodios = temporadas.episodios(temporada)
  79.            index = episodios.find("-")
  80.            primero = episodios[:index]
  81.            segundo = episodios[index + 1:]
  82.            x = int(primero)
  83.            for i in range(int(segundo) - int(primero)):
  84.                if len(str(x)) == 1:
  85.                    url = "http://seriesblanco.com/serie/979/temporada-" + str(temporada) + "/capitulo-0" + str(x) + "/pokemon.html"
  86.                    webbrowser.open_new_tab(url)
  87.                    time.sleep(20)
  88.                else:
  89.                    url = "http://seriesblanco.com/serie/979/temporada-" + str(temporada) + "/capitulo-" + str(x) + "/pokemon.html"
  90.                    webbrowser.open_new_tab(url)
  91.                    time.sleep(20)
  92.                x += 1
  93.        else:
  94.            input4 = input("Temporada: ")
  95.            temporada = str(input4)
  96.            arch = open('temporadas.txt', 'r')
  97.            total = arch.readlines()
  98.            numero = total[int(input4) - 1]
  99.            search1 = numero.find("-")
  100.            search2 = numero.find("\n")
  101.            segundo = numero[search1 + 1:search2]
  102.            print("Esta temporada tiene " + segundo + " capitulos")
  103.            input3 = input("Episodios: ")
  104.            episodios = str(input3)
  105.            if "-" in episodios:
  106.                index = episodios.find("-")
  107.                primero = episodios[:index]
  108.                segundo = episodios[index + 1:]
  109.                x = int(primero)
  110.                numeros = "123456789"
  111.                for i in range(int(segundo) - int(primero) + 1):
  112.                    if str(x) in numeros:
  113.                        url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-0" + str(x) + "/pokemon.html"
  114.                        webbrowser.open_new_tab(url)
  115.                    else:
  116.                        url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-" + str(x) + "/pokemon.html"
  117.                        webbrowser.open_new_tab(url)
  118.                    x += 1
  119.                    if int(segundo) > 10:
  120.                        time.sleep(10)
  121.                os.remove("ultimos.txt")
  122.                f3 = open('ultimos.txt', 'w')
  123.                f3.write(episodios)
  124.                f3.close()
  125.            elif "," in episodios:
  126.                numeros = "123456789"
  127.                cuenta = 0
  128.                lista = []
  129.                index = episodios.find(",")
  130.                numero = episodios[:index]
  131.                lista.append(numero)
  132.                while index != -1:
  133.                    index = episodios.find(",")
  134.                    print(index)
  135.                    if episodios[index + 1] == " ":
  136.                        episodios = episodios[index + 2:]
  137.                        print(1)
  138.                    elif episodios[index + 1] in numeros:
  139.                        print(episodios)
  140.                        episodios = episodios[index + 1:]
  141.                        print(episodios)
  142.                        print(2)
  143.                    numero = episodios[:index]
  144.                    lista.append(numero)
  145.                lista.pop(-1)
  146.                print(lista)
  147.                for i in lista:
  148.                    cuenta += 1
  149.                for i in range(cuenta):
  150.                    if len(lista[i]) == 1:
  151.                        url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-0" + lista[i] + "/pokemon.html"
  152.                        webbrowser.open_new_tab(url)
  153.                    else:
  154.                        url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-" + lista[i] + "/pokemon.html"
  155.                        webbrowser.open_new_tab(url)
  156.            else:
  157.                if len(episodios) == 1:
  158.                    url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-0" + episodios + "/pokemon.html"
  159.                    webbrowser.open_new_tab(url)
  160.                    os.remove("ultimo.txt")
  161.                    f2 = open('ultimo.txt', 'w')
  162.                    f2.write(episodios)
  163.                    f2.close()
  164.                else:
  165.                    url = "http://seriesblanco.com/serie/979/temporada-" + temporada + "/capitulo-" + episodios + "/pokemon.html"
  166.                    webbrowser.open_new_tab(url)
  167.                    os.remove("ultimo.txt")
  168.                    f2 = open('ultimo.txt', 'w')
  169.                    f2.write(episodios)
  170.                    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
  1. def episodios(n_temporada):
  2.        f = open('temporadas.txt', 'r')
  3.        temporadas = f.readlines()
  4.        temporada = temporadas[int(n_temporada) - 1]
  5.        index = temporada.find('\n')
  6.        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  ;-).


Título: Re: Revisar programa python
Publicado por: tincopasan en 12 Agosto 2016, 20:53 pm
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
  1. print("[1] Temporada completa")
  2. print("[2] Episodios sueltos")
  3. print("[3] Salir")
¿para qué tantos print?

Código
  1. print("""
  2.    [1] Temporada completa)
  3.    [2] Episodios sueltos)
  4.    [3] Salir
  5.          """)

3)
Código
  1. input2 = input()
  2. input1 = str(input2)

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

4)
Código
  1. if input1 == "3":
  2.        salir = True
  3.    else:
  4.        if input1 == "1": #etc
  5.  

podría ser:
Código
  1. if input1 == "3":
  2.        salir = True
  3. elif input1 == "1":  #etc
  4.  

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
  1. print("Tienes seguidos desde el " + lista3[0] + " hasta el " + lista3[-1])
no está mal pero se podría:
Código
  1. 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.

 


Título: Re: Revisar programa python
Publicado por: 987123564 en 13 Agosto 2016, 00:18 am
1) podés usar como mínimo funciones para que sea más claro y fácil de modificar
Código
  1. print("""
  2.    [1] Temporada completa)
  3.    [2] Episodios sueltos)
  4.    [3] Salir
  5.          """)
Yo pensaba que poner tres comillas solo servía para describir las funciones pero ahora ya o sé.  ;D
Citar
3)
Código
  1. input2 = input()
  2. 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
  1. if input1 == "3":
  2.        salir = True
  3.    else:
  4.        if input1 == "1": #etc
  5.  

podría ser:
Código
  1. if input1 == "3":
  2.        salir = True
  3. elif input1 == "1":  #etc
  4.  
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
  1. print("Tienes seguidos desde el " + lista3[0] + " hasta el " + lista3[-1])
no está mal pero se podría:
Código
  1. 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