Sunteți pe pagina 1din 15

ComputacincientficaconPythonparamdulosdeevaluacincontinua

enasignaturasdecienciasaplicadas
A N TER IO R |S IG U IEN T E

2.PuestaenMarcha

TABLADECONTENIDOS
Autores

Autores:JosMaraHerreraFernndez,LuisMiguelSnchezBrea
Contenidosdeestecaptulo:

Quesnuevo
Licencia

Windows
Linux
TrabajarconPython
Consolas
IDEs
Pythonpath
Ayudas
Miprimerprograma
Estructuradeunprograma.py
Autoejecucin
Cabecera
Generacindeayudas
CargadeMdulos
Definicindefunciones
Cdigoejecutable:main
Sistemadeverificacindelcdigo

Descargas
Referencias
1.Introduccin
2.PuestaenMarcha
3.LenguajesdeProgramacin
4.MdulosCientficos
5.EcuacionesdeMaxwellenelvaco
6.Polarizacin
7.Interaccinradiacinmateria
8.ndicederefraccin:modelomicroscpico
9.EcuacionesdeFresnel
10.Pulsosdeluz
11.Interferencias
12.Mdulosdeptica
13.Difraccinencampocercano

Como en casi todos los programas, dependiendo del sistema operativo del que disponga nuestro ordenador la
instalacindesoftwarevariarligeramenteyPythonnoesunaexcepcin.Afindequeelsistemaoperativonosuponga
unbacheennuestrocaminohaciaelaprendizajedePython,enestaseccinveremoslainstalacinpasoapasoenlos
dossistemasoperativosmsextendidosenlaactualidad.Paraotrossistemasoperativosrecomendamosallectorqueen
casodedudaacudaalagranbibliografaexistenteenlared.

2.1.Windows

14.Difraccinencampolejano
15.RedesdeDifraccin
16.Procesadopticodelainformacin

BSQUEDA
Ira

AlahoradeinstalarPythonenelsistemaoperativodeMicrosofttenemosdosopcionessegnelusoquevayamosa
hacer del lenguaje de programacin. Por una parte, como ya hemos mencionado en la introduccin, Python es un
leguanjedeprogramacindeusogeneralporloque,sisteeselcaso,recomendamoslainstalacindelpaquetebsico
eincorporarlosmdulosquenecesitemos.EnelsitiooficialdePhythonenlaseccindedescargaspodemosencontrar
diferentes versiones. En la actualidad conviven las versiones 3.3.* y 2.7.* donde * es la ltima versin estable. Las
instalaciones de este libro fueron realizadas con la versin 2.7.2 aunque no vara sustancialmente para versiones
posteriores.Porotraparte,comolaprogramacinquevamosarealizarestorientadaalmbitocientficoacadmicoe
ingenieril, la opcin que ms se ajusta a nuestros intereses es el paquete Python(x,y).Python(x,y) es un software de
desarrollo gratuito que incorpora los principales mdulos necesarios para clculo numrico junto con algn otro
complementoqueanalizaremosposteriormente.LainstalacinessimilaraotrosprogramasdeWindows.Loprimero
quedebemosdehaceresdescargarmoslaltimaversindelprogramadesdelaseccindedescargasdelaweboficial,
http://code.google.com/p/pythonxy/wiki/Downloads?tm=2.
EnlaFigura2podemosverqueenelmismoenlacedisponemosdelasnotasdeinstalacinquerecomendamosrepasar
antesdeiniciarelproceso.Sonunos420MB(yaquetienebastantesaplicaciones).Unavezinstaladoobservaremos
como nuestros archivos con extensin .py se asocian con python por lo que si pinchamos dos veces sobre ellos se
ejecutarn.

Introduzcalostrminosdebsquedaounnombrede
mdulo,claseofuncin.

Figura2.DescargadePython(x,y)desdelaseccincorrespondienteenlaweboficial.Enlasmismapginapodemos
encontrarlasnotasdeinstalacinquedebemosdetenerencuenta.

2.2.Linux
Pythonvieneincorporadoenlamayoradelasdistribucionesexistentes.Sienunaterminalejecutamoselcomando
pythonV

comprobaremosqueversindePythontenemosinstalada.Encasodenoseraspodemosinstalarloejecutando
aptgetinstallpython

