Re: [Python-es] De nuevo envío el programa con algunos cambios y nuevas dudas

Miquel Llover miquel en llover.org
Vie Mayo 24 10:36:27 CEST 2002


At 04:45 24/05/02, you wrote:
>Hola a todos. Adjunto el programa que he envié anteriormente, ahora con 
>algunos cambios.
>Hernan (me dirijo a él porque es el que me estaba ayudando), como podrás 
>ver en el código, ahora he usado los diccionarios, como me dijiste pero no 
>he sabido como abrebiar el código más de lo que está. También comentaste 
>que lo podías poner en dos líneas, en resumen: ¿Alguien sabría como abrebiarlo?
>Aparte, esta línea funciona:
>
>  if len(numero) != 9: print "El número debe tener al menos 9 carácteres"
>
>Pero si ejecuto mvlcheck 666 por ejemplo, da error, si excedo los 9 
>carácteres también da error en lugar de hacer el print. ¿Por qué? ¿Cómo 
>arreglarlo?
>
>En un principio creo que está todo, lo siento si me expresé mal pero ya 
>son muchas horas despierto y en breve me voy a la cama.
>Como siempre, se aceptan sugerencias. Gracias a todos y un saludo:
>
>Alfredo - rkt en ifrance.com
>
>
>#!/usr/bin/env python
>
># Programa que devuelve la compañía del número de tlf. móvil que introduzcamos
># Sé que es una tontería y el código sencillo pero a algún novato (como 
>yo) le servirá.
># Los prefijos los tenía de hace tiempo, la lista NO está actualizada
># Muchísimas gracias a la lista de python de Aditel por la ayuda prestada :)
># Alfredo (rkt en ifrance.com)
>
>import sys, string
>
>name = "__main__"

Diria que no tienes que asignarle nada a "name". __name__ es un atributo 
que adquiere el valor del módulo donde se encuentra. Si tu modulo se llama 
mvlchk.py y lo llamas de la forma "$ python mvlchk.py", el atributo 
__name__ tendrá el valor "__main__". Al fina del todo de tu módulo mvlchk 
puedes poner un trozo de código de forma que si se ha llamado directamente, 
te ejecute una prueba (if __name__ = "__main__": ...).
Si el modulo se invoca desde otro (otro programa que utilice el módulo 
mvlchk), dentro de "mvlchk", __name__ tendra como valor el nombre del 
propio módulo (no __main__) de forma que no se ejecutará tu trozo de código 
para pruebas.

Me explico fatal, pero resumiendo: si llamas directamente a "x.py", las 
referencias a "__name__" dentro de "x.py" tendran como valor "__main__". Si 
llamas a "y.py" que a su vez llama a "x.py", las referencias a "__name__" 
dentro de "x.py" tendran un valor distinto de "__main__" ya que "x.py" no 
ha sido llamado directamente.

Parece fácil, pero para explicarlo...

Saludos!

>company = { "Movistar" : "606 608 609 616 619 620 626 629 630 636 639 646 
>649 650 659 660 669 676 679 680 686 689 690 696 699",
>             "Vodafone" : "600 607 610 617 627 666 667 670 677 678 687",
>             "Amena" : "651 652 653 654 655 656 657 658" }
>
>def mvlchk():
>     numero = sys.argv[1]
>     if len(numero) != 9: print "El número debe tener al menos 9 carácteres"
>     else: prefijo = numero[:-6]
>     if prefijo in string.split(company["Movistar"]):
>         print "El número introducido pertenece a Movistar"
>     elif prefijo in string.split(company["Vodafone"]):
>         print "El número introducido pertenece a Vodafone"
>     elif prefijo in string.split(company["Amena"]):
>         print "El número introducido pertenece a Amena"
>     else:
>         print "Los carácteres introducidos no son números o es un número 
> no válido"
>
>if len(sys.argv) == 2:
>     mvlchk()
>else:
>     print """
>     No hombre, se usa así:
>     mvlcheck NUMERO
>     -
>     Ejemplo: mvlcheck 666555444
>     """
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo.py/python-es

------------------------------------------------
Miquel Llover
<miquel en llover.org>
------------------------------------------------






Más información sobre la lista de distribución Python-es