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