Otra opcin es, por ejemplo, desde el centro de software en Ubuntu. Basta con buscar python en el lugar
correspondiente y nos indicar si lo tenemos instalado y si queremos instalarlo o desistalarlo. Para instalar nuevos
mdulossepuedeseguirelmismoprocedimientoyaseadesdelaterminalodesdeelcentrodesoftware.

2.2.1.TrabajarconPython
Alahoradeiniciarseenlaprogramacinesmuyimportanteconocerlasintasisdellenguajequesevaautilizarpara
desarrollar codigo de una manera correcta. De igual importancia es conocer las herramientas de las que disponemos
paraejecutarydepurarelcdigodesarrollado.

2.3.Consolas
Desde el mismo momento en el que Python se instala en el sistema podemos empezar a programar abriendo una
consolainteractivaenunaterminal.Laconsolainteractivamssencillaseejecutadirectamenteenunterminal(Linux)
escribiendo
python

Inmediantamente podremos ir introduciendo lineas de comandos y ejecutar de una en una. En Windows la forma es
equivalente.
Existenconcolasinteractivasmscompletasquenosvanindicandoayudasinmediatasamedidaquevamosescribiendo
cdigo.Seintroducelainstruccionyseejecutadeunaenuna.Estaformadeprogramacinesadecuadacuandosomos
principiantes y estamos desarrollando programas cortos donde nos interesa ver inmediatamente si el resultado es
correctoono.

2.4.IDEs
Lasconsolasnoeselmejorprocedimientoparadesarrollarprogramasextensos.Elcdigoescritoenlaconsolanoes
fcildeseguirydevolverautilizar.UnaprogramacineficazserealizamedianteunEntornodeDesarrolloIntegrado
(IDE, Integrated Developed Environment). Con este acrnimo ingls se describe a toda aplicacin de sofware que
proporcionaunafacilidadcomprensivaalahoradelacreacindeprogramasinformticosseaenellenguajequesea.
NormalmenteunIDEconstadeuneditordecdigofuente,uncompliadory/ounintrprete,herramientasdecreaciny
undepurador.Tambinsuelentenerconsolasinteractivas.EnestaseccinnoscentraremosentresIDEsenparticular:
IDLE,SpyderyEclipse.

IDLE:eselIDEdePythonbasadoenelentornodeventantasthinterydesarrollado100%tambinenPython.
Es el ms simple de los tres que veremos pero para principiantes quizs sea el ms adecuado. Posee modo
depuracinaunqueparaprogramadoresexperimentadossequedabastantecorto.LainstalacinenWindowsse
realizaconlainstalacindelpropiolenguajemientrasqueenelrestodeSOlainstalacinserealizadelaforma
usual. Para ms informacin podemos consultar la documentacin oficial en el siguiente enlace:
http://docs.python.org/2/library/idle.html.EnlaFigura3semuestraunejemplodecreacindeunarrayenla
consoladeIDLE.

Figura3.ConsoladeIDLE.
Spyder:SpyderesunIDEespecficoparaPythonorientadoacientficosydesarrolloingenierilconunainterfaz
muysimilaraMatlab,porloqueeslaopcinmsadecuadacuandosequieremigrardeMatlabaPython.Si
hemosinstaladoPython(x,y),aliniciarelprogramasenosabreunaventanacondiversascaractersitcas.Dentro
de la pestaa Shortcuts nos encontramos el apartado Spyder. Bastar con pinchar en el smbolo del
programa(Figura4)einmediatamentesenosabriraelprograma.Comosiempre,sinosencontramosenlinux
abrimosunaterminalyejecutamoslaorden
sudoaptgetinstallspyder

ytrasunossegundosnosaparecercomoopcinennuestromenu.

Figura4.SpyderenPython(X,Y).Parainiciarelprogramapinchamosenelsmboloresaltadoenlaimagen.
Al iniciar el programa por primera vez vemos que, si hemos sido usuarios de MATLAB, efectivamente nos
encontramosenunentornofamiliar.EnlaFigura5vemosqueenlazonaizquierdadelapantallatenemosuneditorde
cdigo. En la zona central nos encontramos un navegador con nuestros programas y en la zona derecha tenemos la
ayudaylaconsolainteractiva.

Figura5.Spyderconsusdiferentessecciones.
ParamsinformacinpodemosconsultarelmanualoficialdelIDEenhttp://packages.python.org/spyder/
Eclipse:Eclipseesunprogramainformticocompuestoporunconjuntodeherramientasdeprogramacinde
cdigoabiertomultiplataformaparadesarrollarloqueelproyectollamaAplicacionesdeClienteEnriquecido,
opuestoalasaplicacionesClientelivianobasadasennavegadores.Estaplataforma,tpicamentehasidousada
paradesarrollarIDEs,comoelIDEdeJavallamadoJavaDevelopmentToolkit(JDT).Eclipsepuedeserusado
conPythonmediantelainstalacindePydev.PydevesunIDEparaEclipsemuycompletoyconfigurablecon
unmododedepuracinextraordinariamentepotente.DelostresIDEsquehemosvisto,steeselentornoms
complicadoporlacantidaddeopcionesquecontiene.Sinembargoparaelprogramadoravanzadoserelque
mscomodoleresultealahoraderealizarsusprogramas.
Si nos encontramos en el sistema operativo de Microsoft, lo primero que debemos hacer es decargarnos la ultima

versindelprogramaenelsitiooficial,http://www.eclipse.org/downloads/.Enlinux,
sudoaptgetinstalleclipse

TantoenlinuxcomoenWindowssinolostenemosdebemosinstalarlaultimaversindeJavaDevelopmentKit(JDK)
yelJavaRuntimeEnvironment(JRE).ParaconfigurarPyDevenEclipsedebemosdeseguirlossiguientespasos:
1. Abrimos Eclipse y nos vamos a Help > Install New Software. En la pantalla emergente aadimos
http://pydev.org/updatesenelcampoworkwith.

Figura6.InstalaciondePydevenEclipse.
2. PulsamosenAdd,esperamosaqueactualizeelcampodeabajoparapoderseleccionarPyDev,luegopulsamos
enNext,yseguimoselasistenteparacompletarlainstalacin.

Figura7.InstalaciondePydevenEclipse.
3. ReiniciamosEclipse.
4. AhoradeberemosespecificardndeseencuentraelinterpretedepythonenlaspreferenciasEclipse,paraello
nosvamosaEclipse>preferences>PyDev>Interpreter>Python.PulsamosenautoConfig, marcamos
todo(sinoloest)yaceptamos.

Figura8.InstalacindePydevenEclipse.
En este caso tambin tenemos a nuestra disposicin un manual oficial muy completo en
http://pydev.org/manual_101_root.html. Si hemos realizado todos los pasos correctamente podremos ejecutar
programas realizados en python sin ningn problema. En la Figura [figEclipse] podemos ver un ejemplo de la
disposicin de las secciones en Eclipse. Estas seccciones son totalmente configurables por lo que dependiendo de
vuestraspreferenciaslaimagenpuedeonocoincidirconvuestradisposicin.

Figura9.EclipseconPydevconfigurado.

2.5.Pythonpath
Dependiendo el IDE elegido se nos habr creado una carpeta como directorio de trabajo. Sin embargo en ocasiones
puedeinteresarnostrabajarconarchivosfueradeestedirectorio.Paraellodebemosdeaadirlanuevarutadenuestros
archivos.EstaoperacinserealizaenPythonpath.
Spyder:
Tools>PYTHONPATHmanager.
Sebuscaeldirectoriodondetenemoslosprogramas.
Eclipse:
Project>Properties>PydevPYTHONPATH.
Sebuscaeldirectoriodondetenemoslosprogramas.

Figura10.CargadelosdirectoriosenelPythonpath,paraeclipse.

2.6.Ayudas
Lascomandosdeloslenguajesdeprogramacinsonprcticamenteinfinitosy,slomedianteprctica,conseguiremos
aprendernosalgunosdeellos.Sinembargo,enlamayoradeloscasosdebereosacudiraladocumentacinoficialpara
resolvernuestrasdudas.Normalmentecadalenguajedeprogramacintienealgncomandoespecficoparaaccederala
informacinquenosinterese.AdemsmuchosdelosIDEfacilitanelaccesoaestainformacinmediantealgnacceso
directo o alguna ventana permanente. En general los pasos a seguir cuando no sabemos qu comando utilizar o la
sintaxisdesuutilizacinsonlossiguientes.
Google.Elbuscadordeinformacineninternetporexcelencia.Enalgunasocasionesnosabremosmuybienpor
dondeempezaronossabremoselcomandoequivalenteenotrolenguajedeprogramacin.Siellectorhatenido
esa duda seguramente otra persona la haya tenido antes por lo que podremos encontrar la respuesta sin
demasiadoesfuerzo.
Medianteelusodecomandosespecificos.Comohemosmencionado,cadalenguajedeprogramacintieneuna
serie de comandos para accecer a la informacin de los comandos acerca de los cuales tengamos dudas. Por
ejemplosienunaconsolatecleamos
importnumpyasnp
help(np.linspace)

obtendremoslainformacindelinspaceenlamismaconsola,
Helponfunctionlinspaceinmodulenumpy.core.function_base:

linspace(start,stop,num=50,endpoint=True,retstep=False)
Returnevenlyspacednumbersoveraspecifiedinterval.
Returns`num`evenlyspacedsamples,calculatedoverthe
interval[`start`,`stop`].
Theendpointoftheintervalcanoptionallybeexcluded.
Parameters

start:scalar
Thestartingvalueofthesequence.
stop:scalar
Theendvalueofthesequence,unless`endpoint`issettoFalse.
Inthatcase,thesequenceconsistsofallbutthelastof``num+1``
evenlyspacedsamples,sothat`stop`isexcluded.Notethatthestep
sizechangeswhen`endpoint`isFalse.
num:int,optional
Numberofsamplestogenerate.Defaultis50.
endpoint:bool,optional
IfTrue,`stop`isthelastsample.Otherwise,itisnotincluded.
DefaultisTrue.
retstep:bool,optional
IfTrue,return(`samples`,`step`),where`step`isthespacing
betweensamples.
Returns

samples:ndarray
Thereare`num`equallyspacedsamplesintheclosedinterval
``[start,stop]``orthehalfopeninterval``[start,stop)``
(dependingonwhether`endpoint`isTrueorFalse).
step:float(onlyif`retstep`isTrue)
Sizeofspacingbetweensamples.

SeeAlso

arange:Similiarto`linspace`,butusesastepsize(insteadofthe
numberofsamples).
logspace:Samplesuniformlydistributedinlogspace.
Examples

>>>np.linspace(2.0,3.0,num=5)
array([2.,2.25,2.5,2.75,3.])
>>>np.linspace(2.0,3.0,num=5,endpoint=False)
array([2.,2.2,2.4,2.6,2.8])
>>>np.linspace(2.0,3.0,num=5,retstep=True)
(array([2.,2.25,2.5,2.75,3.]),0.25)
Graphicalillustration:
>>>importmatplotlib.pyplotasplt
>>>N=8
>>>y=np.zeros(N)
>>>x1=np.linspace(0,10,N,endpoint=True)
>>>x2=np.linspace(0,10,N,endpoint=False)
>>>plt.plot(x1,y,'o')
[<matplotlib.lines.Line2Dobjectat0x...>]
>>>plt.plot(x2,y+0.5,'o')
[<matplotlib.lines.Line2Dobjectat0x...>]
>>>plt.ylim([0.5,1])
(0.5,1)
>>>plt.show()

EnelcasoconcretodelIDESpydertenemoselObjectinspector.Siescribimosenlacajaobjectlapalabraque
deseamosprobablementeaparezcalaayudadeformaautomtica.Porejemplo,siquieroordenarunalistayno
secmo,podemosescribirsortyaparecerlaformadeutilizacin.AdemstantoenspydercomoenEclipse,
alescribirelcomandonosaparecelaayudadeformaautomticacomopodemosverenlaFigura11

Figura10.AyudaautomticauObjectinspectorenSpyder.

2.6.1.Miprimerprograma
Por tradicin se suele decir que un lenguaje de programacin es ms o menos complicado cuanto ms nos cuesta
implementarelHolaMundo,esdecir,imprimirenpantallaestasdospalabras.Pythonteniendoencuentaestecriterio
esdeloslenguajesmsfcilesyaqueconunasolalneadecdigopodemosobtenerelresultadodeseado
>>>print("HolaMundo")
HolaMundo

sicomparamosconC++,
#include<iostream>
usingnamespacestd;
intmain(){
cout<<"HolaMundo"<<endl;
return0;
}

vemosqueelcdigoesnotablementemslargo.Porcuriosidadyamododeavanceparaeltemasiguientepodemos
vercomoserepresentaunagrficasimplecomoladelsenoenPython,
#!/usr/bin/envpython
#*coding:utf8*
#Cargadelosmdulosnecesarios
importscipyassp
importmatplotlib.pyplotasplt
#Creamoselarrayxdeceroacienconcienpuntos
x=sp.linspace(0,10,100)
#Creamoselarrayycondecadapuntoeselsenodecadaelementodex
y=sp.sin(x)
#Creamosunafigura
plt.figure()

#Representamos
plt.plot(x,y)
#Mostramosenpantalla
plt.show()

(Sourcecode,png,hires.png,pdf)

2.6.2.Estructuradeunprograma.py
EnlaseccinanteriorhemospodidocomprobarlosencilloylegiblequeesunprogramaPython.Noobstante,conel
fin de que el cdigo sea lo ms comprensible posible para cualquiera que se disponga a utilizarlo o modificarlo se
suelenaadirporconveniounaseriedeapartadosylneasdecdicocomplementariasquefacilitansucomprensin.
As,comonormalgeneraltodosnuestrosprogramasdePythondebentenerlossiguientesapartados

2.7.Autoejecucin
#!/usr/bin/envpython
#*coding:utf8*
from__future__importdivision

Laprimeralneadecdigosirveparadeciralsistemaoperativoqueestearchivosepuedeejecutar,esdecir,si
se hace click sobre el archivo, se llama al programa python y se ejecuta. Es el equivalente a los archivos
ejecutables.exeenWindows,aunqueaquelprogramanoestcompilado,sinoqueseinterpreta(estoltimoes
mslento).
La segunda lnea de cdigo sirve para poder utilizar la codificacion utf8. De esta forma podemos poner
acentos,,etc.
Laterceralneadecdigocargaunmduloadicionalquepermitequeladivisinentrenmerosenterospueda
darnmerosfraccionarios.AlserPythonunlenguajedepropsitogeneralladivisinentreenterosdalugara
enteros, lo cual suele ser problematico en clculos cientficos. NOTA: Tambin se puede solucionar
escribiendo,enlugarde3/4,3./4,perodeestaformaelriesgodecometererroresporestacausaesmenor.

2.8.Cabecera
#Nombre:ejemplo_estructura_programa.py
#Propsito:Ejemplodearchivoconlaestructuradeunprograma
#
#Origen:Propio
#Autor:JosMar
aHerreraFernandezyLuisMiguelSanchezBrea
#
#Creacin:12deSeptiembrede2013
#Historia:
#
#Dependencias:scipy,matplotlib
#Licencia:GPL

Esta seccin es estrictamente voluntaria, sin embargo es muy til cuando varios usuarios programan en el mismo
archivo.
Nombre > El nombre del archivo que vamos a crear cuando guardemos por primera vez. En nuestro caso
ejemplo_estructura_programa.py.
Propsito > La finalizad que se persigue al crear el programa, * Crear grfica del seno*, * Calcular los
coeficientesdeunpolinomio*,etc.
Origen > Si el origen del programa no es propio conviene saber su procedencia por si se debe consultar de
nuevolafuenteoriginalenunfuturo.
Autor(es)>Losnombresdeloscreadoresdelprograma.
Creacin>Fechadecreacindelprograma.
Historia>Encasodemodificacinesposterioresesenestasecindondeseindicalamodificacin,lafechade
larealizacinyelautordelamisma.
Dependencias>Mdulosnecesariosparalaejecucindelprograma.Porejemploscipy,matplotlib..
Licencia>Apartadocorrespondientealosderechosdeautor.
Comoseobserva,paraincluiruncomentarioseutilizaelcaracter#

2.9.Generacindeayudas
EnelapartadodeAyudas(2.2.4)aprendimosautilizarelcomandohelpparaobtenerinformacinsobreelusodeun
determinado comando. El resultado es una informacin muy valiosa que nosotros debemos de aadir tambin a
nuestrasfunciones,programasetc.EsloquesedenominaDocstring.Lasayudassedebendeincluirinmediatamente
despes de la cabecera en el caso de ser una descripcin general e inmediantamente despus de cualquier funcin,
clase, etc. La metodologa es simple, todo aquella informacin que creamos necesaria para el Docstring debe de ir
encerradaentreseisparesdecomillasdobles(tresalinicioytresalfinal).Ademsparafuncionesdeberemosdeincluir
lossiguientesapartados:
(Entradas) > (salidas). Se enumeran el tipo de entrados que necesita como entradas la funcin y el tipo de
salidasquenosdevolver,int,bool,float,etc
Descripcin.Ecplicacindelafuncin.
Explicacindecadaentrada.
Explicacindecadasalida.
Test.Ejemplosencilloconelresultadoquepuedaservircomocomprobadordelbuenusodelafuncincreada.
Ejemplodeayudaparaunarchivogeneral,
"""
Descripcin:ArchivoplantillaparagenerarprogramasenPython.
"""

Aunquetodavanohemosvistolasfuncionespodemosverunejemplodeayudaenunafuncinquenosdevuelveel
senodelnmeroqueentremos,
deff1(x=3.3):

"""

*(float)>(float)

*Descripcin:Funcinquedevuelveelsenodeunenterodado.

*Entradas:

x=entero.

*Salidas:

y=seno(entero)

*Test:

>>>print("f1(0.7)")

0.64421768723769102

"""

y=sp.sin(x)

returny

2.10.CargadeMdulos
EnPythonnoesnecesariodeclararlasvariables,locualsuponeunagransimplificacinrespectoaprogramascomoC.
Sinembargoparallamarafuncionesyclasesquenoestnenelarchivoqueseestejecutando,esnecesariodecirle
dndeestn.Sepuedendeclararunmdulo,ollamarasusfuncionesdediversasformas.Enlossiguientesejemplos
cargamosalgunasotodaslasfuncionesdelmdulocientficoscipy.
importscipy
importscipyassp
fromscipyimport*

fromscipyimportsin
fromscipy.fftpackimportfft
importmatplotlib.pyplotasplt

Veamoscomollamaramosalafuncionsindependiendolaformaenlaquehayamoscargadoscipy
importscipy>y=scipy.sin(x),Importamosscipyyllamamosalasfuncionesquetiene.
importscipyassp>y=sp.sin(x),Renombramosscipyconunaliasmscorto.
fromscipyimport*>y=sin(x),importamostodaslasfuncionesquecontienescipy
fromscipyimportsin,cos>y=sin(x),importamosnicamentesinycos
fromscipy.fftpackimportfft>Silosmdulossonmuylargos,sepuedenhacerenvariosarchivos.Entonces
lasfuncionesoclasesestnanidadas.
Estoesdegranutilidadporvariosmotivos:
Permitenoestarpendientedelnombredelasfunciones,clases,etc.Sielnombreserepiteendosmdulos,no
hayproblema,puessabemosaqumdulopertenece
Permite escribir cdigo de forma modular. Para utilizar en mdulo desarrollado por otro programado, por
ejemplooptica.py,lonicoquehayquehaceresllamarloantes,importoptica

2.11.Definicindefunciones
Seguidamentealasdeclaracionesdelosmdulossepuedenescribirlasfuncionesyclasesquevayamosautilizar.Esto
nosignificaqueelprogramavayaarealizarningunaaccin.Enelsiguientetemasevercmohayquedesarrollarel
cdigoparacrearestasfuncionesyclases.
UnaventajadePythonesqueenunmismoprograma(omdulo,segndefinamos)podemosescribirmuchasfunciones
yclasesalavez,porloquesesimplificalarevisindecdigoysumantenimiento.Asimismo,incluirvariasfunciones
enunmismoarchivopermitepoderpasarnuestrocdigoaotrosprogramadoresdeunaformasencilla.
deff1(x=3.3):

"""

*(float)>(float)

*Descripcin:Funcinquedevuelveelsenodeunenterodado.

*Entradas:

x=entero.

*Salidas:

y=seno(entero)

*Test:

>>>print("f1(0.7)")

0.64421768723769102

"""

y=sp.sin(x)

returny

deff2(x=3):

"""

*(float)>(float)

*Descripcin:Funcinquedevuelveelsenodeunenterodado.

*Entradas:

x=entero.

*Salidas:

y=cos(entero)

*Test:

>>print("f2(0.7)")

0.7648421872844885

"""

y=sp.cos(x)

returny

Python no utiliza parntesis o llaves para decir qu cdigo pertenece a una funcin. Es de esencial importancia en
Pythonseguirunsistemadeindentacin.Esdecir,elcdigoqueestdentrodeunafuncintienequeestrindentado
dentro de la funcin como en el ejemplo anterior para que pertenezca a la funcin. Para salirnos de la funcin,
simplementedesindentamoselcdigo.

2.12.Cdigoejecutable:main
A una funcin de Python se la puede llamar de dos formas: a travs de otra funcin python o directamente. El
comportamiento de la funcin puede ser distinto por lo que se debe de tener cuidado. Si, por ejemplo, tenemos el

siguientecodigoalfinaldelarchivo:
if__name__=='__main__':

#Creamoselarrayx

x=sp.linspace(0,10,100)

#Calculamoselsenoyelcosenomediantelasfuncionescreadas.

y1=f1(x)

y2=f2(x)

#Dibujamoslasdosfuncionesenunanicafigura.

plt.figure()

plt.plot(x,y1,'k',label='seno')

plt.hold(True)

plt.plot(x,y2,'r',label='coseno')

plt.show()

Llegadosaestepuntopodemosvernuestraprogramacompletoquenoservirdeplantillaparaelrestodeprogramas
quecreemos,
#!/usr/bin/envpython
#*coding:utf8*
from__future__importdivision
#
#Nombre:ejemplo_estructura_programa.py
#Propsito:Ejemplodearchivoconlaestructuradeunprograma
#
#Origen:Propio
#Autor:JosMar
aHerreraFernandezyLuisMiguelSanchezBrea
#
#Creacin:12deSeptiembrede2013
#Historia:
#
#Dependencias:scipy,matplotlib
#Licencia:GPL
#

"""
Descripcin:ArchivoplantillaparagenerarprogramasenPython.
"""
importscipy
importscipyassp
fromscipyimport*
fromscipyimportsin
fromscipy.fftpackimportfft
importmatplotlib.pyplotasplt

deff1(x=3.3):

"""

*(float)>(float)

*Descripcin:Funcinquedevuelveelsenodeunenterodado.

*Entradas:

x=entero.

*Salidas:

y=seno(entero)

*Test:

>>>print("f1(0.7)")

0.64421768723769102

"""

y=sp.sin(x)

returny

deff2(x=3):

"""

*(float)>(float)

*Descripcin:Funcinquedevuelveelsenodeunenterodado.

*Entradas:

x=entero.

*Salidas:

y=cos(entero)

*Test:

>>print("f2(0.7)")

0.7648421872844885

"""

y=sp.cos(x)

returny

if__name__=='__main__':

#Creamoselarrayx

x=sp.linspace(0,10,100)

#Calculamoselsenoyelcosenomediantelasfuncionescreadas.

y1=f1(x)

y2=f2(x)

#Dibujamoslasdosfuncionesenunanicafigura.

plt.figure()

plt.plot(x,y1,'k',label='seno')

plt.hold(True)

plt.plot(x,y2,'r',label='coseno')

plt.show()

Ejecutando,
(Sourcecode,png,hires.png,pdf)

2.13.Sistemadeverificacindelcdigo
Enelapartadodegeneracindeayudasvimosqueeraconvenienteaadirunapartadodeverificacindelalafuncin
quellamamosTest.Sinembargo,enocasioneslasfuncionessondemasiadogradesparaaadiresteapartado.Enestas
ocasioneslasolucinessimple,noscreamosotrafuncinqueinvoquealaprimeraproporcionandodatosconocidos.
Deestaformacontinuaremosprobandoelbuenfuncionamientodenuestrafuncinsinelinconvenientedelespacio.

ANTERIOR|SIGUIENTE
MOSTRARELCDIGO
Copyright2013,LuisMiguelSnchezBrea.CreadoconSphinx

S-ar putea să vă placă și