1. aprende python en un fin de semana sqminingsociety
El	contenido	de	la	obra	ha	sido	desarrollado	exclusivamente	por	los	miembros
del	equipo	de	Time	of	Software.
	
	
Reservados	 todos	 los	 derechos.	 Queda	 rigurosamente	 prohibida,	 sin	 la
autorización	escrita	de	Time	of	Software,	bajo	las	sanciones	establecidas	en	las
leyes,	 la	 reproducción	 parcial	 o	 total	 de	 esta	 obra	 por	 cualquier	 medio	 o
procedimiento,	incluidos	la	reprografía	y	el	tratamiento	informático,	así	como	la
distribución	de	ejemplares	mediante	alquiler	o	préstamo	público.
	
Edición	agosto	2018
	
Para	más	información	visita:
www.timeofsoftware.com
www.aprendeenunfindesemana.com
TABLA	DE	CONTENIDO
INTRODUCCIÓN
¿QUÉ	NECESITO	PARA	EMPEZAR?
PROCESO	DE	APRENDIZAJE
Organización
Distribución	del	fin	de	semana
CONCEPTOS	PREVIOS
¿Qué	es	un	programa?
¿Qué	es	programar?
PYTHON
¿Qué	es	Python?
El	ZEN	de	Python
¿Por	qué	Python?
ENTORNO	DE	DESARROLLO
Instalación
Instalación	en	Mac	OS	X
Instalación	en	Microsoft	Windows
Instalación	en	Linux
Familiarizándote	con	el	entorno	de	desarrollo
OBJETIVO	1	–	MANEJO	DE	MENSAJES	POR	PANTALLA
Conceptos	teóricos
print
input
Variables
FASE	1:	Mostrar	información	por	pantalla
FASE	2:	Leer	información	desde	teclado
Ahora	eres	capaz	de…
OBJETIVO	2	–	UTILIZACIÓN	DE	TIPOS	DE	DATOS	BÁSICOS
Conceptos	teóricos
Tipos	de	datos
Operadores
FASE	1:	Números	y	operadores	aritméticos
Suma
Resta
Multiplicación
División
Redondeo	de	números	reales
FASE	2:	Cadenas	de	texto	(Básico)
FASE	3:	Colecciones
Listas
Tuplas
Diccionarios
FASE	4:	Booleanos	y	operadores	lógicos	y	relacionales
Booleanos
Operadores	lógicos
Operadores	relacionales
FASE	5:	Cadenas	de	texto	(Avanzado)
Ahora	eres	capaz	de…
OBJETIVO	3	–	CONTROL	FLUJO	DE	UN	PROGRAMA
Conceptos	teóricos
Bloques	e	Indentación
IF	/	ELIF	/ELSE
FASE	1:	Sentencia	IF
FASE	2:	Sentencia	IF..ELSE
FASE	3:	Sentencia	IF..ELIF..ELSE
Ahora	eres	capaz	de…
OBJETIVO	4	–	BUCLES
Conceptos	teóricos
Bucle
FOR
WHILE
FASE	1:	Bucle	WHILE
FASE	2:	Bucle	FOR
FASE	3:	Bucles	anidados
Ahora	eres	capaz	de…
PROYECTO	1	–	CALCULADORA
Código	fuente	y	ejecución
Ahora	eres	capaz	de…
OBJETIVO	5	–	FUNCIONES
Conceptos	teóricos
Funciones
FASE	1:	Uso	de	una	función
FASE	2:	Funciones	anidadas
Ahora	eres	capaz	de…
PROYECTO	2	–	CALCULADORA	EVOLUTIVA
Código	fuente	y	ejecución
Ahora	eres	capaz	de…
OBJETIVO	6	–	PROGRAMACIÓN	ORIENTADA	A	OBJETOS	BÁSICA
Conceptos	teóricos
Cambio	de	paradigma
Concepto	de	clase	y	objeto
Composición
FASE	1:	Clase	simple
FASE	2:	Composición
Ahora	eres	capaz	de…
PROYECTO	3	–	BIBLIOTECA
Código	fuente	y	ejecución
Ahora	eres	capaz	de…
OBJETIVO	 7	 –	 PROGRAMACIÓN	 ORIENTADA	 A	 OBJETOS
AVANZADA
Conceptos	teóricos
Encapsulación
Herencia
FASE	1:	Encapsulación
FASE	2:	Herencia
FASE	3:	Herencia	múltiple
Ahora	eres	capaz	de…
OBJETIVO	8	–	TRABAJANDO	CON	FICHEROS
Conceptos	teóricos
Manejo	de	ficheros
FASE	1:	Lectura	de	ficheros	de	texto
FASE	2:	Escritura	en	ficheros	de	texto
Ahora	eres	capaz	de…
OBJETIVO	9	–	CONTROL	DE	EXCEPCIONES
Conceptos	teóricos
Excepciones
FASE	1:	Controlando	excepciones
Ahora	eres	capaz	de…
PROYECTO	4:	CALCULADORA	EVOLUTIVA	2
Código	fuente	y	ejecución
Ahora	eres	capaz	de…
PROYECTO	FINAL	–	AGENDA
Código	fuente	y	ejecución
Ahora	eres	capaz	de…
¡CONSEGUIDO!
ANEXOS
Palabras	reservadas
Comentarios	de	código
Caracteres	especiales	en	cadenas
Excepciones	existentes	en	Python
SOBRE	LOS	AUTORES	Y	AGRADECIMIENTOS
MATERIAL	DESCARGABLE
OTROS	LIBROS	DE	LOS	AUTORES
INTRODUCCIÓN
	
¡Bienvenid@	al	maravilloso	mundo	de	la	programación!
	
Has	llegado	hasta	aquí…	¡eso	es	porque	tienes	ganas	de	aprender	a	programar	y
concretamente	 hacerlo	 con	 Python!	 Y	 lo	 mejor	 de	 todo,	 es	 que	 has	 decidido
hacerlo	con	nosotros,	¡muchas	gracias!
	
El	objetivo	del	libro	consiste	en	construir	una	base	sólida	de	programación	y	del
lenguaje	de	programación	Python	para	que	puedas	desenvolverte	ante	cualquier
situación.	 Para	 ello,	 hemos	 diseñado	 un	 método	 de	 aprendizaje	 basado
completamente	en	prácticas	progresivas	junto	con	nociones	básicas	teóricas,	y	lo
mejor	de	todo,	estructurado	de	tal	forma	que	te	permitirá	aprenderlo	en	un	fin	de
semana.
	
Una	 vez	 hayas	 acabado	 el	 libro,	 siguiendo	 el	 modo	 de	 aprendizaje	 que	 te
proponemos,	podemos	garantizarte	que	vas	a	ser	capaz	de	tener	la	autonomía
suficiente	para	llevar	a	cabo	tus	propios	proyectos	de	programación,	o	al	menos
lanzarte	a	que	lo	intentes.
	
Estamos	seguros	de	que,	si	nos	acompañas	hasta	el	final	del	libro,	se	te	van	a
ocurrir	 una	 cantidad	 grande	 de	 ideas	 de	 proyectos	 de	 programación,	 ya	 que
cuantos	más	conocimientos	vas	aprendiendo,	más	curiosidad	desarrollarás	y	más
ideas	te	irán	surgiendo.
	
Te	animamos	a	que	comiences	a	adentrarte	en	este	mundo	y	disfrutes	con	cada
proyecto.	No	desesperes	si	no	lo	consigues	a	la	primera,	ya	que	seguro	que	de
cada	 error	 aprendes	 algo	 que	 te	 sirve	 para	 seguir	 avanzando.	 Ésto	 es	 solo	 el
comienzo.
	
¿Empezamos?
¿QUÉ	NECESITO	PARA	EMPEZAR?
	
Para	aprender	Python	en	un	fin	de	semana,	tal	y	como	te	proponemos	en	el	libro,
necesitarás	lo	siguiente:
	
Un	ordenador,	 con	 total	 independencia	 del	 sistema	 operativo	 que
tenga	 instalado.	 Si	 no	 dispones	 de	 conexión	 a	 internet	 deberás	 de
descargar	 desde	 cualquier	 ordenador	 conectado	 a	 internet	 la
plataforma	de	desarrollo	de	Python	e	instalarlo	en	el	ordenador	que
vas	a	utilizar	durante	todo	el	aprendizaje.	En	los	apartados	siguientes
te	 explicaremos	 los	 pasos	 a	 seguir	 para	 instalar	 el	 entorno	 de
desarrollo	en	cada	uno	de	los	sistemas	operativos	soportados	por	la
plataforma	de	desarrollo	de	Python.
	
Y	por	supuesto…	¡un	fin	de	semana!
	
Al	final	del	libro	encontrarás	la	URL	desde	dónde	puedes	descargar	el	código
fuente	de	todos	los	ejercicios	del	libro.
PROCESO	DE	APRENDIZAJE
	
El	libro	está	escrito	para	ayudarte	a	aprender	Python	de	forma	rápida,	sencilla	y
con	un	enfoque	práctico.	Si	eres	nuev@	en	programación,	en	el	libro	vamos	a
explicarte	de	forma	sencilla	todos	los	conceptos	que	necesitas	saber	para	poder
aprender	a	programar	utilizando	Python.	Si	ya	sabes	programar,	en	el	libro	vas	a
encontrar	todo	lo	que	necesitas	saber	para	tener	una	base	sólida	del	lenguaje	que
te	permita	profundizar	más.
	
Los	 temas	 tratados	 en	 el	 libro	 están	 seleccionados	 de	 forma	 cuidadosa	 y
ordenados	 de	 tal	 forma	 que	 se	 facilita	 el	 aprendizaje	 progresivo	 de	 todos	 los
conceptos	que	se	explican.
	
El	 libro	 tiene	 un	 claro	 enfoque	 práctico,	 con	 multitud	 de	 ejemplos	 que	 te
permitirán	afianzar	todos	los	conocimientos	teóricos	que	te	explicamos.
	
Veamos	cómo	está	organizado	el	libro.
Organización
	
El	aprendizaje	está	dividido	en	dos	partes	claramente	diferenciadas:
	
Bloque	teórico	sobre	el	lenguaje	y	puesta	en	marcha	de	la	plataforma
de	desarrollo.
Teoría	de	programación	y	Práctica.
	
La	 primera	 parte	 del	 aprendizaje	 incluye	 una	 explicación	 teórica	 sobre	 el
lenguaje	 de	 programación	 Python	 y	 todo	 lo	 necesario	 para	 que	 seas	 capaz	 de
montar	toda	la	infraestructura	software	que	necesitas	para	empezar	a	programar
con	Python,	junto	con	la	explicación	básica	de	cómo	programar	con	el	entorno
de	desarrollo.
	
El	 aprendizaje	 práctico	 está	 dividido	 en	 nueve	 Objetivos	 diferentes	 y	 cinco
Proyectos,	 que	 sirven	 para	 afianzar	 los	 conocimientos	 adquiridos	 en	 los
diferentes	Objetivos.
	
Los	Objetivos	tienen	dificultad	incremental.	A	medida	que	se	va	avanzando	se
van	adquiriendo	nuevos	conocimientos	de	mayor	complejidad	que	los	anteriores.
Los	Objetivos	están	compuestos	por	diferentes	ejercicios	que	llamaremos	Fases.
En	cada	Objetivo,	antes	de	empezar,	se	explican	todos	los	conceptos	teóricos	que
se	utilizarán	en	todas	las	Fases	que	lo	componen.
	
Una	 Fase	 es	 un	 conjunto	 de	 ejercicios	 que	 profundizan	 en	 un	 área	 de
conocimiento	dentro	del	Objetivo.	En	cada	Fase	se	indica	el	código	fuente	junto
con	 su	 explicación,	 además,	 se	 incluye	 un	 ejemplo	 de	 ejecución	 del	 código
fuente.
	
Los	Proyectos	son	ejercicios	de	dificultad	avanzada	que	permiten	afianzar	los
conocimientos	adquiridos	en	los	Objetivos	anteriores.	Durante	el	aprendizaje	se
realizan	cinco	Proyectos.
	
Primer	Proyecto:	Afianzar	conocimientos	de	los	Objetivos	del	1	al	4.
Segundo	Proyecto:	Afianzar	conocimientos	del	Objetivo	5.
Tercer	Proyecto:	Afianzar	conocimientos	del	Objetivo	6.
Cuarto	Proyecto:	Afianzar	conocimientos	de	los	Objetivos	del	7	al	9.
Proyecto	Final:	Afianzar	conocimientos	de	todos	los	Objetivos.
El	segundo	y	el	cuarto	Proyecto	son	proyectos	evolutivos	del	primer	Proyecto,
con	ellos	vas	a	ir	aplicando	nuevos	conocimientos	al	primer	Proyecto	para	una
mejor	comprensión	de	todo	lo	que	vas	a	aprender.
Distribución	del	fin	de	semana
	
El	método	de	aprendizaje	ha	sido	diseñado	y	optimizado	para	que	seas	capaz	de
aprender	 Python	 en	 un	 fin	 de	 semana.	 Obviamente,	 el	 tiempo	 de	 aprendizaje
puede	verse	modificado	ligeramente	por	los	conocimientos	previos	que	tengas.
	
La	 secuencia	 de	 aprendizaje	 recomendada	 que	 debes	 seguir	 para	 alcanzar	 el
objetivo	de	aprender	Python	es	la	siguiente:
CONCEPTOS	PREVIOS
	
En	este	apartado	vamos	a	explicarte	una	serie	de	conceptos	previos	que,	aunque
no	están	ligados	a	la	actividad	de	programación,	te	harán	entender	mejor	en	qué
consiste	programar.
¿Qué	es	un	programa?
	
El	primer	concepto	que	tienes	que	entender	cuando	empiezas	a	programar	es	qué
es	un	programa.	Un	programa	es	un	conjunto	de	instrucciones	o	pasos	a	seguir
que	 se	 le	 dan	 a	 un	 ordenador	 de	 forma	 secuencial	 para	 que	 realice	 una	 tarea
específica.
	
El	flujo	normal	de	un	programa	es	el	siguiente:
	
1.	 El	programa	recibe	datos	de	entrada,	normalmente	introducidos	por
los	usuarios	de	éste.
2.	 Ejecuta	las	instrucciones	especificadas	por	el	programador.
3.	 El	programa	obtiene	como	resultado	un	conjunto	de	datos	de	salida.
	
La	siguiente	imagen	muestra	lo	que	sería	un	programa	desde	un	punto	de	vista
de	alto	nivel,	es	decir,	lo	que	ve	un	usuario	relativo	a	un	programa:
¿Qué	es	programar?
	
Una	 vez	 que	 has	 entendido	 qué	 es	 un	 programa,	 llega	 el	 momento	 de	 que	 te
familiarices	con	el	término	“programar”,	que	no	es	otra	cosa	que	la	acción	de
decirle	a	un	ordenador	exactamente	lo	que	tiene	que	hacer	y	cómo	lo	tiene	que
hacer	utilizando	un	lenguaje	de	programación	específico.
	
Los	lenguajes	de	programación	permiten	a	los	programadores	transformar	la	idea
que	 tienen	 del	 programa	 en	 un	 conjunto	 de	 instrucciones	 que	 el	 ordenador	 es
capaz	de	ejecutar.
PYTHON
	
En	 este	 apartado	 vamos	 a	 explicarte	 conceptos	 teóricos	 sobre	 Python	 y	 a
enseñarte	 por	 qué	 es	 un	 lenguaje	 de	 programación	 potente	 y	 por	 qué	 debes
aprenderlo.
¿Qué	es	Python?
	
Python	es	un	lenguaje	de	programación	que	fue	creado	a	finales	de	los	años	80
por	el	holandés	Guido	van	Rossum,	fan	del	grupo	humorístico	Monty	Python,	de
ahí	el	nombre	que	le	puso	al	lenguaje	de	programación.
	
Las	características	del	lenguaje	son	las	siguiente:
	
Simplicidad:	¡La	gran	fortaleza	de	Python!
	
Sintaxis	clara:	La	sintaxis	de	Python	es	muy	clara,	es	obligatoria	la
utilización	de	la	indentación	en	todo	el	código	que	se	escribe.	Gracias
a	esta	característica	todos	los	programas	escritos	en	Python	tienen	la
misma	apariencia.
	
Propósito	 general:	 Se	 pueden	 crear	 todo	 tipo	 de	 programas,
incluyendo	páginas	web.
	
Lenguaje	 interpretado:	 Al	 ser	 un	 lenguaje	 interpretado	 no	 es
necesario	 compilarlo,	 lo	 que	 te	 ahorrará	 tiempo	 a	 la	 hora	 de
desarrollar.	También	implica	que	su	ejecución	sea	más	lenta,	ya	que
los	programas	son	ejecutados	por	el	intérprete	de	Python	en	vez	de
ejecutados	por	la	máquina	donde	lo	arrancas.
	
Lenguaje	 de	 alto	 nivel:	 No	 es	 necesario	 que	 te	 preocupes	 de
aspectos	de	bajo	nivel	como	puede	ser	el	manejo	de	la	memoria	del
programa.
	
Lenguaje	orientado	a	objetos:	 Lenguaje	 construido	 sobre	 objetos
que	incorporan	datos	y	funcionalidades.
	
Open	 Source:	 Python	 ha	 sido	 portado	 a	 los	 diferentes	 sistemas
operativos,	 por	 lo	 que	 puedes	 usarlo	 en	 el	 que	 más	 te	 guste.	 Otra
característica	 de	 ser	 Open	 Source	 es	 que	 es	 un	 lenguaje	 de
programación	gratuito.
	
Extensas	librerías:	Facilitan	la	programación	al	incorporar	mediante
librerías	una	gran	cantidad	de	funcionalidades.
	
Incrustable:	 Es	 posible	 añadir	 programas	 escritos	 en	 Python	 a
programas	escritos	en	C	y	C++.
	
¡Python	 es	 un	 lenguaje	 de	 programación	 muy	 completo!	 De	 todas	 las
características	 que	 tiene,	 la	 clave	 de	 su	 gran	 éxito	 es	 la	 primera	 de	 ellas,	 la
simplicidad	con	la	que	cuenta,	que	lo	hace	perfecto	para	empezar	en	el	mundo	de
la	programación.
El	ZEN	de	Python
	
La	filosofía	del	lenguaje	Python	está	plasmada	en	el	documento	escrito	por	Tim
Peters	que	puedes	encontrar 	 en	https://www.python.org/dev/peps/pep-0020/.		A
continuación,	encontrarás	los	mantras	de	Python	traducidos	al	castellano:
	
Hermoso	es	mejor	que	feo.
Explícito	es	mejor	que	implícito.
Simple	es	mejor	que	complejo.
Complejo	es	mejor	que	complicado.
Sencillo	es	mejor	que	anidado.
Escaso	es	mejor	que	denso.
La	legibilidad	cuenta.
Los	 casos	 especiales	 no	 son	 lo	 suficientemente	 especiales	 para
romper	las	reglas.
Lo	práctico	le	gana	a	la	pureza.
Los	errores	no	deben	pasar	en	silencio.
A	menos	que	sean	silenciados.
Respecto	a	la	ambigüedad,	rechazar	la	tentación	de	adivinar.
Debe	 haber	 una	 –	 y	 preferiblemente	 sólo	 una	 –	 manera	 obvia	 de
hacerlo.
Aunque	 esa	 manera	 puede	 no	 ser	 obvia	 en	 un	 primer	 momento	 a
menos	que	seas	holandés.
Ahora	es	mejor	que	nunca.
Aunque	“nunca”	es	a	menudo	mejor	que	“ahora	mismo”.
Si	la	aplicación	es	difícil	de	explicar,	es	una	mala	idea.
Si	la	aplicación	es	fácil	de	explicar,	puede	ser	una	buena	idea.
Los	espacios	de	nombres	son	una	gran	idea	¡hay	que	hacer	más	de
eso!
¿Por	qué	Python?
	
Actualmente	 existen	 multitud	 de	 lenguajes	 de	 programación	 que	 son	 muy
parecidos	entre	ellos	(Java,	C#,	C++…),	básicamente,	lo	único	que	cambia	entre
ellos	es	la	sintaxis	que	se	utiliza	para	programar.	Esto	es	algo	muy	bueno,	ya	que
aprendiendo	uno	de	esos	lenguajes	no	te	costará	aprender	otro	de	ellos,	por	lo
que	únicamente	tendrás	que	aprender	la	sintaxis	concreta	que	tiene	el	lenguaje
que	deseas	aprender.
	
En	este	apartado	vamos	a	explicarte	las	razones	por	las	que	debes	de	aprender
Python.	Dichas	razones	son	válidas	tanto	si	eres	nuevo	en	la	programación	como
si	no	lo	eres,	aunque,	cuando	termines	de	leer	el	apartado	estamos	seguros	de
que	 tu	 opinión	 será	 que	 Python	 es	 el	 lenguaje	 perfecto	 para	 aprender	 a
programar.
	
Existen	 multitud	 de	 razones	 por	 las	 cuales	 debes	 de	 aprender	 a	 programar	 en
Python.	Veamos	las	más	importantes:
	
Simplicidad
	
La	 característica	 principal	 es	 Python	 es	 que	 es	 un	 lenguaje	 simple,	 reduce
considerablemente	 el	 número	 de	 líneas	 de	 código	 en	 comparación	 con	 otros
lenguajes	y	provee	herramientas	para	realizar	operaciones	de	forma	más	simple
que	como	se	realizan	con	otros	lenguajes.
	
Veamos	 un	 ejemplo	 con	 el	 típico	 primer	 programa	 que	 se	 suele	 realizar	 con
todos	los	lenguajes	de	programación	cuando	empiezas	a	aprenderlos,	el	“Hola
Mundo”.
	
El	programa	en	el	lenguaje	de	programación	Java	sería	el	siguiente:
El	programa	en	Python	sería	el	siguiente:
	
Gracias	 a	 la	 simplicidad	 de	 Python,	 los	 errores	 que	 un	 programador	 pueda
cometer	 cuando	 realiza	 los	 programa	 se	 ven	 reducidos,	 ya	 que	 al	 tener	 que
escribir	 menos	 código	 fuente	 se	 verá	 reducida	 la	 probabilidad	 de	 cometer
errores.	 Además,	 un	 punto	 muy	 importante	 ligado	 a	 la	 simplicidad,	 es	 que	 al
escribir	menos	líneas	de	código	el	tiempo	de	desarrollo	se	ve	reducido,	y	ésto	es
algo	 muy	 importante	 a	 tener	 en	 cuenta	 cuando	 se	 realizan	 proyectos	 de
desarrollo	de	software.
	
¿Qué	opinas?	¡Python	es	muy	sencillo	y	simple	comparado	con	el	resto	de	los
lenguajes!
	
Resultados	rápidos
	
Cuando	estás	aprendiendo	a	programar	te	gusta	ver	resultados	de	lo	que	estás
aprendiendo.	Con	Python	vas	a	poder	ver	los	resultados	de	forma	inmediata.
	
Python	va	a	permitirte	estar	haciendo	programas	a	los	pocos	días	(incluso	horas)
de	haber	empezado,	observarás	que	avanzas	casi	sin	esfuerzo	a	gran	velocidad.
	
Punto	de	partida
	
Python	 es	 un	 lenguaje	 muy	 completo,	 no	 pienses	 que	 por	 ser	 simple	 es	 un
lenguaje	básico.	Con	Python	vas	a	aprender	todos	los	conceptos	existentes	en	el
mundo	 de	 la	 programación,	 como	 por	 ejemplo	 puede	 ser	 la	 programación
orientada	a	objetos	(POO),	hilos…	Python	abarca	todos	los	campos	existentes
dentro	de	la	programación.
	
Librerías
	
Python	 es	 un	 lenguaje	 poderoso.	 A	 medida	 que	 te	 vas	 familiarizando	 con	 el
lenguaje	y	vas	aprendiendo	y	manejando	todas	las	funcionalidades	descubres	que
Python	 dispone	 de	 un	 conjunto	 de	 librerías	 y	 módulos	 muy	 extenso	 que	 te
permiten	 realizar	 cualquier	 tipo	 de	 proyecto,	 con	 total	 independencia	 de	 su
naturaleza.
Desarrollo	web
	
Existen	multitud	de	frameworks	que	utilizan	Python	para	el	desarrollo	web,	entre
ellos,	destaca	Django.	Tal	y	como	puedes	comprobar,	el	mantra	que	encabeza	su
página	web	es	el	mismo	que	Python:
	
	
En	 Django	 Sites	 puedes	 encontrar	 un	 montón	 de	 paginas	 webs	 hechas	 con
Django.
	
Raspberry	Pi
	
Python	es	el	lenguaje	principal	de	programación	de	Raspberry.
	
Comunidad
	
La	comunidad	que	hay	detrás	de	este	lenguaje	de	programación	es	inmensa,	lo
que	 provoca	 que	 el	 lenguaje	 no	 quede	 obsoleto	 y	 vaya	 recibiendo
actualizaciones.	 Otro	 punto	 fuerte	 de	 la	 comunidad	 que	 tiene	 detrás	 es	 la
creación	de	frameworks,	módulos,	extensiones	y	multitud	de	herramientas	que
facilitan	el	desarrollo	con	este	lenguaje.	Los	desarrolladores	en	Python	son	los
primeros	interesados	en	que	haya	más	gente	que	programe	con	Python,	ya	que,
de	esta	forma,	el	número	de	herramientas/frameworks	que	facilitan	el	desarrollo
será	mayor.
	
Una	de	las	cosas	más	importantes	para	alguien	que	empieza	con	un	lenguaje	de
programación	 es	 la	 ayuda	 que	 ofrece	 la	 comunidad	 que	 tiene	 alrededor	 el
lenguaje	de	programación.	Si	te	animas	a	aprender	Python	verás	como	podrás
encontrar	sin	dificultad	la	resolución	de	tus	preguntas/dudas/problemas.
	
¡Programando	en	Python	nunca	te	vas	a	sentir	sólo!
	
Demanda	laboral	alta
	
Python	es	utilizado	por	las	grandes	empresas	tecnológicas	del	mundo…	Saber
Python	implicará	tener	más	posibilidades	de	encontrar	ese	trabajo	que	siempre
has	querido	tener.
ENTORNO	DE	DESARROLLO
	
Python	posee	un	entorno	de	desarrollo	llamado	IDLE	(Integrated	DeveLopment
Environment	o	Integrated	Development	and	Learning	Environment).	El	entorno
de	desarrollo	está	incluido	en	Python	desde	la	versión	1.5	y	está	pensado	para	ser
utilizado	como	entorno	de	aprendizaje	gracias	a	su	simplicidad.
	
Tal	y	como	hemos	comentado	en	el	punto	anterior,	el	nombre	de	Python	hace
honor	 al	 grupo	 cómico	 Monty	 Python,	 pues,	 el	 nombre	 para	 el	 entorno	 de
desarrollo,	 IDLE,	 podría	 haber	 sido	 elegido	 por	 el	 apellido	 de	 uno	 de	 sus
miembros	fundadores,	Eric	Idle.
	
Para	instalar	Python	tienes	que	entrar	en	https://www.python.org.
	
	
Una	 vez	 estés	 dentro	 de	 la	 web	 de	 Python,	 tienes	 que	 navegar	 a	 la	 sección
Downloads.	Por	defecto,	te	saldrá	para	descargar	la	versión	que	se	corresponde
con	el	sistema	operativo	de	tu	ordenador.	Descarga	la	versión	3.7,	que	es	con	la
que	vamos	a	trabajar.
1. aprende python en un fin de semana sqminingsociety
Instalación
	
En	los	siguientes	puntos	voy	a	explicarte	como	instalar	Python	en	los	sistemas
operativos	más	populares:
	
Mac	OS	X
Microsoft	Windows
Linux
	
Instalación	en	Mac	OS	X
	
Una	vez	descargado	el	fichero	tienes	que	ejecutarlo	y	te	aparecerá	la	pantalla	de
inicio	del	instalador:
	
	
Para	 empezar	 a	 instalar	 tienes	 que	 aceptar	 las	 condiciones	 del	 contrato	 de
licencia	de	software	de	Python:
El	siguiente	paso	es	seleccionar	el	disco	duro	en	el	que	vas	a	instalar	Python:
	
El	 instalador	 te	 pedirá	 la	 contraseña	 del	 usuario	 administrador	 para	 poder
continuar	con	la	instalación:
	
	
Una	 vez	 dados	 los	 permisos	 necesarios	 de	 administrador	 para	 realizar	 la
instalación,	ésta	será	completada	por	el	instalador:
Una	 vez	 ha	 finalizado	 la	 instalación,	 el	 IDLE	 de	 Python	 está	 disponible	 para
utilizarse	en	el	Launchpad:
	
	
Instalación	en	Microsoft	Windows
	
Para	 la	 instalación	 de	 Python	 en	 Microsoft	 Windows	 tienes	 que	 ejecutar	 el
instalador	descargado.	En	la	primera	pantalla	del	instalador	puedes	seleccionar	la
ruta	de	instalación,	instalar	para	todos	los	usuarios	y	añadir	Python	al	path	del
sistema.
	
Una	 vez	 tienes	 todo	 seleccionado	 y	 la	 ruta	 de	 instalación	 elegida	 tienes	 que
presionar	“Install	Now”:
El	proceso	de	instalación	finalizará:
	
	
El	acceso	a	IDLE	de	Python	está	dentro	del	menú	inicio.
	
Instalación	en	Linux
	
Después	 de	 descargar	 el	 fichero	 de	 Python	 tienes	 que	 navegar	 utilizando	 el
Terminal	 hasta	 la	 carpeta	 donde	 lo	 has	 guardado	 y	 ejecutar	 el	 siguiente
comando:
	
	
Una	vez	ejecutado	el	comando	anterior,	es	el	momento	de	instalar	Python,	para
ello	 entrarás	 en	 la	 carpeta	 que	 ha	 creado	 el	 comando	 anterior	 y	 ejecutarás	 el
comando	./configure:
	
	
Ahora	ya	tienes	Python	instalado,	llega	el	momento	de	instalar	el	IDLE.	Para
ello	utiliza	el	siguiente	comando	y	te	lo	instalará	de	forma	automática:
	
	
Para	 ejecutar	 IDLE	 es	 tan	 sencillo	 como	 entrar	 en	 el	 Terminal	 y	 ejecutar	 el
comando	idle3:
1. aprende python en un fin de semana sqminingsociety
Familiarizándote	con	el	entorno	de	desarrollo
	
En	este	apartado	se	explicará	el	entorno	de	desarrollo	con	el	que	realizarás	todos
los	objetivos,	fases	y	proyectos	que	te	proponemos	en	este	libro.
	
Al	 abrir	 el	 entorno	 de	 desarrollo	 te	 encuentras	 con	 una	 imagen	 como	 la
siguiente:
	
	
Para	crear	un	nuevo	fichero	de	Python	y	escribir	un	programa	tienes	que	entrar
en	el	menú	File/New	File.	Ésto	te	abrirá	una	nueva	pantalla	en	la	que	escribirás
el	código	fuente	de	tus	programas.
	
	
Una	vez	escribas	el	código	fuente	del	programa	tienes	que	guardarlo	para	poder
ejecutarlo.	Para	ejecutar	el	programa	tienes	que	ir	al	menú	Run/Run	Module	y	el
programa	se	ejecutará.
El	 proceso	 que	 acabas	 de	 hacer	 creando	 un	 fichero	 y	 ejecutándolo	 es	 lo	 que
debes	de	hacer	en	cada	ejercicio	que	te	proponemos	en	el	libro.	Por	tanto,	para
cada	ejercicio	deberás	de	hacer	los	siguientes	pasos:
	
1.	 Crear	un	fichero	nuevo.
2.	 Escribir	el	código	fuente.
3.	 Guardar	el	fichero.
4.	 Ejecutar	el	programa.
	
A	 medida	 que	 vas	 usando	 IDLE	 te	 irás	 dando	 cuenta	 de	 que	 IDLE	 utiliza
diferentes	 colores	 para	 resaltar	 diferentes	 palabras	 reservadas	 y	 diferentes
mensajes	que	se	muestran	en	la	consola	y	en	el	editor	de	código.	Los	colores	que
utiliza	son	los	siguientes:
	
Naranja:	Palabras	reservadas	de	Python.
Verde:	Cadenas	de	texto.
Azul:	Resultado	de	ejecución	de	una	sentencia.
Rojo:	Mensajes	de	error.
Púrpura:	Funciones.
OBJETIVO	1	–	MANEJO	DE	MENSAJES	POR	PANTALLA
	
En	 este	 primer	 objetivo	 vas	 a	 aprender	 a	 manejar	 la	 entrada	 y	 salida	 de
información	a	través	de	la	pantalla.
	
Mostrar	 información	 por	 pantalla	 y	 leer	 información	 de	 los	 usuarios	 son
operaciones	 necesarias	 para	 conseguir	 una	 interactividad	 alta	 con	 las
aplicaciones	que	desarrolles	por	parte	de	los	usuarios	de	éstas.
	
El	objetivo	está	compuesto	por	dos	fases.	En	la	primera	aprenderás	a	mostrar
información	 a	 los	 usuarios	 y	 en	 la	 segunda	 aprenderás	 a	 leer	 información
proveniente	de	los	usuarios.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	los	dos	comandos	con	los	que	empezarás	a
programar	en	Python.
	
print
	
El	 comando	 print	 te	 va	 a	 permitir	 mostrar	 información	 al	 usuario	 de	 la
aplicación.	El	comando	se	puede	utilizar	con	varias	cadenas	a	mostrar	de	una
sola	vez,	separadas	por	comas.	De	esta	forma	simplifica	el	no	tener	que	escribir
una	 sentencia	 por	 cada	 mensaje	 que	 queramos	 mostrar	 por	 pantalla	 de	 forma
secuencial.	Por	defecto,	se	introduce	siempre	un	carácter	de	separación	entre	las
diferentes	cadenas:	el	espacio	en	blanco.
	
Es	posible	utilizar	los	siguientes	parámetros	con	el	comando	print:
	
end:	 permite	 añadir	 una	 cadena	 de	 texto	 como	 elemento	 final	 del
conjunto	de	cadenas	de	texto	que	se	han	enviado	para	mostrar	por
pantalla.
	
sep:	 permite	 añadir	 una	 cadena	 de	 texto	 al	 final	 de	 cada	 cadena
enviada	para	mostrar	por	pantalla	y	sustituir	el	espacio	en	blanco	que
se	introduce	por	defecto	entre	las	diferentes	cadenas	de	texto	que	son
enviadas	para	mostrarse	por	pantalla.
	
input
	
El	comando	input	te	va	a	permitir	leer	información	introducida	por	los	usuarios
de	la	aplicación	mediante	el	teclado.
	
El	 texto	 introducido	 por	 los	 usuarios	 es	 retornado	 por	 el	 comando	 como	 una
cadena	de	texto	simple.	En	el	caso	de	necesitar	un	tipo	de	dato	diferente	tendrás
que	transformar	la	cadena	de	texto	al	tipo	de	dato	que	necesites.
	
Es	necesario	que	el	usuario	de	la	aplicación	presione	la	tecla	Enter	para	que	se
realice	la	lectura	del	texto	introducido.
Variables
	
Las	variables	son	datos	que	necesitas	almacenar	y	utilizar	en	los	programas	y
que	residen	en	la	memoria	del	ordenador.	Tienen	las	siguientes	características:
	
Nombre:	identificador	dentro	del	código	fuente	que	utilizamos	para
usarlas.
Tipo:	tipo	de	dato	que	almacena	la	variable.
Valor:	 valor	 que	 almacenan.	 Al	 declarar	 una	 variable	 tienes	 que
indicarle	un	valor	inicial,	que	puede	verse	modificado	a	medida	que
se	va	ejecutando	el	programa	y	según	vayas	necesitando,	de	ahí	que
se	llamen	variables.
	
Un	 ejemplo	 de	 uso	 de	 variables	 puede	 ser	 la	 necesidad	 de	 almacenar	 en	 tu
programa	 la	 edad	 del	 usuario.	 Para	 ello,	 crearías	 una	 variable	 con	 un	 nombre
concreto	y	el	tipo	de	datos	que	almacenarías	en	ella	sería	un	entero.
	
En	Python	las	variables	se	definen	utilizando	las	letras	de	la	A	a	la	Z,	tanto	en
mayúsculas	como	en	minúsculas,	los	números	del	0	al	9	(excepto	en	el	primer
carácter	 del	 nombre)	 y	 utilizando	 el	 carácter	 “_”.	 El	 lenguaje	 Python	 tiene
palabras	reservadas	que	no	pueden	ser	utilizadas	como	nombres	de	variables,	en
los	anexos	del	libro	puedes	encontrar	la	lista	de	palabras	reservadas	de	Python	y
para	 qué	 se	 utilizan	 cada	 una	 de	 ellas.	 A	 continuación,	 te	 mostramos	 algunos
ejemplos	de	variables:
	
edad	=	4
nombre	=	“Alfredo”
	
La	 primera	 variable,	 edad,	 almacenará	 el	 valor	 numérico	 4,	 mientras	 que	 la
segunda	variable,	nombre,	almacenará	la	cadena	de	texto	“Alfredo”.
	
Tal	y	como	puedes	observar,	en	Python	no	se	establece	el	tipo	de	dato	a	la	hora
de	declarar	una	variable,	realmente	no	existe	una	declaración	propiamente	dicha
como	existe	en	otros	lenguajes,	simplemente	escribes	el	nombre	que	quieres	que
tenga	y	le	asignas	el	valor	correspondiente.
FASE	1:	Mostrar	información	por	pantalla
	
La	primera	fase	de	este	objetivo	consiste	en	el	aprendizaje	del	uso	del	comando
print	mediante	una	serie	de	ejercicios	que	te	permitirán	mostrar	información	por
pantalla	a	los	usuarios.
	
El	primer	ejercicio	de	la	fase	consiste	en	mostrar	por	pantalla	un	par	de	mensajes
de	forma	sencilla.	El	código	fuente	es	el	siguiente:
	
print("¡Hola	Time	of	Software!")
print("Este	es	mi	primer	programa	con	Python")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 utilización	 del	 parámetro	 sep
cuando	utilizas	el	comando	print.	El	código	fuente	es	el	siguiente:
	
print(1,2,3,4,5)
print(1,2,3,4,5,	sep=',')
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	utilización	del	parámetro	end	cuando
utilizas	el	comando	print.	El	código	fuente	es	el	siguiente:
	
print(1,2,3,4,5,	sep=',',	end='.')
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
FASE	2:	Leer	información	desde	teclado
	
La	segunda	fase	de	este	objetivo	consiste	en	el	aprendizaje	del	comando	input
mediante	 una	 serie	 de	 ejercicios	 que	 te	 permitirán	 leer	 la	 información	 que
introducen	los	usuarios	de	la	aplicación.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	lectura	del	nombre	del	usuario	de	la
aplicación	y	la	utilización	del	texto	introducido	en	el	comando	print.	El	ejercicio
utiliza	 la	 variable	 “nombre”	 para	 almacenar	 la	 información	 del	 nombre	 del
usuario	para	mostrarla	después	por	pantalla	en	la	siguiente	instrucción.	El	código
fuente	es	el	siguiente:
	
print("¡Hola!	Somos	Time	of	Software,	¿Como	te	llamas?")
nombre	=	input()
print("Nos	alegramos	mucho	de	que	nos	hayas	elegido	para	aprender	Python,	",	nombre)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	la	utilización	del	comando	input	con
un	texto	como	parámetro.	El	texto	será	mostrado	y	posteriormente	la	aplicación
se	quedará	esperando	a	que	el	usuario	introduzca	el	texto.	El	ejercicio	utiliza	la
variable	“edad”	para	almacenar	la	edad	del	usuario	y	posteriormente	mostrarla
por	pantalla	en	la	siguiente	instrucción.	El	código	fuente	es	el	siguiente:
	
edad	=	input("¿Cuántos	años	tienes?:	")
print("Tienes",edad,"años.")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	primer	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Mostrar	información	por	pantalla.
Lectura	 de	 información	 introducida	 por	 los	 usuarios	 de	 las
aplicaciones	a	través	del	teclado.
Utilización	de	variables.
OBJETIVO	2	–	UTILIZACIÓN	DE	TIPOS	DE	DATOS	BÁSICOS
	
En	este	segundo	objetivo	vas	a	familiarizarte	con	los	diferentes	tipos	de	datos
que	existen	en	Python	y	vas	a	aprender	cómo	puedes	utilizarlos.
	
El	objetivo	está	compuesto	por	cinco	fases.	En	la	primera	aprenderás	a	utilizar
los	números	y	las	diferentes	operaciones	aritméticas,	en	la	segunda	aprenderás	a
utilizar	de	forma	básica	las	cadenas	de	texto,	en	la	tercera	aprenderás	a	utilizas
diferentes	 colecciones	 de	 datos,	 en	 la	 cuarta	 aprenderás	 los	 tipos	 de	 datos
booleanos	 y	 las	 diferentes	 operaciones	 lógicas,	 y	 por	 último,	 en	 la	 quinta
aprenderás	a	utilizar	de	forma	avanzada	las	cadenas	de	texto.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	los	diferentes	tipos	de	datos	que	existen	en
Python	y	las	diferentes	operaciones	que	puedes	realizar	con	los	datos.
	
Tipos	de	datos
	
En	informática,	la	información	no	es	otra	cosa	que	una	secuencia	de	ceros	y	unos
que	se	estructuran	en	bloques	para	facilitar	el	manejo	de	ésta.
	
Por	lo	tanto,	toda	la	información	que	existe	se	encuentra	tipificada	por	el	tipo	de
información	que	es	(tipo	de	dato).	No	es	lo	mismo	una	cadena	de	texto	que	un
número	entero,	o	decimal.
	
Las	variables	en	Python	pueden	ser	de	los	siguientes	tipos:
	
Tipo	de	dato Descripción
Entero Número	 sin	 decimales,	 tanto	 positivo	 como	 negativo,
incluyendo	el	0.
Real Número	 con	 decimales,	 tanto	 positivo	 como	 negativo,
incluyendo	el	0.
Complejo Número	con	parte	imaginaria.
Cadenas	 de
texto
Texto.
Booleanos Pueden	tener	dos	valores:	True	o	False
Conjuntos Colección	de	elementos	no	ordenados	y	no	repetidos.
Lista Vector	de	elementos	que	pueden	ser	de	diferentes	tipos
de	datos.
Tuplas Lista	inmutable	de	elementos.
Diccionario Lista	de	elementos	que	contienen	claves	y	valores.
	
Las	variables	no	tienen	un	tipo	concreto	en	Python,	puedes	utilizar	una	variable
para	almacenar	un	número	en	una	parte	de	tu	programa	y	posteriormente	puedes
utilizarla	para	almacenar	una	lista	de	elementos.
Operadores
	
En	Python	existen	una	serie	de	operadores	que	también	existen	en	los	diferentes
lenguajes	 de	 programación.	 Los	 operadores	 se	 agrupan	 según	 la	 función	 que
realizan:
	
Operadores	de	asignación.
Operadores	aritméticos.
Operadores	relacionales.
Operadores	lógicos.
	
Operador	asignación
	
Aunque	ya	lo	hemos	usado	en	el	objetivo	número	1,	el	operador	de	asignación
‘=’	sirve	para	asignar	un	valor	a	una	variable,	lo	que	esté	en	la	parte	derecha	del
operador	 será	 asignado	 (almacenado)	 en	 la	 variable	 de	 la	 parte	 izquierda.
Veamos	unos	ejemplos:
	
precio	=	923
apellido	=	“Moreno”
numero	=	34
En	el	primer	ejemplo	se	está	asignando	el	valor	923	a	la	variable	precio,	en	el
segundo	ejemplo	se	está	asignando	la	cadena	de	texto	“Moreno”	a	la	variable
apellido,	y	en	el	último	caso	se	está	asignando	el	valor	34	a	la	variable	numero.
	
Operadores	aritméticos
	
Los	 operadores	 aritméticos	 son	 aquellos	 operadores	 que	 nos	 van	 a	 permitir
realizar	operaciones	aritméticas	con	los	datos.
	
Una	buena	práctica	a	la	hora	de	utilizar	operadores	aritméticos	es	la	utilización
de	paréntesis	para	establecer	el	orden	concreto	de	resolución	de	las	operaciones,
ya	que	cada	lenguaje	de	programación	establece	la	resolución	de	forma	diferente
y	puedes	encontrar	resultados	erróneos.	Veamos	unos	ejemplos:
	
resultadomultiplicacion	=	8	*	4
coste	=	(6*11)-4
numerochucheriasporpersona	=	50/4
En	 el	 primer	 ejemplo	 el	 resultado	 de	 la	 multiplicación	 se	 almacenará	 en	 la
variable	 resultadomultiplicacion,	 en	 el	 segundo	 ejemplo	 el	 resultado	 de	 la
operación	será	almacenado	en	la	variable	coste,	y	por	último,	el	resultado	de	la
división	será	almacenado	en	la	variable	numerochucheriasporpersona.
	
Operadores	relacionales
	
Los	 operadores	 relacionales	 son	 aquellos	 que	 van	 a	 permitirte	 realizar
comparaciones	entre	dos	elementos.	Son	los	siguientes:
	
Operador Significado
< Menor	que
> Mayor	que
<= Menor	 o	 igual
que
>= Mayor	 o	 igual
que
== Igual	que
!= Distinto	que
	
El	resultado	de	una	operación	relacional	puede	ser	únicamente	dos	valores:
	
true:	la	comparación	se	cumple.
false:	la	comparación	no	se	cumple.
Veamos	algunos	ejemplos:
	
7<5
9==3
2<12
88>=4
En	el	primer	ejemplo	la	comprobación	devolverá	false,	en	el	segundo	devolverá
false,	en	el	tercero	devolverá	true	y	en	el	cuarto	devolverá	true.
Operadores	lógicos
	
Los	 operadores	 lógicos	 permiten	 combinar	 las	 operaciones	 relacionales	 del
punto	 anterior	 o	 valores	 booleanos	 independientes	 para	 obtener	 un	 único
resultado.	Los	operadores	lógicos	que	puedes	utilizar	son	los	siguientes:
	
AND:	operador	lógico	que	realiza	la	operación	lógica	‘Y’	entre	dos
elementos.	 El	 resultado	 será	 true	 si	 ambos	 elementos	 son	 true,	 en
caso	contrario	será	false.
OR:	 operador	 lógico	 que	 realiza	 la	 operación	 lógica	 ‘O’	 entre	 dos
elementos.	El	resultado	será	true	si	uno	de	los	dos	elementos	es	true,
en	caso	contrario	será	false.
NOT:	 operador	 lógico	 que	 realiza	 la	 operación	 lógica	 ‘NO’.	 El
resultado	será	true	si	el	elemento	es	false,	y	será	false	si	es	true.
Los	operadores	lógicos	pueden	utilizarse	en	expresiones	combinadas,	para	ello,
tal	y	como	te	hemos	explicado	en	los	operadores	aritméticos	te	aconsejamos	que
utilices	paréntesis	para	separar	las	diferentes	expresiones.
	
Veamos	algunos	ejemplos:
	
(5<3)	AND	(4==7)
(1<7)	OR	(3==3)
NOT(6==7)
True	AND	False
En	el	primer	ejemplo	la	comprobación	devolverá	el	valor	false,	en	el	segundo
devolverá	el	valor	true,	en	el	tercero	devolverá	el	valor	true	y	en	el	cuarto	false.
FASE	1:	Números	y	operadores	aritméticos
	
La	primera	fase	de	este	objetivo	consiste	en	el	aprendizaje	de	la	utilización	de
números	y	de	las	operaciones	aritméticas.	La	fase	está	dividida	por	grupos	según
los	diferentes	operadores	aritméticos	y	por	último	un	apartado	para	aprender	a
redondear	números	reales.
	
Tienes	que	tener	en	cuenta	que	los	números	enteros	se	especifican	por	la	palabra
int	y	los	números	reales	por	float.	En	los	diferentes	ejercicios	vas	a	transformar
lo	que	el	usuario	introduzca	con	el	comando	input	a	números	enteros	o	reales
para	 realizar	 las	 diferentes	 operaciones	 matemáticas.	 Para	 transformar	 los
valores	leídos	tienes	que	hacerlo	de	la	siguiente	forma:
	
Número	enteros:	int(input(“texto”)).
Número	reales:	float(input(“text”)).
	
El	 resultado	 tienes	 que	 asignárselo	 a	 una	 variable	 para	 poder	 utilizarlo
posteriormente.
	
Suma
	
El	primer	ejercicio	de	la	fase	consiste	en	la	realización	de	una	suma	de	números
enteros	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
sumando1	=	int(input("Introduzca	el	primer	sumando:	"))
sumando2	=	int(input("Introduzca	el	segundo	sumando:	"))
print("Resultado	de	la	suma:	",	sumando1	+	sumando2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 realización	 de	 una	 suma	 de
números	reales	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
sumando1	=	float(input("Introduzca	el	primer	sumando	(Decimal):	"))
sumando2	=	float(input("Introduzca	el	segundo	sumando	(Decimal):	"))
print("Resultado	de	la	suma:	",	sumando1	+	sumando2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Resta
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	realización	de	una	resta	de	números
enteros	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
minuendo	=	int(input("Introduzca	el	minuendo:	"))
sustraendo	=	int(input("Introduzca	el	sustraendo:	"))
print("Resultado	de	la	resta:	",	minuendo	-	sustraendo)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	cuarto	ejercicio	de	la	fase	consiste	en	la	realización	de	una	resta	de	números
reales	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
minuendo	=	float(input("Introduzca	el	minuendo:	"))
sustraendo	=	float(input("Introduzca	el	sustraendo:	"))
print("Resultado	de	la	resta:	",	minuendo	-	sustraendo)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Multiplicación
El	quinto	ejercicio	de	la	fase	consiste	en	la	realización	de	una	multiplicación	de
números	enteros	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
multiplicando	=	int(input("Introduzca	el	multiplicando:	"))
multiplicador	=	int(input("Introduzca	el	multiplicador:	"))
print("Resultado	de	la	multiplicacion:	",	multiplicando	*	multiplicador)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	sexto	ejercicio	de	la	fase	consiste	en	la	realización	de	una	multiplicación	de
números	reales	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
multiplicando	=	float(input("Introduzca	el	multiplicando:	"))
multiplicador	=	float(input("Introduzca	el	multiplicador:	"))
print("Resultado	de	la	multiplicacion:	",	multiplicando	*	multiplicador)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
División
	
El	 séptimo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 realización	 de	 una	 división	 de
números	enteros	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
dividendo	=	int(input("Introduzca	el	dividendo:	"))
divisor	=	int(input("Introduzca	el	divisor:	"))
print("Resultado	de	la	division:	",	dividendo	/	divisor)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	 octavo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 realización	 de	 una	 división	 de
números	reales	introducidos	por	el	usuario.	El	código	fuente	es	el	siguiente:
	
dividendo	=	float(input("Introduzca	el	dividendo:	"))
divisor	=	float(input("Introduzca	el	divisor:	"))
print("Resultado	de	la	division:	",	dividendo	/	divisor)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Redondeo	de	números	reales
	
En	 este	 ejercicio	 vas	 a	 aprender	 a	 redondear	 números	 reales	 mediante	 la
instrucción	round.
	
La	instrucción	round	utiliza	dos	parámetros	para	ejecutarse.	El	primero	de	ellos
es	el	número	real	que	quieres	redondear	y	el	segundo	es	el	número	de	decimales
al	que	quieres	redondear.
	
El	noveno	ejercicio	de	la	fase	consiste	en	el	redondeo	del	resultado	de	la	división
a	un	número	real	con	únicamente	un	decimal.	El	código	fuente	es	el	siguiente:
	
dividendo	=	float(input("Introduzca	el	dividendo:	"))
divisor	=	float(input("Introduzca	el	divisor:	"))
resultado	=	round(dividendo	/	divisor,1)
print("Resultado	de	la	division:	",	resultado)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
FASE	2:	Cadenas	de	texto	(Básico)
	
La	segunda	fase	de	este	objetivo	consiste	en	el	aprendizaje	del	uso	de	cadenas	de
texto.
	
El	primer	ejercicio	de	la	fase	consiste	en	el	almacenamiento	de	una	cadena	de
texto	en	una	variable	y	su	mostrado	posterior	por	pantalla.	El	código	fuente	es	el
siguiente.
	
cadenaejemplo	=	"Hola	Time	of	Software"
print(cadenaejemplo)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	es	igual	que	el	anterior,	pero,	con	este	ejercicio
vas	a	aprender	a	introducir	caracteres	especiales	(o	de	escape)	en	las	cadenas	de
texto.	En	el	ejercicio	vas	a	introducir	el	carácter	‘n’,	que	implica	un	salto	de
línea	dentro	de	la	cadena	de	texto.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"Hola	Time	of	SoftwarenEsto	es	una	cadenanmultilinea"
print(cadenaejemplo)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Existen	diversos	caracteres	de	escape	para	las	cadenas	de	texto.	Puedes	encontrar
una	descripción	de	cada	uno	de	ellos	en	el	anexo	al	final	del	libro.
FASE	3:	Colecciones
	
La	 tercera	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 y	 en	 el	 uso	 de	 las
diferentes	colecciones	disponibles	en	Python.	Las	colecciones	que	aprenderemos
son	las	siguientes:
	
Listas.
Tuplas.
Diccionarios.
	
Listas
	
Una	lista	es	un	conjunto	ordenado	de	elementos	que	puede	contener	datos	de
cualquier	tipo.	Es	el	tipo	de	colección	más	flexible	de	todos	los	que	veremos	en
esta	fase.		Las	listas	pueden	contener	elementos	del	mismo	tipo	o	elementos	de
diferentes	tipos.
	
En	 Python	 las	 listas	 se	 delimitan	 con	 corchetes	 “[	 ]”,	 con	 los	 elementos
separados	por	comas.
	
El	primer	ejercicio	de	la	fase	consiste	en	el	almacenamiento	de	una	lista	en	una
variable	y	en	mostrarla	por	pantalla.	El	código	fuente	es	el	siguiente:
	
lista	=	["ordenador","teclado","raton"]
print(lista)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	el	almacenamiento	de	una	lista	en	una
variable,	en	el	cálculo	del	número	de	elementos	mediante	la	instrucción	len	y	en
mostrar	los	elementos	de	la	lista	de	forma	individual	por	pantalla.	Ten	en	cuenta
que	el	primer	elemento	de	una	lista	es	el	elemento	0,	no	el	1.	El	código	fuente	es
el	siguiente:
	
lista	=	["ordenador","teclado","raton"]
print(len(lista))
print(lista[0])
print(lista[1])
print(lista[2])
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 tercer	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 unión	 de	 dos	 listas	 creadas
previamente	mediante	el	operador	aritmético	‘+’	y	su	almacenamiento	en	una
nueva	variable.	El	resultado	de	la	unión	se	muestra	por	pantalla.	El	código	fuente
es	el	siguiente:
	
listaoriginal	=	["ordenador","teclado","raton"]
listanueva	=	["monitor","impresora","altavoces"]
listafinal	=	listaoriginal	+	listanueva
print(listafinal)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	cuarto	ejercicio	de	la	fase	consiste	en	añadir	un	elemento	a	una	lista	mediante
el	operador	aritmético	‘+’.	La	lista	sin	el	elemento	añadido	y	la	lista	resultante
son	 mostradas	 por	 pantalla	 para	 que	 compruebes	 el	 resultado	 de	 añadir	 el
elemento.	El	código	fuente	es	el	siguiente:
	
lista	=	["ordenador","teclado","raton"]
print(lista)
lista	=	lista	+	["mesa"]
print(lista)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	 quinto	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 modificación	 de	 los	 valores	 que
tienen	 los	 elementos	 de	 una	 lista	 mediante	 el	 operador	 de	 asignación.	 Se
mostrarán	por	pantalla	la	lista	inicial	y	la	lista	resultado	de	las	modificaciones	de
los	valores	de	los	elementos	de	la	lista.	El	código	fuente	es	el	siguiente:
	
lista	=	["ordenador","teclado","raton"]
print(lista)
lista[0]	=	"monitor"
lista[1]	=	"impresora"
lista[2]	=	"altavoces"
print(lista)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	sexto	ejercicio	de	la	fase	consiste	en	la	eliminación	de	un	elemento	de	la	lista
utilizando	la	instrucción	del.	Se	mostrarán	por	pantalla	la	lista	inicial	y	la	lista
resultante	tras	la	eliminación	del	elemento.	El	código	fuente	es	el	siguiente:
	
lista	=	["ordenador","teclado","raton"]
print(lista)
del	lista[1]
print(lista)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	séptimo	ejercicio	de	la	fase	consiste	en	la	creación	de	listas	como	elementos
de	listas.	El	ejercicio	crea	una	lista	de	elementos	compuesta	por	tres	cadenas	de
texto	 y	 una	 lista	 de	 elementos	 que	 contiene	 cadenas	 de	 texto.	 Tal	 y	 como	 te
dijimos	en	la	explicación	de	los	tipos	de	datos	lista,	los	elementos	de	una	lista	no
tienen	 que	 ser	 del	 mismo	 tipo,	 en	 este	 caso	 estamos	 creando	 una	 lista	 que
contiene	 como	 elementos	 cadenas	 de	 texto	 y	 otra	 lista.	 El	 ejercicio	 mostrará
todos	 los	 elementos	 de	 la	 lista	 principal	 y	 posteriormente	 los	 elementos	 de	 la
lista	 que	 está	 definida	 dentro	 de	 la	 lista	 principal.	 El	 código	 fuente	 es	 el
siguiente:
	
lista	=	["ordenador","teclado","raton",	["tarjeta	de	sonido","microfono","altavoces"]]
print(lista[0])
print(lista[1])
print(lista[2])
print(lista[3])
print(lista[3][0])
print(lista[3][1])
print(lista[3][2])
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Tuplas
	
Las	tuplas	son	un	conjunto	de	elementos	ordenados	e	inmutables.	La	diferencia
con	las	listas	reside	en	que	en	las	listas	puedes	manipular	los	elementos	y	en	las
tuplas	no.	Las	tuplas	pueden	contener	elementos	del	mismo	tipo	o	elementos	de
diferentes	tipos,	al	igual	que	las	listas.
	
En	 Python	 las	 tuplas	 se	 delimitan	 por	 paréntesis	 “(	 )”,	 con	 los	 elementos
separados	por	comas.
	
El	octavo	ejercicio	de	la	fase	consiste	en	la	creación	de	una	tupla	de	elementos	y
almacenarla	en	una	variable.	Por	pantalla	se	mostrarán	los	elementos	de	la	tupla
de	 forma	 conjunta,	 el	 número	 de	 elementos	 que	 componen	 la	 tupla	 y	 cada
elemento	de	forma	independiente.	Ten	en	cuenta	que,	al	igual	que	en	las	listas,	el
primer	elemento	de	las	tuplas	es	el	cero,	no	el	1.	El	código	fuente	es	el	siguiente:
	
tupla	=	("ordenador","teclado","raton")
print(tupla)
print(len(tupla))
print(tupla[0])
print(tupla[1])
print(tupla[2])
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Diccionarios
	
Los	diccionarios	son	colecciones	de	elementos	compuestos	por	una	clave	y	un
valor	asociado.	Las	claves	en	los	diccionarios	no	pueden	repetirse.
	
En	Python	los	diccionarios	se	delimitan	por	corchetes	“{	}”,	con	los	elementos
separados	por	comas	y	la	clave	separada	del	valor	mediante	dos	puntos.
	
El	noveno	ejercicio	de	la	fase	consiste	en	la	creación	de	un	diccionario	con	los
meses	del	año	y	su	almacenamiento	en	una	variable.	La	clave	de	los	elementos
del	diccionario	será	el	nombre	del	mes	en	castellano	y	el	valor	el	nombre	del
mes	en	inglés.	Posteriormente,	se	accede	a	un	par	de	elementos	del	diccionario
utilizando	la	clave	en	castellano	y	se	muestra	el	valor	en	inglés	por	pantalla.	El
código	fuente	es	el	siguiente:
	
mesestraducidos	=	{"Enero"	:	"January",
																			"Febrero"	:	"February",
																			"Marzo"	:	"March",
																			"Abril"	:	"April",
																			"Mayo"	:	"May",
																			"Junio"	:	"June",
																			"Julio"	:	"July",
																			"Agosto"	:	"August",
																			"Septiembre"	:	"September",
																			"Octubre"	:	"October",
																			"Noviembre"	:	"November",
																			"Diciembre"	:	"December"}
print(mesestraducidos["Noviembre"])
print(mesestraducidos["Mayo"])
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
FASE	4:	Booleanos	y	operadores	lógicos	y	relacionales
	
La	 cuarta	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 del	 uso	 de	 tipos	 de
datos	booleanos,	el	uso	de	operadores	lógicos	y	relacionales.
	
Booleanos
	
Una	 variable	 booleana	 es	 una	 variable	 que	 sólo	 puede	 tomar	 dos	 posibles
valores:	True	(verdadero	o	1)	o	False	(falso	o	0).
	
El	primer	ejercicio	de	la	fase	consiste	en	almacenar	en	una	variable	el	valor	True
y	mostrarla	posteriormente	por	pantalla.	Fíjate	que	el	valor	True	es	introducido
como	tal,	no	como	una	cadena	de	texto,	ya	que	dichos	valores	(True	y	False)	son
parte	del	lenguaje	de	programación	Python.	El	código	fuente	es	el	siguiente:
	
variablebooleana	=	True
print(variablebooleana)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	almacenar	en	una	variable	el	valor
False	y	mostrarla	posteriormente	por	pantalla.	El	código	fuente	es	el	siguiente:
	
variablebooleana	=	False
print(variablebooleana)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Operadores	lógicos
	
Los	operadores	lógicos	son	operaciones	que	pueden	realizarse	sobre	variables	de
tipo	 booleano,	 bien	 sean	 valores	 independientes	 o	 valores	 provenientes	 de
operaciones	relacionales.
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	realización	de	una	operación	AND
sobre	dos	valores	True,	el	resultado	de	la	operación	se	muestra	por	pantalla.	El
código	fuente	es	el	siguiente:
	
booleano1	=	True
booleano2	=	True
print(booleano1	and	booleano2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	cuarto	ejercicio	de	la	fase	consiste	en	la	realización	de	una	operación	AND
sobre	un	valor	True	y	otro	False,	el	resultado	de	la	operación	se	muestra	por
pantalla.	El	código	fuente	es	el	siguiente:
	
booleano1	=	True
booleano2	=	False
print(booleano1	and	booleano2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	quinto	ejercicio	de	la	fase	consiste	en	la	realización	de	una	operación	AND
sobre	dos	valores	False,	el	resultado	de	la	operación	se	muestra	por	pantalla.	El
código	fuente	es	el	siguiente:
	
booleano1	=	False
booleano2	=	False
print(booleano1	and	booleano2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Llegados	 a	 este	 punto,	 has	 podido	 practicar	 las	 diferentes	 posibilidades	 que
operaciones	 que	 pueden	 realizarse	 con	 booleanos	 y	 el	 operador	 AND,	 ahora
harás	lo	mismo	con	el	operador	OR.
	
El	sexto	ejercicio	de	la	fase	consiste	en	la	realización	de	una	operación	OR	sobre
dos	valores	True,	el	resultado	de	la	operación	se	muestra	por	pantalla.	El	código
fuente	es	el	siguiente:
	
booleano1	=	True
booleano2	=	True
print(booleano1	or	booleano2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	séptimo	ejercicio	de	la	fase	consiste	en	la	realización	de	una	operación	OR
sobre	un	valor	True	y	otro	valor	False,	el	resultado	de	la	operación	se	muestra
por	pantalla.	El	código	fuente	es	el	siguiente:
	
booleano1	=	True
booleano2	=	False
print(booleano1	or	booleano2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 octavo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 realización	 de	 una	 operación	 OR
sobre	dos	valores	False,	el	resultado	de	la	operación	se	muestra	por	pantalla.	El
código	fuente	es	el	siguiente:
	
booleano1	=	False
booleano2	=	False
print(booleano1	or	booleano2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	noveno	ejercicio	consiste	en	la	utilización	del	operador	lógico	NOT	con	el
valor	booleano	False,	el	resultado	de	la	operación	se	muestra	por	pantalla.	El
código	fuente	es	el	siguiente:
	
booleano	=	False
print(not	booleano)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	décimo	ejercicio	de	la	fase	consiste	en	la	utilización	del	operador	lógico	NOT
con	el	valor	booleano	True,	el	resultado	de	la	operación	se	muestra	por	pantalla.
El	código	fuente	es	el	siguiente:
	
booleano	=	True
print(not	booleano)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Tal	 y	 como	 te	 indicamos	 en	 la	 parte	 teórica	 del	 objetivo,	 te	 recomendamos
utilizar	 paréntesis	 a	 la	 hora	 de	 hacer	 operaciones	 lógicas	 complejas.	 Al
componer	expresiones	más	complejas	hay	que	tener	en	cuenta	que	Python	evalúa
primero	los	NOT,	luego	los	AND	y	por	último	los	OR.
	
Operadores	relacionales
	
Los	 operadores	 relacionales	 son	 operaciones	 de	 comparación	 que	 pueden
realizarse	con	los	datos,	bien	sea	de	forma	directa	o	mediante	el	uso	de	variables.
	
El	 undécimo	 ejercicio	 de	 esta	 fase	 consiste	 en	 la	 realización	 de	 todas	 las
operaciones	relacionales	con	los	valores	que	almacenan	las	variables	numero1	y
numero2,	el	resultado	de	todas	las	operaciones	se	muestra	por	pantalla.	El	código
fuente	es	el	siguiente.
	
numero1	=	6
numero2	=	9
print(numero1	>	numero2)
print(numero1	>=	numero2)
print(numero1	<	numero2)
print(numero1	<=	numero2)
print(numero1	==	numero2)
print(numero1	!=	numero2)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
FASE	5:	Cadenas	de	texto	(Avanzado)
	
La	 quinta	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 de	 comandos
avanzados	muy	útiles	para	trabajar	con	cadenas	de	texto.
	
El	 primer	 ejercicio	 de	 la	 fase	 consiste	 en	 el	 aprendizaje	 de	 la	 instrucción
capitalize,	que	va	a	permitirte	poner	la	primera	letra	de	una	cadena	de	texto	en
mayúsculas.	 Una	 vez	 ejecutada	 la	 instrucción	 sobre	 la	 cadena	 de	 texto	 se
mostrará	por	pantalla	el	resultado.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"en	un	lugar	de	la	mancha..."
print(cadenaejemplo.capitalize())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	upper,
que	va	a	permitirte	poner	en	mayúsculas	por	completo	una	cadena	de	texto.	Una
vez	ejecutada	la	instrucción	sobre	la	cadena	de	texto	se	mostrará	por	pantalla	el
resultado.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"en	un	lugar	de	la	mancha..."
print(cadenaejemplo.upper())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	lower,
que	 hace	 lo	 contrario	 	 que	 la	 instrucción	 del	 ejercicio	 anterior,	 pone	 en
minúsculas	por	completo	una	cadena	de	texto.	Una	vez	ejecutada	la	instrucción
sobre	la	cadena	de	texto	se	mostrará	por	pantalla	el	resultado.	El	código	fuente
es	el	siguiente:
	
cadenaejemplo	=	"EN	UN	LUGAR	DE	LA	MANCHA..."
print(cadenaejemplo.lower())
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
En	el	cuarto	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	len,
que	va	a	permitirte	saber	el	número	de	caracteres	que	componen	la	cadena	de
texto.	Una	vez	ejecutada	la	instrucción	sobre	la	cadena	de	texto	se	mostrará	por
pantalla	el	resultado.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha..."
print(len(cadenaejemplo))
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	quinto	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	isalnum,
que	 comprueba	 si	 todos	 los	 caracteres	 que	 componen	 la	 cadena	 de	 texto	 son
alfanuméricos	 o	 no.	 En	 el	 ejercicio	 se	 comprueban	 cuatro	 cadenas	 de	 texto
diferentes	y	se	muestra	por	pantalla	el	resultado.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha..."
print(cadenaejemplo.isalnum())
cadenaejemplo	=	"1234567890"
print(cadenaejemplo.isalnum())
cadenaejemplo	=	"abcdefg1234567890"
print(cadenaejemplo.isalnum())
cadenaejemplo	=	"abcdefg	1234567890"
print(cadenaejemplo.isalnum())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Los	 dos	 valores	 False	 son	 porque	 los	 caracteres	 del	 punto	 y	 del	 espacio	 en
blanco	 que	 contienen	 las	 cadenas	 primera	 y	 cuarta	 no	 son	 caracteres
alfanuméricos.
El	sexto	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	isalpha,
que	 comprueba	 si	 todos	 los	 caracteres	 de	 la	 cadena	 de	 texto	 son	 caracteres
alfabéticos.	En	el	ejercicio	se	comprueban	cuatro	cadenas	de	texto	diferentes	y
se	muestra	por	pantalla	el	resultado.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"Enunlugardelamancha"
print(cadenaejemplo.isalpha())
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
print(cadenaejemplo.isalpha())
cadenaejemplo	=	"1234567890"
print(cadenaejemplo.isalpha())
cadenaejemplo	=	"abcdefg	1234567890"
print(cadenaejemplo.isalpha())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Tal	y	como	puedes	comprobar,	ni	los	números,	ni	los	puntos	ni	los	espacios	en
blanco	son	caracteres	alfabéticos,	únicamente	las	letras	componen	el	conjunto	de
caracteres	alfabéticos.
	
El	séptimo	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	isdigit,
que	 comprueba	 si	 todos	 los	 caracteres	 de	 la	 cadena	 de	 texto	 son	 caracteres
numéricos.	En	el	ejercicio	se	comprueban	tres	cadenas	de	texto	diferentes	y	se
muestra	por	pantalla	el	resultado.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
print(cadenaejemplo.isdigit())
cadenaejemplo	=	"1234567890"
print(cadenaejemplo.isdigit())
cadenaejemplo	=	"abcdefg	1234567890"
print(cadenaejemplo.isdigit())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	octavo	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción	islower,
que	 comprueba	 si	 todos	 los	 caracteres	 que	 componen	 la	 cadena	 están	 en
minúscula.	En	el	ejercicio	se	comprueban	dos	cadenas	de	texto	y	se	muestra	el
resultado	por	pantalla.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
print(cadenaejemplo.islower())
cadenaejemplo	=	"en	un	lugar	de	la	mancha"
print(cadenaejemplo.islower())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	noveno	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	sentencia	isupper,
que	comprueba	si	todos	los	caracteres	que	componen	la	cadena	de	texto	están	en
mayúscula.	En	el	ejercicio	se	comprueban	dos	cadenas	de	texto	y	se	muestra	el
resultado	por	pantalla.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
print(cadenaejemplo.isupper())
cadenaejemplo	=	"EN	UN	LUGAR	DE	LA	MANCHA"
print(cadenaejemplo.isupper())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 décimo	 ejercicio	 de	 la	 fase	 consiste	 en	 el	 aprendizaje	 de	 las	 instrucciones
lstrip,	rstrip	y	strip,	que	van	a	permitirte	eliminar	espacios	en	blanco	al	principio
y	al	final	de	la	cadena	de	texto.	Para	eliminar	los	caracteres	del	comienzo	de	la
cadena	 tienes	 que	 utilizar	 lstrip,	 para	 eliminar	 los	 caracteres	 del	 final	 de	 la
cadena	 tienes	 que	 utilizar	 rstrip,	 y	 por	 último,	 para	 eliminar	 ambos	 a	 la	 vez
tienes	que	utilizar	strip,	que	hace	lo	mismo	que	los	dos	anteriores	pero	en	una
sola	instrucción.	En	el	ejercicio	se	ejecutan	las	instrucciones	con	una	cadena	de
texto	y	se	muestra	el	resultado	por	pantalla.	El	código	fuente	es	el	siguiente:
cadenaejemplo	=	"	En	un	lugar	de	la	mancha"
print(cadenaejemplo.lstrip())
cadenaejemplo	=	"En	un	lugar	de	la	mancha	"
print(cadenaejemplo.rstrip())
cadenaejemplo	=	"	En	un	lugar	de	la	mancha	"
print(cadenaejemplo.strip())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	undécimo	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	las	instrucciones
max	y	min,	que	van	a	permitirte	conocer	el	carácter	alfabético	mayor	y	menor	de
la	cadena	de	texto.	En	el	ejemplo	se	ejecutan	las	instrucciones	sobre	una	cadena
de	 texto	 y	 se	 muestran	 dichos	 caracteres	 por	 pantalla.	 El	 código	 fuente	 es	 el
siguiente.
	
cadenaejemplo	=	"abcdefghijklmnopqrstuvwxyz"
print(max(cadenaejemplo))
print(min(cadenaejemplo))
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 duodécimo	 ejercicio	 de	 la	 fase	 consiste	 en	 el	 aprendizaje	 de	 la	 instrucción
replace,	 que	 te	 va	 a	 permitir	 reemplazar	 caracteres	 de	 la	 cadena	 de	 texto	 por
otros	 caracteres.	 En	 el	 ejercicio	 se	 reemplaza	 un	 carácter	 y	 se	 muestra	 por
pantalla	el	resultado	del	reemplazo.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"AEIOU"
print(cadenaejemplo.replace('A','E'))
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	decimotercer	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción
swapcase,	que	te	va	a	permitir	invertir	las	mayúsculas	y	minúsculas	de	la	cadena
de	 texto,	 es	 decir,	 las	 mayúsculas	 pasarán	 a	 ser	 minúsculas	 y	 las	 minúsculas
pasarán	 a	 ser	 mayúsculas.	 En	 el	 ejemplo	 se	 ejecuta	 la	 instrucción	 sobre	 una
cadena	de	texto	y	se	muestra	por	pantalla	el	resultado.	El	código	fuente	es	el
siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
print(cadenaejemplo.swapcase())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	decimocuarto	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	instrucción
split,	que	te	va	a	permitir	convertir	una	cadena	de	texto	en	una	lista	de	elementos
que	se	encuentran	separados	por	espacios	en	la	cadena	de	texto	original.	En	el
ejercicio	se	ejecuta	la	instrucción	sobre	una	cadena	de	texto	y	se	muestra	la	lista
resultante	por	pantalla.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
print(cadenaejemplo.split())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 decimoquinto	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 ampliación	 de	 uso	 del
comando	split,	pero,	esta	vez,	indicándole	el	carácter	que	tiene	que	utilizar	para
separar	los	elementos	de	la	lista.	En	el	ejercicio	se	ejecuta	la	instrucción	sobre
una	cadena	de	texto	y	se	muestra	el	resultado	por	pantalla.	El	código	fuente	es	el
siguiente:
	
cadenaejemplo	=	"31/12/2017"
print(cadenaejemplo.split("/"))
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
Ahora	eres	capaz	de…
	
En	este	segundo	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Diferentes	tipos	de	datos	existentes	en	Python.
Utilización	de	números	enteros	y	reales.
Utilización	de	operadores	matemáticos.
Utilización	de	operadores	relacionales.
Utilización	de	operadores	lógicos.
Utilización	de	booleanos.
Utilización	de	cadenas	de	texto.
Manipulación	de	cadenas	de	texto.
Utilización	de	listas,	tuplas	y	diccionarios.
Conversión	de	datos.
OBJETIVO	3	–	CONTROL	FLUJO	DE	UN	PROGRAMA
	
En	este	tercer	objetivo	vas	a	familiarizarte	y	a	aprender	a	utilizar	la	instrucción
que	va	a	permitirte	controlar	el	flujo	de	los	programas,	la	bifurcación.
	
El	 objetivo	 está	 compuesto	 por	 tres	 fases.	 En	 la	 primera	 aprenderás	 a	 utilizar
bifurcaciones	simples,	en	la	segunda	aprenderás	a	utilizar	bifurcaciones	con	un
camino	alternativo	y	en	la	tercera	aprenderás	a	utilizar	bifurcaciones	con	más	de
un	camino	alternativo.
Conceptos	teóricos
	
En	este	apartado,	además	de	explicarte	la	teoría	de	las	bifurcaciones,	vamos	a
explicarte	qué	son	los	bloques	de	instrucciones,	cómo	funciona	la	indentación	en
Python	y	por	qué	es	importante	y	necesaria	a	la	hora	de	escribir	tus	programas.
	
Bloques	e	Indentación
	
Un	bloque	es	un	grupo	de	sentencias	de	código	fuente	que	contiene	una	o	más
sentencias.	Los	bloques	están	delimitados	por	su	inicio	y	su	fin,	y	la	forma	de
delimitarlos	es	específica	de	cada	lenguaje	de	programación.
	
Indentación	 significa	 mover	 un	 bloque	 de	 texto	 hacia	 la	 derecha	 insertando
espacios	 o	 tabuladores,	 para	 así	 separarlo	 del	 margen	 izquierdo	 y	 distinguirlo
más	fácilmente	dentro	del	texto.	Todos	los	lenguajes	utilizan	la	indentación	para
aumentar	la	legibilidad	del	código	fuente,	pero	en	Python	no	es	únicamente	una
buena	 práctica	 estética,	 ya	 que	 utiliza	 la	 indentación	 del	 código	 fuente	 para
delimitar	los	bloques	dentro	del	código	fuente,	es	por	eso	por	lo	que	es	necesario
que	la	utilices	de	forma	correcta.	Veamos	un	ejemplo	con	una	imagen:
	
	
En	la	imagen	puedes	ver	diferentes	bloques	de	código	que	a	su	vez	tienen	otros
bloques	 dentro	 de	 ellos.	 Tal	 y	 como	 puedes	 ver,	 un	 bloque	 de	 código	 puede
contener	más	de	un	bloque	de	código	dentro,	y	los	bloques	internos	pueden	estar
en	la	mitad	del	bloque	padre,	es	decir,	que	el	bloque	padre	tiene	sentencias	antes
y	después	del	bloque	de	sentencias	interno.
IF	/	ELIF	/ELSE
	
Las	bifurcaciones	en	programación	tienes	que	entenderlas	como	la	existencia	de
diferentes	posibles	caminos	a	la	hora	de	ejecutar	el	código	fuente	que	se	ejecutan
o	no	en	función	de	un	condición	o	condiciones.
	
Las	instrucciones	que	te	van	a	permitir	utilizar	bifurcaciones	son	if,	elif	y	else.
Veámoslas	en	detalle:
	
if:	te	va	a	permitir	generar	un	bloque	de	código	que	se	ejecutará	si	se
cumple	la	condición	de	entrada	que	tiene.
elif:	te	va	a	permitir	generar	un	camino	alternativo	con	una	condición
de	entrada.
else:	te	va	a	permitir	generar	un	camino	alternativo	que	se	ejecutará
siempre	que	no	se	hayan	cumplido	las	condiciones	de	 los	posibles
caminos	de	las	instrucciones	if	y	elif.
	
Veamoslo	 con	 un	 ejemplo	 lo	 más	 completo	 posible.	 Ten	 en	 cuenta	 que	 este
código	fuente	no	es	Python:
	
numero1	=	ValorAleatorio
numero2	=	ValorAleatorio
	
if	numero1>numero2
BloqueInstrucciones1
elif	numero1==numero2
BloqueInstrucciones2
else
BloqueInstrucciones3
	
En	el	ejemplo	hemos	definido	dos	variables	cuyo	valor	es	generado	de	forma
aleatoria.	Utilizando	esas	variables,	hemos	generado	tres	posibles	caminos:
	
if	numero1>numero2:	en	caso	de	que	el	primer	número	sea	mayor
que	 el	 segundo	 se	 ejecutará	 el	 bloque	 de	 instrucciones	 llamado
BloqueInstrucciones1.
elif	 numero1==numero2:	 en	 caso	 de	 que	 el	 primero	 número	 y	 el
segundo	sean	iguales	se	ejecutará	el	bloque	de	instrucciones	llamado
BloqueInstrucciones2.
else:	 en	 caso	 de	 que	 el	 primer	 número	 sea	 menor	 que	 el	 segundo
número	 se	 ejecutará	 el	 bloque	 de	 instrucciones	 llamado
BloqueInstrucciones3.	Tal	y	como	puedes	observar,	en	este	caso	no
es	necesario	establecer	una	condición,	ya	que	a	la	hora	de	comparar
números	 únicamente	 existe	 tres	 posibilidades,	 que	 el	 primero	 sea
menor	que	el	segundo,	que	ambos	sean	iguales	o	que	el	primero	sea
mayor	que	el	segundo.
	
Por	último,	indicarte	que	dentro	de	los	bloques	de	instrucciones	que	están	dentro
de	 los	 posibles	 caminos	 es	 posible	 incluir	 nuevas	 bifurcaciones,	 en	 este	 caso
estaríamos	hablando	de	bifurcaciones	anidadas.
FASE	1:	Sentencia	IF
	
La	primera	fase	de	este	objetivo	consiste	en	el	aprendizaje	de	la	utilización	de	la
sentencia	if.	Mediante	esta	sentencia	vas	a	poder	crear	un	bloque	de	código	que
es	ejecutado	únicamente	si	se	cumple	la	condición	de	entrada	especificada	en
dicha	instrucción.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	evaluación	del	valor	de	un	número
introducido	por	el	usuario.	En	caso	de	que	el	número	escrito	sea	mayor	que	10	se
mostrará	un	mensaje	por	pantalla	indicándolo.	El	número	que	has	utilizado	para
hacer	 la	 comparación	 tienes	 que	 convertirlo	 en	 cadena	 de	 texto	 para	 poder
mostrarlo	por	pantalla	utilizando	print,	para	ello	tienes	que	utilizar	str(numero).
Con	 el	 símbolo	 “+”	 dentro	de	print	unirás	la	cadena	de	texto	“Has	escrito	el
número”	 con	 el	 número	 convertido	 a	 cadena	 para	 mostrar	 el	 mensaje	 por
pantalla.	El	código	fuente	es	el	siguiente:
	
numero	=	int(input("Escriba	un	numero	del	1	al	10:	"))
if	numero>10:
				print("¡El	numero	que	has	escrito	es	mayor	que	10!")
print("Has	escrito	el	numero	"	+	str(numero))
	
La	ejecución	del	código	fuente	anterior	tendrá	las	siguientes	posibles	salidas	en
función	del	número	introducido:
	
Número	superior	a	10:
	
Número	inferior	a	10:
FASE	2:	Sentencia	IF..ELSE
	
La	 segunda	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 de	 las	 sentencia
if..else.	 Mediante	 esta	 sentencia	 vas	 a	 poder	 crear	 dos	 bloques	 diferentes	 de
código,	 uno	 que	 se	 ejecutará	 siempre	 que	 la	 condición	 de	 entrada	 se	 cumpla
(bloque	dentro	de	if)	y	otro	que	se	ejecutará	siempre	que	la	condición	de	entrada
no	se	cumpla	(bloque	dentro	de	else).
	
El	primer	ejercicio	de	la	fase	consiste	en	la	búsqueda	de	un	texto	concreto	dentro
de	una	cadena	de	texto	y	mostrar	por	pantalla	si	se	ha	encontrado	o	no.	Además
de	aprender	el	manejo	de	la	instrucción	if..else,	en	este	ejercicio	vas	a	aprender
una	forma	nueva	de	buscar	una	cadena	de	texto	dentro	de	otra.	El	código	fuente
es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha..."
if	"lugar"	in	cadenaejemplo:
				print("¡Encontrado!")
else:
				print("¡No	encontrado!")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Prueba	a	escribir	un	texto	que	no	aparezca	en	la	cadena	en	lugar	de	“lugar”	y
verás	como	se	ejecuta	el	bloque	de	instrucciones	del	else.
	
El	segundo	ejercicio	de	la	fase	consiste	en	la	comprobación	de	los	caracteres	de
inicio	y	fin	de	una	cadena	de	texto	y	mostrar	por	pantalla	si	empiezan	o	no	por
dichos	caracteres.	El	código	fuente	es	el	siguiente:
	
cadenaejemplo	=	"En	un	lugar	de	la	mancha"
if	cadenaejemplo.startswith('E'):
				print("¡Empieza	por	E!")
else:
				print("¡No	empieza	por	E!")
if	cadenaejemplo.endswith('p'):
				print("¡Termina	por	p!")
else:
				print("¡No	termina	por	p!")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Prueba	 a	 cambiar	 los	 caracteres	 que	 reciben	 como	 parámetros	 las	 funciones
startswith	 y	 endswith	 y	 verás	 como	 se	 ejecutan	 diferentes	 bloques	 en	 las
bifurcaciones.
FASE	3:	Sentencia	IF..ELIF..ELSE
	
La	 tercera	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 de	 la	 sentencia
if..elif..else.	 Mediante	 esta	 sentencia	 vas	 a	 poder	 crear	 infinitos	 caminos
alternativos	 dependiendo	 del	 cumplimiento	 de	 la	 condición	 de	 entrada	 y	 un
camino	que	se	tomará	en	caso	de	que	no	se	cumpla	ninguna	de	las	condiciones
de	entrada	a	los	caminos	previos.
	
El	 primer	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 implementación	 en	 Python	 del
ejemplo	que	hemos	utilizado	en	la	explicación	teórica,	pero	en	lugar	de	generar
el	número	de	forma	aleatoria	pediremos	que	se	introduzca.	El	código	fuente	es	el
siguiente:
	
numero1	=	int(input("Escriba	el	primer	número:	"))
numero2	=	int(input("Escriba	el	segundo	número:	"))
if	numero1>numero2:
				print("¡El	primer	número	es	mayor	que	el	segundo!")
elif	numero1==numero2:
				print("¡Ambos	número	son	iguales!")
else:
				print("¡El	primer	número	es	menor	que	el	segundo!")
	
La	ejecución	del	código	fuente	anterior	tendrá	las	siguientes	posibles	salidas	en
función	de	los	valores	que	se	introduzcan:
	
Primer	número	mayor	que	el	segundo:
	
Ambos	números	iguales:
	
Primer	número	menor	que	el	segundo:
1. aprende python en un fin de semana sqminingsociety
Ahora	eres	capaz	de…
	
En	este	tercer	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Utilización	de	bifurcaciones	if.
Utilización	de	bifurcaciones	if..else.
Utilizacion	de	bifurcaciones	if..elif..else.
Empezar	a	utilizar	lógica	de	funcionamiento	en	los	programas.
Ampliado	 los	 conocimientos	 del	 Objetivo	 2	 y	 Fase	 5	 de	 manejo
avanzado	de	cadenas	de	texto	con	startswith	y	endswith.
OBJETIVO	4	–	BUCLES
	
En	este	cuarto	objetivo	vas	a	familiarizarte	y	a	aprender	a	usar	las	estructuras	de
programación	conocidas	como	bucles.
	
El	objetivo	está	compuesto	por	tres	fases.	En	la	primera	aprenderás	a	utilizar	los
bucles	while,	en	la	segunda	aprenderás	a	utilizar	los	bucles	for	y	en	la	última
aprenderás	a	utilizar	bucles	anidados.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	qué	es	un	bucle	y	los	diferentes	tipos	de
bucles	que	están	disponibles	en	Python.
	
Bucle
	
Los	 bucles	 consisten	 en	 la	 repetición	 de	 la	 ejecución	 de	 un	 bloque	 de
instrucciones	 en	 la	 que	 cada	 repetición	 se	 llama	 iteración.	 En	 programación
existen	 diferentes	 tipos	 de	 bucles,	 cada	 uno	 de	 ellos	 está	 recomendado	 para
usarse	dentro	de	un	contexto	concreto.
	
En	un	bucle	tienes	que	especificar	lo	siguiente:
	
Punto	de	inicio	del	bucle.
Punto	de	fin	del	bucle.
Número	de	iteraciones.
	
Cada	tipo	de	bucle	especifica	los	puntos	anteriores	de	forma	diferente,	pero	con
el	mismo	significado	teórico.
	
Veamos	los	diferentes	bucles	que	tenemos	disponibles	en	Python.
	
FOR
	
El	 tipo	 de	 bucle	 for	 está	 recomendado	 para	 contextos	 en	 los	 que	 se	 sabe	 el
número	de	iteraciones	exactas	que	se	van	a	dar	en	su	ejecución,	es	decir,	es	un
bucle	que	busca	ejecutar	un	conjunto	de	instrucciones	de	forma	repetitiva	hasta
llegar	al	número	máximo	de	iteraciones	definidas.
	
En	Python,	los	bucles	for	se	ejecutan	sobre	elementos	iterables,	como	pueden	ser
listas,	tuplas,	cadenas	de	texto	o	diccionarios.	El	número	de	iteraciones	que	se
ejecutarán	 dependerá	 del	 número	 de	 elementos	 de	 los	 que	 está	 compuesto	 el
elemento	iterable.
	
Los	bucles	for	tienen	la	siguiente	sintaxis:
for	Variable	in	ColeccionIterable:
BloqueInstrucciones
	
Veamos	los	elementos	en	detalle:
	
for:	indicador	de	comienzo	del	bucle.
Variable:	 variable	 que	 almacena	 el	 elemento	 sobre	 el	 que	 se	 está
iterando	de	ColeccionIterable.
in:	indicador	que	se	utiliza	para	definir	el	elemento	iterable	sobre	el
que	se	ejecutará	el	bucle	for.
ColeccionIterable:	elemento	sobre	el	que	se	ejecuta	el	bucle.
BloqueInstrucciones:	conjunto	de	instrucciones	que	se	ejecutarán	en
cada	iteración.
	
WHILE
	
El	tipo	de	bucle	while	está	recomendado	para	contextos	en	los	que	no	se	sabe
exactamente	el	número	de	iteraciones	que	se	tienen	que	ejecutar,	pero	sí	se	sabe
que	hay	que	ejecutar	iteraciones	hasta	que	se	deje	de	cumplir	una	condición.
	
La	condición	que	se	utiliza	para	comprobar	si	se	tiene	que	ejecutar	una	iteración
deberá	de	ser	true	para	que	se	ejecute,	si	en	caso	contrario	la	condición	es	false,
la	ejecución	del	bucle	finalizará.	La	condición	es	comprobada	en	cada	iteración
del	 bucle.	 Las	 variables	 que	 se	 utilizan	 en	 la	 condición	 del	 bucle	 se	 llaman
variables	de	control.
	
Los	bucles	while	tienen	la	siguiente	sintaxis:
	
while	Condición:
BloqueInstrucciones
	
Veamos	los	elementos	en	detalle:
	
while:	indicador	de	comienzo	del	bucle.
Condición:	 condición	 que	 debe	 de	 cumplirse	 para	 que	 siga
repitiéndose	la	ejecución	del	bucle.
BloqueInstrucciones:	conjunto	de	instrucciones	que	se	ejecutarán	en
cada	iteración.
	
En	 la	 utilización	 de	 bucles	 while	 puedes	 encontrarte	 con	 los	 siguientes
problemas:
	
Bucles	 que	 no	 se	 ejecutan	 nunca:	 pon	 especial	 atención	 a	 la
inicialización	de	las	variables	de	control	del	bucle	para	asegurarte	de
que	 la	 condición	 es	 true,	 ya	 que	 si	 la	 condición	 es	 false	 desde	 el
principio,	el	bucle	jamás	se	ejecutará.
Bucles	 infinitos:	 pon	 especial	 atención	 a	 la	 modificación	 de	 lo
valores	de	las	variables	de	control	del	bucle	dentro	del	bucle,	ya	que,
si	dichos	valores	no	se	ven	alterados	jamás,	el	bucle	nunca	parará	de
ejecutarse.
FASE	1:	Bucle	WHILE
	
La	 primera	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 del	 uso	 del	 bucle
while.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	ejecución	de	un	bucle	while	en	el	que
se	mostrará	el	valor	de	la	variable	de	control	i.	El	código	fuente	es	el	siguiente:
	
i	=	0
while	i<10:
				print(i,end="	")
				i	=	i	+	1
	
Tal	y	como	puedes	ver	en	el	código,	antes	de	empezar	a	ejecutar	el	bucle	se	ha
inicializado	la	variable	de	control	del	bucle	con	el	valor	0.	Además,	dentro	del
bloque	 de	 instrucciones	 se	 está	 alterando	 su	 valor	 para	 asegurarnos	 de	 que	 la
condición	del	bucle	llega	 a	 un	valor	 false,	 que	 ocurrirá	 cuando	 el	 valor	 de	 la
variable	de	control	sea	10.
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	la	ejecución	de	un	bucle	while	en	el
que	 la	 condición	 es	 un	 booleano	 que	 cambiará	 de	 valor	 si	 el	 número	 que
introduce	el	usuario	dentro	del	bucle	es	superior	a	100.	El	código	fuente	es	el
siguiente:
	
continuar	=	True
while	continuar:
				valor	=	int(input("Introduce	un	entero	superior	a	100:	"))
				if	valor>100:
								continuar	=	False
print("Programa	acabado")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
FASE	2:	Bucle	FOR
	
La	segunda	fase	de	este	objetivo	consiste	en	el	aprendizaje	del	uso	del	bucle	for.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	ejecución	de	un	bucle	for	sobre	una
lista	de	elementos	definida	previamente.	En	cada	iteración	del	bucle	se	mostrará
por	pantalla	el	elemento	de	la	lista	sobre	en	el	que	se	está	iterando	(item).	El
código	fuente	es	el	siguiente:
	
lista	=	[1,2,3,4,5,6,7,8,9]
for	item	in	lista:
				print(item,	end="	")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 es	 similar	 al	 ejercicio	 anterior,	 pero	 en	 este
ejercicio	se	recorrerá	una	lista	de	elemento	que	son	cadenas	de	texto.	El	código
fuente	es	el	siguiente:
	
lista	=	["ordenador",	"teclado",	"raton"]
for	item	in	lista:
				print(item,	end="	")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	ejecución	de	un	bucle	for	sobre	los
elementos	que	devuelve	la	instrucción	range,	que	te	va	a	permitir	obtener	una
lista	secuencial	de	elementos	enteros,	empezando	en	0,	y	con	tantos	elementos
como	se	indique	en	el	parámetro.	En	este	ejercicio	se	ha	establecido	que	range
devuelva	una	lista	de	0	a	9,	ya	que	se	ha	especificado	el	valor	10	como	número
de	elementos	que	compondrán	la	lista.	En	cada	iteración	se	mostrará	el	valor	del
elemento	sobre	el	que	se	está	iterando.	El	código	fuente	es	el	siguiente:
	
for	item	in	range(10):
				print(item,	end="	")
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
FASE	3:	Bucles	anidados
	
La	 tercera	 fase	 de	 este	 objetivo	 consiste	 en	 el	 aprendizaje	 de	 uso	 de	 bucles
anidados,	que	consiste	en	la	utilización	de	bucles	como	parte	de	los	bloques	de
instrucciones	de	otros	bucles.	El	bucle	que	se	encuentra	dentro	de	otro	bucle	se
suele	llama	bucle	interno	o	interior,	mientras	que	el	bucle	que	contiene	un	bucle
interior	se	llama	bucle	externo	o	exterior.	Puedes	tener	el	nivel	de	anidamiento
que	necesites,	es	decir,	un	bucle	dentro	de	otro	bucle,	que	a	su	vez	esté	dentro	de
otro	bucle	que	está	dentro	de	otro	bucle,	etc.
	
El	primer	ejercicio	de	la	fase	consiste	en	el	anidamiento	de	dos	bucles	for	que
recorren	una	lista	de	elementos	enteros	generados	con	la	instrucción	range.	En	el
bloque	de	instrucción	del	bucle	interno	se	muestran	los	elementos	sobre	los	que
están	iterando	ambos	bucles	en	ese	momento.	El	código	fuente	es	el	siguiente:
	
for	item1	in	range(3):
				for	item2	in	range(5):
								print("item1	=	"	+	str(item1)	+	",	item2	=	"	+	str(item2))
	
El	flujo	de	ejecución	será	así:
	
Iteración	 del	 primer	 bucle	 sobre	 el	 primer	 elemento	 de	 la	 primera
lista	(0).
Iteración	 de	 todos	 los	 elementos	 de	 la	 lista	 del	 segundo
bucle	(0	al	4).
Iteración	del	primer	bucle	sobre	el	segundo	elemento	de	la	primera
lista	(1).
Iteración	 de	 todos	 los	 elementos	 de	 la	 lista	 del	 segundo
bucle	(0	al	4).
Iteración	del	primer	bucle	sobre	el	tercer	elemento	de	la	primera	lista
(2).
Iteración	 de	 todos	 los	 elementos	 de	 la	 lista	 del	 segundo
bucle	(0	al	4).
	
El	bucle	interno	se	ejecuta	tantas	veces	como	iteraciones	tenga	el	bucle	externo,
en	este	caso	el	bucle	interno	se	ejecutará	completamente	un	total	de	tres	veces.
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	segundo	ejercicio	de	la	fase	consiste	en	anidar	un	bucle	while	y	un	bucle	for.
El	objetivo	del	ejercicio	es	realizar	el	mismo	bucle	que	el	del	ejercicio	anterior,
pero,	 siendo	 el	 bucle	 exterior	 un	 bucle	 while	 en	 vez	 de	 for.	 El	 número	 de
iteraciones	del	bucle	while	viene	dado	por	item1,	variable	inicializada	antes	de
declarar	el	bucle,	y	que	irá	incrementando	su	valor	dentro	del	bucle	a	medida
que	se	ejecuta	cada	iteración	del	bucle.	El	código	fuente	es	el	siguiente:
	
item1	=	0
while	item1<3:
				for	item2	in	range(5):
								print("item1	=	"	+	str(item1)	+	",	item2	=	"	+	str(item2))
				item1	=	item1	+	1
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	el	anidamiento	de	dos	bucles	while.	En
este	 ejercicio	 tienes	 que	 tener	 en	 cuenta	 que	 para	 cada	 iteración	 del	 bucle
exterior	 tienes	 que	 inicializar	 las	 variables	 de	 control	 del	 bucle	 interior.	 El
objetivo	 del	 ejercicio	 es	 realizar	 el	 mismo	 bucle	 que	 en	 los	 dos	 ejercicios
anteriores.	 El	 bucle	 externo	 es	 exactamente	 igual	 que	 el	 del	 ejercicio	 dos.	 El
número	 de	 iteraciones	 del	 buche	 interno	 viene	 dado	 por	 item2,	 variable
inicializada	antes	de	la	declaración	del	bucle,	y	que	irá	incrementando	su	valor
dentro	 del	 bucle	 a	 medida	 que	 se	 ejecuta	 cada	 iteración	 del	 bucle.	 El	 código
fuente	es	el	siguiente:
	
item1	=	0
while	item1<3:
				item2	=	0
				while	item2<5:
								print("item1	=	"	+	str(item1)	+	",	item2	=	"	+	str(item2))
								item2	=	item2	+	1
				item1	=	item1	+	1
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	cuarto	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Utilización	de	bucles	for.
Utilización	de	bucles	while.
Utilización	de	bucles	anidados.
PROYECTO	1	–	CALCULADORA
	
Ha	llegado	el	momento	de	realizar	un	pequeño	proyecto	que	incorpore	todo	lo
que	has	aprendido	hasta	el	momento.
	
El	 primer	 proyecto	 que	 realizarás	 consiste	 en	 el	 desarrollo	 de	 una	 pequeña
calculadora	 que	 realice	 las	 operaciones	 básicas.	 En	 el	 proyecto	 utilizarás	 los
siguientes	conocimientos	adquiridos:
	
Escritura	de	texto	por	pantalla.
Lectura	de	información	introducida	por	los	usuarios.
Bifurcaciones	if..elif.
Bucle	while.
Operador	lógico	NOT.
Operadores	matemáticos	(+,	-,	*	y	/).
Operador	relacional	==.
Código	fuente	y	ejecución
	
El	código	fuente	del	proyecto	es	el	siguiente:
	
fin	=	False
print	("""************
Calculadora
************
Menu
1)	Suma
2)	Resta
3)	Multiplicacion
4)	Division
5)	Salir""")
while	not(fin):
				opc	=	int(input("Opcion:"))
				if	(opc==1):
								sum1	=	int(input("Sumando	uno:"))
								sum2	=	int(input("Sumando	dos:"))
								print	("La	Suma	es:",	sum1+sum2)
				elif(opc==2):
								minuendo	=	int(input("Minuendo:"))
								sustraendo	=	int(input("Sustraendo:"))
								print	("La	Resta	es:",	minuendo-sustraendo)
				elif(opc==3):
								multiplicando	=	int(input("Multiplicando:"))
								multiplicador	=	int(input("Multiplicador:"))
								print	("La	Multiplicacion	es:",	multiplicando*multiplicador)
				elif(opc==4):
								dividendo	=	int(input("Dividendo:"))
								divisor	=	int(input("Divisor:"))
								print	("La	Division	es:",	dividendo/divisor)
				elif(opc==5):
								fin	=	True
	
Veámoslo	en	detalle.
	
El	programa	está	compuesto	por	un	bucle	while	que	se	repite	indefinidamente
hasta	que	la	variable	de	control	fin	toma	el	valor	true	y	mediante	la	operación
lógica	not	hace	que	la	condición	del	bucle	sea	falsa.
	
Antes	de	empezar	la	ejecución	del	bucle	se	inicializa	la	variable	de	control	fin	y
se	muestra	por	pantalla	el	menú	de	opciones	que	el	usuario	podrá	elegir.	Presta
atención	a	la	forma	en	la	que	puedes	escribir	texto	por	pantalla	utilizando	varias
líneas.	Se	realiza	utilizando	triples	comillas	al	principio	y	al	final	de	la	cadena	de
texto	que	quieres	mostrar	por	pantalla.
	
Dentro	del	bucle	while	está	la	lectura	de	la	opción	elegida	por	el	usuario	y	la
estructura	if..elif,	que	dependiendo	de	la	operación	seleccionada	por	el	usuario
tomará	un	camino	u	otro.
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	primer	proyecto	has	aprendido	los	siguientes	conocimientos:
	
Mostrar	texto	por	pantalla	utilizando	varias	líneas.
OBJETIVO	5	–	FUNCIONES
	
En	este	quinto	objetivo	vas	a	familiarizarte	y	a	aprender	a	usar	funciones	en	el
código	fuente	que	escribes.
	
El	objetivo	está	compuesto	por	dos	fases.	En	la	primera	vas	a	aprender	a	utilizar
funciones	de	forma	simple	y	en	la	segunda	vas	a	aprender	a	utilizar	funciones
anidadas.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	lo	que	son	las	funciones.
	
Funciones
	
Una	 función	 es	 un	 bloque	 de	 código	 fuente	 que	 contiene	 un	 conjunto	 de
instrucciones	y	que	puede	ser	utilizada	desde	el	código	fuente	que	escribes	tantas
veces	como	necesites.
	
Las	funciones	tienen	las	siguientes	capacidades:
	
Tienen	la	capacidad	de	recibir	datos	de	entrada	para	su	ejecución.
Tienen	 la	 capacidad	 de	 devolver	 datos	 como	 resultado	 de	 la
ejecución.
	
Ambas	 capacidades	 son	 opcionales,	 es	 decir,	 puedes	 tener	 funciones	 que	 no
reciben	datos	y	que	no	devuelven	nada,	funciones	que	reciben	datos	y	que	no
devuelven	 nada,	 funciones	 que	 no	 reciben	 datos	 y	 que	 devuelven	 datos	 y	 por
último	funciones	que	reciben	datos	y	que	devuelven	datos.
	
La	 utilización	 de	 funciones	 es	 beneficiosa	 ya	 que	 aporta	 las	 siguientes
características	al	código	fuente:
	
Simplificación	del	código.
Mejor	organización	del	código.
Reutilización	de	código	fuente.
	
Resumiendo,	 una	 función	 es	 un	 bloque	 de	 código	 fuente	 independiente,	 que
puede	 recibir	 datos	 de	 entradas	 y	 que	 como	 resultado	 de	 su	 ejecución	 puede
devolver	datos.
	
La	sintaxis	de	las	funciones	en	Python	es	la	siguiente:
	
def	NombreFuncion	(parámetros):
BloqueInstrucciones
return	ValorRetorno
Veamos	los	elementos	en	detalle:
	
def:	indicador	de	definición	de	función.
NombreFuncion:	nombre	que	tendrá	la	función.	Te	aconsejamos	que
utilices	nombres	de	funciones	descriptivos	que	representen	lo	que	la
función	hace.
parámetros:	conjunto	de	elementos	de	entrada	que	tiene	la	función.
Los	parámetros	son	opcionales,	es	decir,	puede	haber	0	o	más.	En
caso	de	ser	más	de	uno	los	parámetros	irán	separados	por	coma.
BloqueInstrucciones:	bloque	de	código	que	ejecuta	la	función.
return:	 retorna	 datos	 al	 código	 fuente	 que	 utilizó	 la	 función.	 Es
opcional,	 ya	 que	 el	 retorno	 de	 datos	 no	 es	 obligatorio	 en	 las
funciones.
ValorRetorno:	datos	que	se	retornan.
	
	
Hasta	aquí	te	hemos	explicado	cómo	se	definen	funciones	en	Python,	para	poder
utilizar	 funciones	 en	 Python	 desde	 el	 código	 fuente	 tienes	 que	 hacerlo	 de	 la
siguiente	manera:
	
Variable	=	NombreFuncion(parámetros)
	
Veamos	los	elementos	en	detalle:
	
Variable:	almacenará	el	valor	que	devuelve	la	función.	Es	opcional,
ya	que	se	suprime	si	la	función	no	devuelve	nada.
NombreFuncion:	nombre	de	la	función	que	vamos	a	utilizar.
Parámetros:	 parámetros	 de	 entrada	 que	 tiene	 la	 función	 y	 que	 se
escriben	 separados	 por	 comas	 en	 caso	 de	 ser	 más	 de	 uno.	 Es
opcional,	por	lo	que	si	la	función	no	recibe	parámetros	se	suprimirá.
FASE	1:	Uso	de	una	función
	
La	 primera	 fase	 del	 objetivo	 consiste	 en	 el	 aprendizaje	 del	 uso	 de	 funciones,
tanto	la	definición	de	éstas	como	el	uso	desde	otros	puntos	del	código	fuente.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	definición	de	la	función	Saludar	y
posterior	 uso	 (también	 llamado	 invocación)	 desde	 el	 programa.	 La	 función
Saludar	 no	recibe	ningún	parámetro	de	entrada	ni	devuelve	nada,	únicamente
escribe	por	pantalla.	El	código	fuente	es	el	siguiente:
	
def	Saludar():
				print("¡Hola	Time	of	Software!")
Saludar()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 definición	 de	 la	 función
EsMayorQueCero,	que	comprobará	si	el	parámetro	que	recibe	es	mayor	que	cero
o	 no	 y	 mostrará	 un	 mensaje	 por	 pantalla	 indicándolo.	 La	 invocación	 de	 la
función	 se	 realiza	 pasándole	 el	 número	 introducido	 por	 el	 usuario	 como
parámetro	de	la	misma.	El	código	fuente	es	el	siguiente:
	
def	EsMayorQueCero(param):
				if	param	>	0:
								print(param,	"es	mayor	que	cero")
				else:
								print(param,	"no	es	mayor	que	cero")
	
numero	=	int(input("Introduce	un	numero:"))
EsMayorQueCero(numero)
	
La	ejecución	del	código	fuente	anterior	tendrá	las	siguientes	salidas	dependiendo
del	número	introducido:
	
Número	menor	que	cero:
Número	mayor	que	cero:
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	definición	de	la	función	Sumar,	que
realizará	la	suma	de	los	dos	parámetros	que	recibe	como	entrada	y	devolverá	el
resultado	de	la	suma.	La	invocación	de	la	función	se	realiza	pasándole	los	dos
números	 introducidos	 por	 el	 usuario.	 El	 resultado	 de	 la	 suma	 se	 muestra	 por
pantalla.	El	código	fuente	es	el	siguiente:
	
def	Sumar(param1,	param2):
				return	param1	+	param2
	
sumando1	=	int(input("Introduce	el	primer	sumando:	"))
sumando2	=	int(input("Introduce	el	segundo	sumando:	"))
resultado	=	Sumar(sumando1,sumando2)
print("El	resultado	de	la	suma	es:	",	resultado)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	cuarto	ejercicio	de	la	fase	consiste	en	la	definición	de	la	función	SumarRestar,
que	realizará	la	suma	y	la	resta	de	sus	parámetros	y	devolverá	el	resultado	de
ambas	 operaciones.	 Presta	 atención	 a	 como	 se	 pueden	 devolver	 más	 de	 un
elemento	con	return	y	como	puedes	asignar	cada	valor	devuelto	a	una	variable
diferente.	 La	 invocación	 de	 la	 función	 se	 realiza	 pasándole	 los	 dos	 números
introducidos	por	el	usuario.	El	resultado	de	la	suma	y	la	resta	se	muestran	por
pantalla.	El	código	fuente	es	el	siguiente:
	
def	SumarRestar(param1,	param2):
				return	param1	+	param2,	param1	-	param2
	
numero1	=	int(input("Introduce	el	primer	numero:	"))
numero2	=	int(input("Introduce	el	segundo	numero:	"))
resultadosuma,	resultadoresta	=	SumarRestar(numero1,numero2)
print("El	resultado	de	la	suma	es:	",	resultadosuma)
print("El	resultado	de	la	resta	es:	",	resultadoresta)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	quinto	ejercicio	de	la	fase	consiste	en	la	definición	de	la	función	Sumar,	que
sumará	todos	los	valores	que	se	le	pasan	por	parámetro.	Presta	atención	a	como
se	 definen	 los	 parámetros	 de	 la	 función.	 De	 esta	 forma	 puedes	 pasarle	 a	 la
función	un	parámetro,	tres,	diez,	veinte,	etc.,	y	la	función	únicamente	tienes	que
definirla	una	vez.	En	estas	funciones	los	parámetros	se	reciben	como	una	lista,
por	lo	que	tendrás	que	iterarla	para	poder	procesarlos	todos,	tal	y	como	se	hace
en	el	ejercicio	para	realizar	la	suma	de	todos	los	valores.	El	resultado	de	la	suma
se	muestra	por	pantalla.	El	código	fuente	es	el	siguiente:
	
def	Sumar(*valores):
				resultado	=	0
				for	item	in	valores:
								resultado	=	resultado	+	item
				return	resultado
	
resultado	=	Sumar(23,56,3,89,78,455)
print("El	resultado	de	la	suma	es:	",	resultado)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
FASE	2:	Funciones	anidadas
	
La	segunda	fase	del	objetivo	consiste	en	el	uso	de	funciones	desde	dentro	de
funciones.	De	esta	forma	puedes	simplificar	el	código	y	reutilizar	funciones	que
ya	hayas	desarrollado	en	las	nuevas	funciones	que	desarrollas.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	evolución	del	ejercicio	cuarto	de	la
primera	fase	de	este	objetivo.	Tal	y	como	puedes	ver,	en	lugar	de	realizar	las
operaciones	de	suma	y	resta	directamente	en	la	función	SumarRestar,	se	utilizan
las	funciones	Sumar	y	Restar.	El	código	fuente	es	el	siguiente:
	
def	SumarRestar(param1,	param2):
				return	Sumar(param1,param2),	Restar(param1,param2)
	
def	Sumar(sumando1,	sumando2):
				return	sumando1	+	sumando2
	
def	Restar(minuendo,	sustraendo):
				return	minuendo	-	sustraendo
	
numero1	=	int(input("Introduce	el	primer	numero:	"))
numero2	=	int(input("Introduce	el	segundo	numero:	"))
resultadosuma,	resultadoresta	=	SumarRestar(numero1,numero2)
print("El	resultado	de	la	suma	es:	",	resultadosuma)
print("El	resultado	de	la	resta	es:	",	resultadoresta)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	quinto	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Creación	de	funciones.
Utilización	de	funciones	en	tu	código	fuente.
PROYECTO	2	–	CALCULADORA	EVOLUTIVA
	
Ha	llegado	el	momento	de	realizar	el	segundo	proyecto	del	libro,	un	proyecto
evolutivo	del	proyecto	número	uno	en	el	que	desarrollaste	una	calculadora.
	
El	 proyecto	 consiste	 en	 aplicar	 los	 conocimientos	 que	 has	 adquirido	 en	 el
objetivo	anterior	relativo	a	las	funciones	para	crear	una	versión	más	sencilla	de
leer,	ordenada	y	reutilizable.
Código	fuente	y	ejecución
	
El	proyecto	evolutivo	consiste	en	la	creación	de	las	siguientes	funciones:
	
Función	Sumar:	se	encargará	de	realizar	todo	el	proceso	de	suma.
Función	Restar:	se	encargará	de	realizar	todo	el	proceso	de	restar.
Función	 Multiplicar:	 se	 encargará	 de	 realizar	 todo	 el	 proceso	 de
multiplicar.
Función	Dividir:	se	encargará	de	realizar	todo	el	proceso	de	dividir.
Función	Calculadora:	 se	 encargará	 de	 ejecutar	 el	 bucle	 y	 pedir	 la
opción	a	ejecutar	al	usuario.
	
Una	 vez	 tengas	 las	 funciones	 creadas,	 tienes	 que	 crear	 el	 código	 fuente	 para
mostrar	las	opciones	y	la	sentencia	de	invocación	de	la	función	Calculadora.	El
código	fuente	quedaría	así:
	
def	Sumar():
				sum1	=	int(input("Sumando	uno:"))
				sum2	=	int(input("Sumando	dos:"))
				print	("La	Suma	es:",	sum1+sum2)
	
def	Restar():
				minuendo	=	int(input("Minuendo:"))
				sustraendo	=	int(input("Sustraendo:"))
				print	("La	Resta	es:",	minuendo-sustraendo)
	
def	Multiplicar():
				multiplicando	=	int(input("Multiplicando:"))
				multiplicador	=	int(input("Multiplicador:"))
				print	("La	Multiplicacion	es:",	multiplicando*multiplicador)
	
def	Dividir():
				dividendo	=	int(input("Dividendo:"))
				divisor	=	int(input("Divisor:"))
				print	("La	Division	es:",	dividendo/divisor)
	
def	Calculadora():
				fin	=	False
				while	not(fin):
								opc	=	int(input("Opcion:"))
								if	(opc==1):
												Sumar()
								elif(opc==2):
												Restar()
								elif(opc==3):
												Multiplicar()
								elif(opc==4):
												Dividir()
								elif(opc==5):
												fin	=	1
print	("""************
Calculadora
************
Menu
1)	Suma
2)	Resta
3)	Multiplicacion
4)	Division
5)	Salir""")										
Calculadora()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	segundo	proyecto	has	aprendido	los	siguientes	conocimientos:
	
Organizar	el	código	fuente	mediante	funciones.
OBJETIVO	6	–	PROGRAMACIÓN	ORIENTADA	A	OBJETOS	BÁSICA
	
En	 este	 sexto	 objetivo	 vas	 a	 familiarizarte	 con	 la	 programación	 orientada	 a
objetos	y	vas	a	aprender	a	utilizarlo	en	tus	programas.
	
El	objetivo	está	compuesto	por	dos	fases.	En	la	primera	fase	aprenderás	a	utilizar
clases	simples	para	que	afiances	de	forma	correcta	los	nuevos	conceptos	y	en	la
segunda	fase	aprenderás	a	utilizar	la	composición	de	clases.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	todos	los	conceptos	teóricos	que	necesitas
saber	para	aprender	la	programación	orientada	a	objetos.
	
Cambio	de	paradigma
	
El	 mundo	 del	 desarrollo	 de	 software	 es	 un	 mundo	 en	 constante	 evolución	 y
cambio,	y	allá	por	los	años	60	se	empezó	a	hablar	de	un	nuevo	paradigma	de
desarrollo	 que	 era	 la	 programación	 orientada	 a	 objetos.	 El	 objetivo	 de	 la
programación	 orientada	 a	 objetos	 no	 tenía	 otro	 objetivo	 que	 no	 fuera	 intentar
paliar	las	deficiencias	existentes	en	la	programación	en	ese	momento,	que	eran
las	siguientes:
	
Distinta	abstracción	del	mundo:	la	programación	en	ese	momento
se	 centraba	 en	 comportamientos	 representado	 por	 verbos
normalmente,	 mientras	 que	 la	 programación	 orientada	 a	 objetos	 se
centra	en	seres,	representados	por	sustantivos	normalmente.	Se	pasa
de	 utilizar	 funciones	 que	 representan	 verbos,	 a	 utilizar	 clases,	 que
representan	sustantivos.
Dificultad	 de	 modificación	 y	 actualización:	 los	 datos	 suelen	 ser
compartidos	 por	 los	 programas,	 por	 lo	 que	 cualquier	 ligera
modificación	de	los	datos	podía	provocar	que	otro	programa	dejara
de	funcionar	de	forma	indirecta.
Dificultad	de	mantenimiento:	la	corrección	de	errores	que	existía	en
ese	momento	era	bastante	costosa	y	difícil	de	realizar.
Dificultad	 de	 reutilización:	 las	 funciones/rutinas	 suelen	 ser	 muy
dependientes	 del	 contexto	 en	 el	 que	 se	 crearon	 y	 eso	 dificulta
reaprovecharlas	en	nuevos	programas.
	
La	 programación	 orientada	 a	 objetos,	 básicamente,	 apareció	 para	 aportar	 lo
siguiente:
	
Nueva	abstracción	del	mundo	centrándolo	en	seres	y	no	en	verbos
mediante	nuevos	conceptos	como	clase	y	objeto	que	veremos	en	el
siguiente	apartado.
Control	de	acceso	a	los	datos	mediante	encapsulación	de	éstos	en	las
clases.
Nuevas	funcionalidades	de	desarrollo	para	clases,	como	por	ejemplo
herencia	y	composición,	que	permiten	simplificar	el	desarrollo.
	
Concepto	de	clase	y	objeto
	
Antes	de	empezar	vamos	a	hacer	un	símil	de	la	programación	orientada	a	objetos
con	 el	 mundo	 real.	 Mira	 a	 tu	 alrededor,	 ¿qué	 ves?	 La	 respuesta	 es:	 objetos.
Estamos	 rodeados	 de	 objetos,	 como	 pueden	 ser	 coches,	 lámparas,	 teléfonos,
mesas…El	nuevo	paradigma	de	programación	orientada	a	objetos	está	basado	en
una	abstracción	del	mundo	real	que	nos	va	a	permitir	desarrollar	programas	de
forma	más	cercana	a	cómo	vemos	el	mundo,	pensando	en	objetos	que	tenemos
delante	y	acciones	que	podemos	hacer	con	ellos.
	
Una	clase	es	un	tipo	de	dato	cuyas	variables	se	llaman	objetos	o	instancias.	Es
decir,	 la	 clase	 es	 la	 definición	 del	 concepto	 del	 mundo	 real	 y	 los	 objetos	 o
instancias	son	el	propio	“objeto”	del	mundo	real.	Piensa	por	un	segundo	en	un
coche,	antes	de	ser	fabricado	un	coche	tiene	que	ser	definido,	tiene	que	tener	una
plantilla	 que	 especifique	 sus	 componentes	 y	 lo	 que	 puede	 hacer,	 pues	 esa
plantilla	es	lo	que	se	conoce	como	Clase.	Una	vez	el	coche	es	construido,	ese
coche	sería	un	objeto	o	instancia	de	la	clase	Coche,	que	es	quien	define	qué	es
un	coche	y	qué	se	puede	hacer	con	un	coche.
	
Las	clases	están	compuestas	por	dos	elementos:
	
Atributos:	información	que	almacena	la	clase.
Métodos:	operaciones	que	pueden	realizarse	con	la	clase.
	
Piensa	 ahora	 en	 el	 coche	 de	 antes,	 la	 clase	 coche	 podría	 tener	 atributos	 tales
como	número	de	marchas,	número	de	asientos,	cilindrada...	y	podría	realizar	las
operaciones	tales	como	subir	marcha,	bajar	marcha,	acelerar,	frenar,	encender	el
intermitente…	Un	objeto	es	un	modelo	de	coche	concreto.
	
Composición
	
La	composición	consiste	en	la	creación	de	nuevas	clases	a	partir	de	otras	clases
ya	existentes	que	actúan	como	elementos	compositores	de	la	nueva.	Las	clases
existentes	 serán	 atributos	 de	 la	 nueva	 clase.	 La	 composición	 te	 va	 a	 permitir
reutilizar	código	fuente.
	
Cuando	 hablemos	 de	 composición	 tienes	 que	 pensar	 que	 entre	 las	 dos	 clases
existe	una	relación	del	tipo	“tiene	un”.
FASE	1:	Clase	simple
	
La	 primera	 fase	 del	 objetivo	 consiste	 en	 el	 aprendizaje	 y	 uso	 de	 las	 clases	 y
objetos.
	
Tal	y	como	vas	a	ver	en	todas	las	clases	que	crees,	es	necesario	siempre	crear	un
método	llamado	“__init__”.	Es	lo	que	se	conoce	como	el	constructor	de	la	clase
o	inicializador.	Es	posible	incluir	parámetros,	la	forma	de	especificarlos	es	igual
que	se	hace	en	las	funciones.	El	método	“__init__”	es	lo	primero	que	se	ejecuta
cuando	creas	un	objeto	de	una	clase.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	creación	de	una	clase	que	represente
un	punto,	con	su	coordenada	X	y	su	coordenada	Y.	Además,	la	clase	tendrá	un
método	 para	 mostrar	 la	 información	 que	 poseen	 ambos	 puntos.	 El	 ejercicio
consistirá	en	la	creación	de	un	objeto	o	instancia	(p1)	de	la	clase,	estableciendo
las	 coordenadas	 y	 utilizando	 el	 método	 para	 mostrar	 la	 información	 de	 la
coordenada.	El	código	fuente	es	el	siguiente:
	
class	Punto:
				def	__init__	(self,	x,	y):
								self.X	=	x
								self.Y	=	y
				def	MostrarPunto(self):
								print("El	punto	es	(",self.X,",",self.Y,")")
	
p1	=	Punto(4,6)
p1.MostrarPunto()
	
La	sentencia	“p1	=	Punto(4,6)”	es	la	sentencia	en	la	que	se	crea	un	objeto	de	la
clase	Punto	y	se	almacena	en	la	variable	p1.	Presta	mucha	atención	a	cómo	se
crean	objetos	ya	que	lo	utilizarás	en	todos	los	ejercicios	que	hagas	a	partir	de
ahora.	El	tipo	de	dato	que	tiene	la	variable	p1	es	Punto.
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	realizar	lo	mismo	que	en	el	ejercicio
anterior	pero	esta	vez	creando	cuatro	objetos	de	la	clase	Punto	(p1,	p2,	p3	y	p4).
Cada	objeto	tendrá	sus	propios	valores	en	las	coordenadas.	Después	de	crear	los
cuatro	objetos	se	mostrará	la	información	que	almacena	cada	uno	de	ellos.	El
código	fuente	es	el	siguiente:
	
class	Punto:
				def	__init__	(self,	x,	y):
								self.X	=	x
								self.Y	=	y
				def	MostrarPunto(self):
								print("El	punto	es	(",self.X,",",self.Y,")")
	
p1	=	Punto(4,6)
p2	=	Punto(-5,9)
p3	=	Punto(3,-7)
p4	=	Punto(0,4)
p1.MostrarPunto()
p2.MostrarPunto()
p3.MostrarPunto()
p4.MostrarPunto()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 tercer	 ejercicio	 de	 la	 fase	 tiene	 el	 objetivo	 de	 aprender	 a	 modificar	 la
información	que	tiene	almacenada	un	objeto	de	una	clase.	Para	ello,	creamos	un
objeto	de	la	clase	Punto	y	posteriormente	modificaremos	la	información	de	uno
de	sus	puntos.	La	forma	de	acceder	a	los	atributos	es	Objeto.NombreAtributo.	Al
final	del	programa	se	mostrará	por	pantalla	la	información	que	tiene	el	objeto
antes	de	la	modificación	y	después	de	la	modificación.	El	código	fuente	es	el
siguiente:
	
class	Punto:
				def	__init__	(self,	x,	y):
								self.X	=	x
								self.Y	=	y
				def	MostrarPunto(self):
								print("El	punto	es	(",self.X,",",self.Y,")")
	
p1	=	Punto(4,6)
p1.MostrarPunto()
p1.X	=	7
p1.MostrarPunto()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	 cuarto	 ejercicio	 de	 la	 fase	 consiste	 en	 aprender	 que	 asignando	 objetos	 se
asignan	los	valores	que	tiene	el	objeto	en	sus	atributos.	En	el	ejercicio	se	crean
dos	objetos	de	la	clase	Punto	y	se	muestran	por	pantalla,	después	se	asigna	un
objeto	a	otro	y	se	muestra	por	pantalla	el	objeto	destino	de	la	asignación	para
comprobar	 que	 la	 información	 que	 tenía	 almacenado	 el	 objeto	 ha	 sido
modificada	por	la	que	contenía	el	otro	objeto.	El	código	fuente	es	el	siguiente:
	
class	Punto:
				def	__init__	(self,	x,	y):
								self.X	=	x
								self.Y	=	y
				def	MostrarPunto(self):
								print("El	punto	es	(",self.X,",",self.Y,")")
	
p1	=	Punto(4,6)
p1.MostrarPunto()
p2	=	Punto(3,8)
p2.MostrarPunto()
p1	=	p2
p1.MostrarPunto()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Tal	y	como	puedes	comprobar,	la	información	del	objeto	p1	ha	sido	actualizada
con	la	información	del	objeto	p2.
FASE	2:	Composición
	
La	segunda	fase	del	objetivo	consiste	en	el	aprendizaje	y	uso	de	la	composición
de	clases.
	
El	primer	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	utilización	de	clases
como	atributos	de	otras	clases.	Teniendo	la	clase	que	hemos	estado	utilizando	en
el	 objetivo	 anterior,	 definiremos	 una	 nueva	 clase	 llamada	 Triangulo,	 que
contendrá	 tres	 atributos	 Punto.	 Tal	 y	 como	 te	 hemos	 explicado,	 no	 hay	 que
especificar	el	tipo	de	dato	de	los	atributos,	por	lo	que	creando	tres	atributos	es
suficiente,	además,	hay	que	crear	un	método	en	la	clase	Triangulo	que	muestre
por	pantalla	la	información	de	cada	uno	de	los	atributos	utilizando	el	método	que
tiene	la	clase	Punto	para	ello.	El	ejercicio	consiste	en	la	creación	de	tres	objetos
de	la	clase	Punto	y	un	objeto	de	la	clase	Triangulo	que	recibirá	los	tres	objetos
de	la	clase	Punto	como	parámetro.	Por	último,	se	mostrará	la	información	de	la
clase	 Triangulo	 utilizando	 el	 método	 MostrarVertices	 que	 muestra	 la
información	de	los	tres	atributos	utilizando	el	método	MostrarPunto	que	tiene	la
clase	Punto.	El	código	fuente	es	el	siguiente:
	
class	Punto:
				def	__init__	(self,	x,	y):
								self.X	=	x
								self.Y	=	y
				def	MostrarPunto(self):
								print("El	punto	es	(",self.X,",",self.Y,")")
	
class	Triangulo:
				def	__init__	(self,	v1,v2,v3):
								self.V1	=	v1
								self.V2	=	v2
								self.V3	=	v3
				def	MostrarVertices(self):
								self.V1.MostrarPunto()
								self.V2.MostrarPunto()
								self.V3.MostrarPunto()
	
v1	=	Punto(3,4)
v2	=	Punto(6,8)
v3	=	Punto(9,2)
triangulo	=	Triangulo(v1,v2,v3)
triangulo.MostrarVertices()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
Ahora	eres	capaz	de…
	
En	este	sexto	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Creación	de	clases.
Utilización	de	clases	en	tus	programas.
Acceso	a	atributos	de	clase.
Acceso	a	métodos	de	clase.
Diferencia	entre	clase	y	objeto	o	instancia.
Composición	de	clases.
PROYECTO	3	–	BIBLIOTECA
	
Ha	llegado	el	momento	de	realizar	el	tercer	proyecto	del	libro,	un	proyecto	en	el
que	vas	a	afianzar	los	conocimientos	adquiridos	en	el	objetivo	anterior	sobre	la
programación	orientada	a	objetos.
	
En	el	proyecto	utilizarás	todos	los	conocimientos	del	objetivo	anterior	para	crear
una	aplicación	básica	que	te	permita	simular	la	gestión	de	una	biblioteca.	En	el
proyecto	utilizarás	los	siguientes	conocimientos	adquiridos	desde	que	empezaste
el	libro:
	
Mostrar	información	por	pantalla.
Lectura	de	información	introducida	por	el	usuario.
Utilización	de	datos	básicos:	números,	cadenas	de	texto	y	listas.
Bucle	while.
Bucle	for.
Bifurcaciones	if..elif...
Creación	y	utilización	de	funciones.
Programación	orientada	a	objetos.
Composición	de	clases.
Código	fuente	y	ejecución
	
El	 proyecto,	 aunque	 es	 mucho	 más	 extenso	 que	 todo	 lo	 que	 has	 hecho	 hasta
ahora,	es	muy	sencillo.	A	continuación,	te	vamos	a	explicar	todo	lo	que	vas	a
desarrollar.
	
La	biblioteca	que	vas	a	desarrollar	contendrá	las	siguientes	tres	clases:
	
Autor:	clase	que	contendrá	toda	la	información	sobre	la	persona	que
ha	escrito	el	libro.
Libro:	clase	que	contendrá	toda	la	información	sobre	el	libro.
Biblioteca:	 clase	 que	 contendrá	 todos	 los	 libros	 que	 componen	 la
biblioteca.
	
Veamos	las	clases	en	detalle.
	
Clase	Autor
	
La	clase	Autor	estará	compuesta	por	los	siguientes	atributos:
	
Nombre:	nombre	del	escritor.
Apellidos:	apellidos	del	escritor.
	
La	clase	Autor	estará	compuesta	por	los	siguientes	métodos:
	
MostrarAutor:	 mostrará	 por	 pantalla	 los	 atributos	 Nombre	 y
Apellidos.
	
Clase	Libro
	
La	clase	Libro	estará	compuesta	por	los	siguientes	atributos:
	
Título:	nombre	del	libro.
ISBN:	identificador	del	libro.
Autor:	atributo	del	tipo	Autor.
	
La	clase	Libro	estará	compuesta	por	los	siguientes	métodos:
AñadirAutor:	 almacenará	 la	 información	 del	 autor	 en	 el	 atributo
Autor.
MostrarLibro:	mostrará	por	pantalla	la	información	del	libro.
ObtenerTitulo:	devolverá	el	título	del	libro.
	
Clase	Biblioteca
	
La	clase	Biblioteca	estará	compuesta	por	los	siguientes	atributos:
	
ListaLibros:	atributo	de	tipo	lista	que	contendrá	todos	los	libros	que
componen	la	biblioteca.
	
La	clase	Biblioteca	estará	compuesta	por	los	siguientes	métodos:
	
NumeroLibros:	 devolverá	 el	 número	 de	 libros	 que	 componen	 la
librería.
AñadirLibro:	almacenará	el	libro	pasado	por	parámetro	en	la	lista	de
libros	que	tiene	como	atributo.
BorrarLibro:	eliminará	un	libro	de	la	biblioteca	a	partir	del	título	de
este.
MostrarBiblioteca:	 mostrará	 por	 pantalla	 todos	 los	 libros	 que
componen	la	biblioteca.
	
Funciones
	
Ahora	veamos	las	diferentes	funciones	que	contendrá	el	proyecto:
	
MostrarMenu:	función	que	mostrará	el	menú	de	opciones	al	usuario
para	que	elija	lo	que	quiere	hacer.
AñadirLibroABiblioteca:	función	que	realizará	el	flujo	de	dar	de	alta
un	 nuevo	 libro	 en	 la	 biblioteca,	 pidiendo	 toda	 la	 información
necesaria	para	un	libro.
MostrarBiblioteca:	 función	 que	 utilizando	 el	 método
MostrarBiblioteca	de	la	clase	Biblioteca	mostrará	la	información	de
todos	los	libros	que	componen	la	biblioteca.
BorrarLibro:	función	que	realizará	el	flujo	de	dar	de	baja	(borrar)	un
libro	de	la	biblioteca.
NumeroLibros:	 función	 que	 mostrará	 el	 número	 de	 libros	 que
componen	la	biblioteca.
	
Programa
	
El	 programa	 consistirá	 en	 un	 bucle	 que	 muestra	 el	 menú	 y	 en	 función	 de	 la
opción	elegida	se	realiza	una	operación	u	otra.	Las	opciones	disponibles	son	las
siguientes:
	
1.	 Añadir	libro	a	la	biblioteca.
2.	 Mostrar	la	biblioteca.
3.	 Borrar	libro	de	la	biblioteca.
4.	 Mostrar	el	número	de	libros	que	componen	la	biblioteca.
5.	 Salir.
	
El	código	fuente	sería	el	siguiente:
	
class	Autor:
				def	__init__	(self,	nombre,	apellidos):
								self.Nombre	=	nombre
								self.Apellidos	=	apellidos
				def	MostrarAutor(self):
								print("Autor:	",self.Nombre,"	",self.Apellidos)
	
class	Libro:
				def	__init__	(self,	titulo,	isbn):
								self.Titulo	=	titulo
								self.ISBN	=	isbn
				def	AñadirAutor(self,	autor):
								self.Autor	=	autor
				def	MostrarLibro(self):
								print("------	Libro	------")
								print("Titulo:	",self.Titulo)
								print("ISBN:	",	self.ISBN)
								self.Autor.MostrarAutor()
								print("-------------------")
				def	ObtenerTitulo(self):
								return	self.Titulo;
	
class	Biblioteca:
				def	__init__(self):
								self.ListaLibros	=	[]
				def	NumeroLibros(self):
								return	len(self.ListaLibros)
				def	AñadirLibro(self,libro):
								self.ListaLibros	=	self.ListaLibros	+	[libro]
				def	MostrarBiblioteca(self):
								print("########################################")
								for	item	in	self.ListaLibros:
												item.MostrarLibro()
								print("########################################")
				def	BorrarLibro(self,	titulo):
encontrado	=	False
								posicionaborrar	=	-1
								for	item	in	self.ListaLibros:
												posicionaborrar	+=	1
												if	item.ObtenerTitulo()	==	titulo:
																encontrado	=	True
																break
								if	encontrado:
												del	self.ListaLibros[posicionaborrar]
												print("¡Libro	borrado	correctamente!")
								else:
												print("¡Libro	no	encontrado!")
	
def	MostrarMenu():
				print	("""Menu
1)	Añadir	libro	a	la	biblioteca
2)	Mostrar	biblioteca
3)	Borrar	libro
4)	¿Numero	de	libros?
5)	Salir""")
	
def	AñadirLibroABiblioteca(biblioteca):
				titulo	=	input("Introduzca	el	titulo	del	libro:	")
				isbn	=	input("Introduzca	el	ISBN	del	libro:	")
				autornombre	=	input("Introduzca	el	nombre	del	autor:	")
				autorapellidos	=	input("Introduzca	el	apellido	del	autor:	")
				autor	=	Autor(autornombre,autorapellidos)
				libro	=	Libro(titulo,	isbn)
				libro.AñadirAutor(autor)
				biblioteca.AñadirLibro(libro)
				return	biblioteca
def	MostrarBiblioteca(biblioteca):
				biblioteca.MostrarBiblioteca()
	
def	BorrarLibro(biblioteca):
				titulo	=	input("Introduzca	el	titulo	del	libro	a	borrar:	")
				biblioteca.BorrarLibro(titulo)
	
def	NumeroLibros(biblioteca):
				print("El	numero	de	libros	en	la	biblioteca	es:	",biblioteca.NumeroLibros())
	
fin	=	False
biblioteca	=	Biblioteca()
	
while	not	fin:
				MostrarMenu()
				opcion	=	int(input("Seleccione	opcion:"))
				if(opcion	==	1):
								biblioteca	=	AñadirLibroABiblioteca(biblioteca)
				elif(opcion	==	2):
								MostrarBiblioteca(biblioteca)
				elif(opcion	==	3):
								BorrarLibro(biblioteca)
				elif(opcion	==	4):
								NumeroLibros(biblioteca)
				elif(opcion	==	5):
								fin	=	True
	
print("¡Adios!")
Veamos	cómo	se	vería	el	programa.	En	la	siguiente	imagen	puedes	ver	el	alta	de
dos	libros	en	la	biblioteca	(Opción	1)	y	el	mostrado	del	número	de	libros	que
componen	la	biblioteca	(Opción	4).
	
	
En	 la	 siguiente	 imagen	 puedes	 ver	 cómo	 se	 ve	 el	 aplicativo	 cuando	 muestras
todos	los	libros	que	componen	la	biblioteca	(Opción	2):
Por	último,	en	la	siguiente	imagen	puedes	ver	el	proceso	de	borrado	de	libros	de
la	biblioteca	(Opción	3)	y	el	posterior	uso	de	mostrar	el	número	de	libros	que
componen	la	biblioteca	(Opción	2)	para	confirmar	que	se	ha	borrado	el	libro.	La
última	opción	del	menú	es	la	de	salir	(Opción	5),	con	la	que	termina	la	ejecución
del	programa.
1. aprende python en un fin de semana sqminingsociety
Ahora	eres	capaz	de…
	
En	este	tercer	proyecto	has	aprendido	los	siguientes	conocimientos:
	
Creación	 de	 un	 programa	 completo	 desde	 cero	 utilizando
programación	orientada	a	objetos.
Estructurar	el	código	fuente	desde	el	comienzo.
OBJETIVO	7	–	PROGRAMACIÓN	ORIENTADA	A	OBJETOS	AVANZADA
	
En	este	séptimo	objetivo	vas	a	aprender	nuevos	conceptos	relacionados	con	la
programación	orientada	a	objetos	que	te	van	a	permitir	desarrollar	de	forma	más
sencilla	y	en	menos	tiempo.
	
El	objetivo	está	compuesto	por	tres	fases.	La	primera	fase	consiste	en	aprender	el
concepto	de	encapsulación	de	datos,	el	segundo	consiste	en	aprender	el	concepto
de	herencia	y	el	tercero	el	concepto	de	herencia	múltiple.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	todos	los	conceptos	que	vas	a	aprender	a
utilizar	en	este	objetivo.
	
Encapsulación
	
La	 encapsulación	 de	 datos	 es	 el	 pilar	 básico	 de	 la	 programación	 orientada	 a
objetos,	que	consiste	en	proteger	los	datos	de	accesos	o	usos	no	controlados.
	
Los	datos	(atributos)	que	componen	una	clase	pueden	ser	de	dos	tipos:
	
Públicos:	los	datos	son	accesibles	sin	control.
Privados:	los	datos	son	accesibles	de	forma	controlada.
	
Para	 poder	 encapsular	 los	 datos	 lo	 que	 se	 tiene	 que	 hacer	 es	 definirlos	 como
privados	 y	 generar	 un	 método	 en	 la	 clase	 para	 poder	 acceder	 a	 ellos,	 de	 esta
forma,	únicamente	son	accesibles	de	forma	directa	los	datos	por	la	clase.
	
La	 encapsulación	 no	 sólo	 puede	 realizarse	 sobre	 los	 atributos	 de	 la	 clase,
también	es	posible	realizarla	sobre	los	métodos,	es	decir,	aquellos	métodos	que
indiquemos	que	son	privados	no	podrán	ser	utilizados	por	elementos	externos	al
propio	objeto.
	
Herencia
	
La	herencia	consiste	en	la	definición	de	una	clase	utilizando	como	base	una	clase
ya	existente.	La	nueva	clase	derivada	tendrá	todas	las	características	de	la	clase
base	 y	 ampliará	 el	 concepto	 de	 ésta,	 es	 decir,	 tendrá	 todos	 los	 atributos	 y
métodos	de	la	clase	base.	Por	tanto,	la	herencia	te	va	a	permitir	reutilizar	código
fuente.
	
Cuando	hablemos	de	herencia	tienes	que	pensar	que	entre	las	dos	clases	existe
una	relación	del	tipo	“es	un”.
FASE	1:	Encapsulación
	
La	primera	fase	del	objetivo	consiste	en	el	aprendizaje	y	uso	de	la	encapsulación
de	los	atributos	y	métodos	de	las	clases.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	creación	de	dos	clases	que	contienen
la	 misma	 información	 pero	 que	 se	 diferencia	 en	 que	 una	 tiene	 sus	 atributos
declarados	 como	 públicos	 (PuntoPublico)	 y	 la	 otra	 los	 tiene	 como	 privado
(PuntoPrivado).	Para	la	clase	que	tiene	los	atributos	como	privados	es	necesario
que	 incluyas	 los	 métodos	 para	 leer	 (normalmente	 se	 usa	 como	 nombre	 del
método	Get	unido	al	nombre	del	atributo)	y	para	escribir	(normalmente	se	usa
como	nombre	del	método	Set	unido	al	nombre	del	atributo).	El	ejercicio	consiste
en	que	veas	las	diferencias	de	definición,	uso	y	acceso	a	los	atributos	públicos	y
privados.	La	definición	de	atributos	privados	se	realiza	incluyendo	los	caracteres
“__”	 entre	 la	 palabra	 “self.”	 y	 el	 nombre	 del	 atributo.	 El	 código	 fuente	 es	 el
siguiente:
	
class	PuntoPublico:
				def	__init__	(self,	x,	y):
								self.X	=	x
								self.Y	=	y
	
class	PuntoPrivado:
				def	__init__	(self,	x,	y):
								self.__X	=	x
								self.__Y	=	y
				def	GetX(self):
								return	self.__X
				def	GetY(self):
								return	self.__Y
				def	SetX(self,	x):
								self.__X	=	x
				def	SetY(self,	y):
								self.__Y	=	y
	
publico	=	PuntoPublico(4,6)
privado	=	PuntoPrivado(7,3)
print("Valores	punto	publico:",	publico.X,",",publico.Y)
print("Valores	punto	privado:",	privado.GetX(),",",privado.GetY())
publico.X	=	2
privado.SetX(9)
print("Valores	punto	publico:",	publico.X,",",publico.Y)
print("Valores	punto	privado:",	privado.GetX(),",",privado.GetY())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	segundo	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	encapsulación	de
los	 métodos	 de	 una	 clase.	 La	 definición	 de	 métodos	 privados	 se	 realiza
incluyendo	los	caracteres	“__”	delante	del	nombre	del	método.	En	el	ejercicio
vas	a	definir	dos	métodos	privados	y	uno	público	mediante	el	cual	utilizarás	los
dos	privados.	El	código	fuente	es	el	siguiente:
	
class	OperarValores:
				def	__init__	(self,	v1,	v2):
								self.__V1	=	v1
								self.__V2	=	v2
				def	__Sumar(self):
								return	self.__V1	+	self.__V2
				def	__Restar(self):
								return	self.__V1	-	self.__V2
				def	Operar(self):
								print("El	resultado	de	la	suma	es:	",self.__Sumar())
								print("El	resultado	de	la	resta	es:	",self.__Restar())
	
operarvalores	=	OperarValores(7,3)
operarvalores.Operar()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	comprobación	del	error	que	aparece	al
intentar	 acceder	 a	 un	 método	 privado.	 El	 ejercicio	 es	 el	 mismo	 que	 en	 el
ejercicio	anterior,	pero	invocando	a	una	de	las	operaciones	privadas	de	la	clase.
El	código	fuente	es	el	siguiente:
	
class	OperarValores:
				def	__init__	(self,	v1,	v2):
								self.__V1	=	v1
								self.__V2	=	v2
				def	__Sumar(self):
								return	self.__V1	+	self.__V2
				def	__Restar(self):
								return	self.__V1	-	self.__V2
				def	Operar(self):
								print("El	resultado	de	la	suma	es:	",self.__Sumar())
print("El	resultado	de	la	resta	es:	",self.__Restar())
	
operarvalores	=	OperarValores(7,3)
operarvalores.Operar()
print("El	resultado	de	la	suma	es:	",operarvalores.__Sumar())
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
FASE	2:	Herencia
	
La	segunda	fase	del	objetivo	consiste	en	el	aprendizaje	y	uso	de	la	herencia	en
programación	orientada	a	objetos.
	
El	 primer	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 utilización	 de	 una	 clase	 que	 será
heradada	 por	 otra.	 La	 clase	 que	 será	 heradada	 será	 una	 clase	 que	 llamaremos
Electrodomestico,	que	contendrá	una	serie	de	atributos	y	métodos	que	pueden
ser	 heredados	 por	 otros	 electrodomésticos	 más	 concretos,	 como	 puede	 ser	 la
clase	Lavadora.	 Para	 realizar	 la	 operación	 de	 herencia	 en	 Python	 únicamente
tienes	que	añadir	entre	paréntesis	en	la	cabecera	de	la	definición	de	clase	la	clase
de	la	que	quieres	que	herede	(puedes	comprobarlo	en	la	definición	de	la	clase
Lavadora	 del	 ejercicio).	 La	 clase	 Lavadora	 tendrá	 disponibles	 los	 atributos	 y
métodos	de	la	clase	Electrodomestico.	El	ejercicio	consiste	en	la	creación	de	un
objeto	 Lavadora	 y	 utilizando	 los	 métodos	 de	 ambas	 clases	 (Lavadora	 y
Electrodomestico)	 rellenar	 toda	 la	 información	 y	 mostrarla	 por	 pantalla.	 El
código	fuente	es	el	siguiente:
	
class	Electrodomestico:
				def	__init__	(self):
								self.__Encendido	=	False
								self.__Tension	=	0
				def	Encender(self):
								self.__Encendido	=	True
				def	Apagar(self):
								self.__Encendido	=	False
				def	Encendido(self):
								return	self.__Encendido
				def	SetTension(self,	tension):
								self.__Tension	=	tension
				def	GetTension(self):
								return	self.__Tension
	
class	Lavadora(Electrodomestico):
				def	__init__	(self):
								self.__RPM	=	0
								self.__Kilos	=	0
				def	SetRPM(self,	rpm):
								self.__RPM	=	rpm
				def	SetKilos(self,	kilos):
								self.__Kilos	=	kilos
				def	MostrarLavadora(self):
								print("#########")
								print("Lavadora:")
								print("tRPM:",self.__RPM)
								print("tKilos:",self.__Kilos)
								print("tTension:",self.GetTension())
								if	self.Encendido():
												print("t¡Lavadora	encendida!")
else:
												print("tLavadora	no	encendida.")
								print("#########")
	
lavadora	=	Lavadora()
lavadora.SetRPM(1200)
lavadora.SetKilos(7)
lavadora.SetTension(220)
lavadora.Encender()
lavadora.MostrarLavadora()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	segundo	ejercicio	de	la	fase	consiste	en	ampliar	el	primer	ejercicio	creando
una	 clase	 nueva	 que	 herede	 también	 de	 la	 clase	 Electrodomestico.	 En	 este
ejercicio	 crearás	 la	 clase	 Microondas,	 que	 será	 una	 clase	 completamente
diferente	a	Lavadora,	pero,	heredando	ambas	de	la	clase	Electrodomestico.	El
ejercicio	 consiste	 en	 la	 creación	 de	 un	 objeto	 de	 ambas	 clases	 y	 rellenar	 su
información	para	posteriormente	mostrarla	por	pantalla.	El	código	fuente	es	el
siguiente:
	
class	Electrodomestico:
				def	__init__	(self):
								self.__Encendido	=	False
								self.__Tension	=	0
				def	Encender(self):
								self.__Encendido	=	True
				def	Apagar(self):
								self.__Encendido	=	False
				def	Encendido(self):
								return	self.__Encendido
				def	SetTension(self,	tension):
								self.__Tension	=	tension
				def	GetTension(self):
								return	self.__Tension
	
class	Lavadora(Electrodomestico):
				def	__init__	(self):
								self.__RPM	=	0
								self.__Kilos	=	0
				def	SetRPM(self,	rpm):
								self.__RPM	=	rpm
				def	SetKilos(self,	kilos):
self.__Kilos	=	kilos
				def	MostrarLavadora(self):
								print("#########")
								print("Lavadora:")
								print("tRPM:",self.__RPM)
								print("tKilos:",self.__Kilos)
								print("tTension:",self.GetTension())
								if	self.Encendido():
												print("t¡Lavadora	encendida!")
								else:
												print("tLavadora	no	encendida.")
								print("#########")
	
class	Microondas(Electrodomestico):
				def	__init__	(self):
								self.__PotenciaMaxima	=	0
								self.__Grill	=	False
				def	SetPotenciaMaxima(self,	potencia):
								self__PotenciaMaxima	=	potencia
				def	SetGrill(self,	grill):
								self.__Grill	=	grill
				def	MostrarMicroondas(self):
								print("#########")
								print("Microondas:")
								print("tPotencia	maxima:",self.__PotenciaMaxima)
								if	self.__Grill	==	True:
												print("tGrill:	Si")
								else:
												print("rGrill:	No")
								print("tTension:",self.GetTension())
								if	self.Encendido():
												print("t¡Microondas	encendida!")
								else:
												print("tMicroondas	no	encendida.")
								print("#########")
	
lavadora	=	Lavadora()
lavadora.SetRPM(1200)
lavadora.SetKilos(7)
lavadora.SetTension(220)
lavadora.Encender()
microondas	=	Microondas()
microondas.SetPotenciaMaxima(800)
microondas.SetGrill(True)
microondas.SetTension(220)
microondas.Apagar()
lavadora.MostrarLavadora()
microondas.MostrarMicroondas()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
FASE	3:	Herencia	múltiple
	
La	 tercera	 fase	 del	 objetivo	 consiste	 en	 el	 aprendizaje	 y	 uso	 de	 la	 herencia
múltiple	en	programación	orientada	a	objetos.	Mediante	la	herencia	múltiple	vas
a	poder	tener	un	objeto	que	herede	de	más	de	una	clase.
	
El	primer	ejercicio	de	la	fase	consiste	en	la	creación	de	tres	clases	diferente	en	el
que	una	de	ellas	heredará	de	las	otras	dos.	La	herencia	múltiple	se	implementa
igual	que	la	herencia	simple,	pero	añadiendo	más	clases	separadas	por	coma	a	la
cabecera	de	la	definición	de	la	clase	que	hereda.	El	ejercicio	consiste	en	rellenar
la	información	del	objeto	de	la	clase	que	hereda	de	las	otras	dos	y	mostrar	su
información	por	pantalla.	El	código	fuente	es	el	siguiente:
	
class	Hotel:
				def	__init__	(self):
								self.__NumeroHabitaciones	=	0
								self.__Estrellas	=	0
				def	SetNumeroHabitaciones(self,	habs):
								self.__NumeroHabitaciones	=	habs
				def	SetEstrellas(self,	estrellas):
								self.__Estrellas	=	estrellas
				def	MostrarHotel(self):
								print("---------")
								print("Hotel:")
								print("tEstrellas:",	self.__Estrellas)
								print("tNumero	de	habitaciones:",	self.__NumeroHabitaciones)
								print("---------")
	
class	Restaurante():
				def	__init__	(self):
								self.__Tenedores	=	0
								self.__HoraApertura	=	0
				def	SetTenedores(self,	tenedores):
								self.__Tenedores	=	tenedores
				def	SetHoraApertura(self,	hora):
								self.__HoraApertura	=	hora
				def	MostrarRestaurante(self):
								print("---------")
								print("Restaurante:")
								print("tTenedores:",self.__Tenedores)
								print("tHora	de	Apertura:",self.__HoraApertura)
								print("---------")
	
class	Negocio(Hotel,	Restaurante):
				def	__init__(self):
								self.__Nombre	=	""
								self.__Direccion	=	""
								self.__Telefono	=	0
				def	SetNombre(self,	nombre):
								self.__Nombre	=	nombre
				def	SetDireccion(self,	direccion):
								self.__Direccion	=	direccion
def	SetTelefono(self,	telefono):
								self.__Telefono	=	telefono
				def	MostrarNegocio(self):
								print("#########")
								print("Negocio:")
								print("tNombre:",	self.__Nombre)
								print("tDireccion:",	self.__Direccion)
								print("tTelefono:",	self.__Telefono)
								self.MostrarHotel()
								self.MostrarRestaurante()
								print("#########")
	
negocio	=	Negocio()
negocio.SetEstrellas(4)
negocio.SetNumeroHabitaciones(255)
negocio.SetTenedores(3)
negocio.SetHoraApertura(8)
negocio.SetNombre("Time	of	Software")
negocio.SetDireccion("Calle	Falsa	123")
negocio.SetTelefono("0034914567890")
negocio.MostrarNegocio()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	séptimo	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Encapsulación	de	los	atributos	y	métodos	de	las	clases.
Utilización	de	herencia	simple	y	múltiple	de	clases.
OBJETIVO	8	–	TRABAJANDO	CON	FICHEROS
	
En	 este	 octavo	 objetivo	 vas	 a	 aprender	 a	 manejar	 la	 lectura	 y	 la	 escritura	 de
ficheros	de	texto.	El	manejo	de	ficheros	de	texto	es	algo	muy	importante,	ya	que
te	van	a	permitir	leer	y	guardar	información	que	utilizas	en	tus	programas	en
ficheros	en	tu	ordenador.
	
El	objetivo	está	compuesto	por	dos	fases.	En	la	primera	fase	aprenderás	a	leer
información	almacenada	en	ficheros	de	texto	y	en	la	segunda	fase	aprenderás	a
escribir	información	en	ficheros	de	texto.
Conceptos	teóricos
	
En	este	apartado	vamos	a	explicarte	los	conceptos	teóricos	que	necesitas	saber
para	trabajar	con	ficheros	en	Python.
	
Manejo	de	ficheros
	
La	lectura	y	escritura	de	ficheros	de	texto	en	Python	se	realiza	con	la	función
open,	que	devuelve	un	objeto	que	te	permitirá	realizar	dichas	operaciones	con	el
fichero	que	has	abierto.	Es	realmente	sencillo	trabajar	con	ficheros	de	texto	en
Python.
	
La	función	open	tiene	dos	parámetros	de	entrada:
	
Ruta	del	fichero	que	se	desea	abrir.
Modo	de	apertura	del	fichero.
	
Veamos	los	diferentes	modos	de	apertura	disponibles:
	
“r”:	abre	el	fichero	para	lectura.	Es	el	modo	de	apertura	por	defecto
en	el	caso	de	que	no	se	especifique	uno.
“w”:	 abre	 el	 fichero	 para	 escritura	 truncándolo,	 es	 decir,	 borrando
todo	el	contenido	que	tiene	para	empezar	a	escribir	de	nuevo	desde
cero.
“x”:	 crea	 un	 fichero	 para	 escribir	 en	 él.	 En	 caso	 de	 que	 ya	 exista
devuelve	un	error.
“a”:	abre	el	fichero	para	escritura	situando	el	cursor	de	escritura	al
final	del	fichero.
“b”:	abre	el	fichero	en	modo	binario.	Un	fichero	binario	es	un	tipo	de
fichero	 con	 información	 representada	 en	 ceros	 y	 unos	 en	 lugar	 de
texto	plano,	por	ejemplo,	fotografías,	archivos	ejecutables,	ficheros
de	Microsoft	Word,	etc.
“t”:	abre	el	fichero	en	modo	fichero	de	texto.	Es	el	modo	de	apertura
por	defecto	en	el	caso	de	que	no	se	especifique	que	sea	binario	o	de
texto.
“+”:	abre	el	fichero	para	lectura	y	escritura.
Una	vez	has	acabado	de	trabajar	con	el	fichero	de	texto	es	necesario	que	cierres
el	fichero.	Para	ello	está	la	función	close,	que	te	permitirá	terminar	de	trabajar
con	el	fichero	que	abriste	previamente.
	
En	las	fases	vamos	a	explicarte	los	diferentes	comandos	que	puedes	utilizar	para
realizar	lecturas	y	escrituras	en	los	ficheros.
FASE	1:	Lectura	de	ficheros	de	texto
	
La	 primera	 fase	 del	 objetivo	 consiste	 en	 el	 aprendizaje	 y	 uso	 de	 todos	 los
comandos	necesarios	para	realizar	lecturas	de	ficheros	de	texto.
	
En	todos	los	ejercicios	de	la	fase	vas	a	utilizar	un	fichero	de	texto	con	contenido,
por	lo	que	deberás	de	crear	un	fichero	y	escribir	algo	dentro	de	él.	La	ruta	del
fichero	puede	ser	la	que	prefieras,	en	el	ejercicio	hemos	supuesto	que	el	fichero
se	llama	“prueba.txt”	y	que	se	encuentra	en	el	mismo	directorio	que	el	programa
de	Python,	en	caso	de	que	lo	hayas	creado	en	otra	carpeta	o	con	otro	nombre
deberás	de	modificar	el	parámetro	de	la	ruta	del	fichero	de	la	función	open.
	
El	fichero	“prueba.txt”	que	hemos	utilizado	contiene	la	siguiente	información:
	
Time	of	Software
http://www.timeofsoftware.com
Aprende	Python	en	un	fin	de	semana
Aprende	Arduino	en	un	fin	de	semana
	
El	primer	ejercicio	de	la	fase	consiste	en	la	lectura	de	un	fichero	de	texto	y	en
mostrar	 su	contenido	por	pantalla.	La	realización	de	la	lectura	se	hace	con	el
comando	read,	que	lee	todo	el	contenido	del	fichero	y	lo	almacena	como	una
cadena	de	texto.	El	código	fuente	es	el	siguiente:
	
f	=	open("prueba.txt","r")
texto	=	f.read()
print(texto)
f.close()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 consiste	 en	 la	 lectura	 de	 un	 fichero	 de	 texto
utilizando	 un	 bucle	 for.	 Cada	 iteración	 del	 bucle	 lee	 una	 línea	 de	 éste.	 El
ejercicio	irá	leyendo	línea	a	línea	el	fichero	de	texto	y	mostrándolo	por	pantalla.
El	código	fuente	es	el	siguiente:
for	linea	in	open("prueba.txt","r"):
				print(linea)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	la	lectura	del	fichero	de	texto	línea	a
línea	utilizando	el	comando	readline,	que	devuelve	el	contenido	de	una	línea,
dejando	 el	 cursor	 de	 lectura	 en	 la	 siguiente	 línea	 para	 la	 siguiente	 lectura.	 El
ejercicio	mostrará	por	pantalla	todas	las	líneas	que	lee.	En	el	ejercicio	hemos
incluido	únicamente	la	lectura	de	las	cuatro	primeras	líneas,	en	caso	de	que	tu
fichero	 tenga	 más	 líneas	 deberás	 de	 incluir	 la	 sentencia	 “print(f.readline())”
tantas	veces	como	líneas	tenga	tu	fichero.	El	código	fuente	es	el	siguiente:
	
f	=	open("prueba.txt","r")
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	cuarto	ejercicio	de	la	fase	consiste	en	la	lectura	de	todas	las	líneas	del	fichero
de	texto	con	el	comando	readlines,	que	devuelve	todo	el	contenido	del	fichero	en
una	lista	de	elementos	donde	cada	elemento	es	una	línea	del	fichero.	El	ejercicio
mostrará	 por	 pantalla	 todas	 las	 líneas	 leídas.	 En	 el	 ejercicio	 hemos	 mostrado
únicamente	la	lectura	de	las	cuatro	primeras	líneas,	en	caso	de	que	tu	fichero
tenga	más	líneas	deberás	de	incluir	la	sentencia	“print(lineas[X])”	tantas	veces
como	 líneas	 tenga	 tu	 fichero	 e	 indicando	 en	 la	 X	 el	 número	 de	 la	 línea	 que
quieres	mostrar.	El	código	fuente	es	el	siguiente:
	
f	=	open("prueba.txt","r")
lineas	=	f.readlines()
f.close()
print(lineas[0])
print(lineas[1])
print(lineas[2])
print(lineas[3])
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	quinto	ejercicio	de	la	fase	consiste	en	realizar	lo	mismo	que	has	realizado	en
el	 ejercicio	 número	 cuatro,	 pero,	 de	 otra	 forma.	 Una	 vez	 abierto	 el	 fichero,
mediante	la	instrucción	list	vas	a	obtener	una	lista	donde	cada	elemento	es	una
línea	 del	 fichero	 de	 texto	 y	 posteriormente,	 utilizando	 un	 bucle	 for	 se	 van	 a
mostrar	los	elementos	de	la	lista.	El	código	fuente	es	el	siguiente:
	
f	=	open("prueba.txt","r")
lineas	=	list(f)
f.close()
for	item	in	lineas:
				print(item)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
FASE	2:	Escritura	en	ficheros	de	texto
	
La	 segunda	 fase	 del	 objetivo	 consiste	 en	 el	 aprendizaje	 y	 uso	 de	 todos	 los
comandos	necesarios	para	realizar	escrituras	en	ficheros	de	texto.
	
El	primer	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	la	apertura	de	ficheros
en	modo	“a”,	es	decir,	apertura	para	escritura	al	final	del	fichero.	En	el	ejercicio
se	va	a	añadir	una	línea	nueva	a	un	fichero	ya	existente	(el	que	has	utilizado	en
la	fase	1	del	objetivo),	para	comprobar	que	se	añade	se	muestra	el	fichero	de
texto	antes	y	después	de	la	inserción	de	la	nueva	línea.	El	código	fuente	es	el
siguiente:
	
print("###	Fichero	original	###")
flectura	=	open("prueba.txt","r")
texto	=	flectura.read()
flectura.close()
print(texto)
print("###	Insertando	linea...	###n")
fescritura	=	open("prueba.txt","a")
fescritura.write("info@timeofsoftware.comn")
fescritura.close()
print("###	Fichero	modificado	###")
flectura	=	open("prueba.txt","r")
texto	=	flectura.read()
flectura.close()
print(texto)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 consiste	 en	 el	 aprendizaje	 de	 crear	 ficheros
mediante	el	modo	de	apertura	“x”.	En	el	ejercicio	se	va	a	crear	un	fichero	y	se	va
a	escribir	información	en	él,	para	posteriormente	mostrar	el	contenido	del	fichero
por	pantalla.	El	código	fuente	es	el	siguiente:
	
fcrear	=	open("pruebacreacion.txt","x")
fcrear.write("Time	of	Softwaren")
fcrear.write("Fichero	creado	8-2-2n")
fcrear.close()
	
print("###	Fichero	creado	###")
	
flectura	=	open("pruebacreacion.txt","r")
texto	=	flectura.read()
flectura.close()
print(texto)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
Tal	y	como	te	comentamos	en	la	parte	teórica,	el	modo	de	apertura	“x”	devuelve
error	en	el	caso	de	que	el	fichero	exista.	La	siguiente	imagen	muestra	el	error
que	aparecería	si	volvieras	a	ejecutar	el	programa.
	
	
El	tercer	ejercicio	de	la	fase	consiste	en	el	aprendizaje	de	escribir	en	ficheros	de
texto	 eliminando	 el	 contenido	 que	 tenían	 previamente,	 es	 decir,	 truncándolos.
Ésto	se	hace	con	el	modo	de	apertura	“w”.	En	el	ejercicio	se	va	a	escribir	en	un
fichero	de	texto	ya	existente	que	se	truncará	utilizando	el	modo	de	apertura	“w”,
posteriormente	 el	 contenido	 se	 muestra	 por	 pantalla.	 El	 fichero	 que	 utiliza	 el
ejercicio	es	el	del	ejercicio	anterior.	El	código	fuente	es	el	siguiente:
	
fcrear	=	open("pruebacreacion.txt","w")
fcrear.write("Fichero	creado	desde	ceron")
fcrear.write("Time	of	Softwaren")
fcrear.write("Fichero	creado	8-2-3n")
fcrear.close()
	
print("###	Fichero	creado	###")
flectura	=	open("pruebacreacion.txt","r")
texto	=	flectura.read()
flectura.close()
print(texto)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	octavo	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Creación	de	ficheros.
Lectura	de	ficheros.
Escritura	de	información	en	ficheros.
OBJETIVO	9	–	CONTROL	DE	EXCEPCIONES
	
En	este	noveno	objetivo	vas	a	aprender	a	controlar	excepciones	y	errores	que
pueden	darse	en	los	programas	que	escribes.
	
El	objetivo	está	compuesto	únicamente	por	una	fase	en	la	que	aprenderás	cómo
se	controlan	excepciones	en	Python.
Conceptos	teóricos
	
En	 este	 apartado	 vamos	 a	 explicarte	 los	 conceptos	 teóricos	 que	 tienes	 que
conocer	para	trabajar	con	excepciones.
	
Excepciones
	
Una	excepción	es	un	error	que	ocurre	mientras	se	ejecuta	el	programa	y	que	no
ocurre	frecuentemente.
	
El	código	fuente	nos	permite	realizar	las	operaciones	que	se	llaman	“controlar	la
excepción”,	que	no	son	otra	cosa	que	guardar	el	estado	en	el	que	se	encontraba	el
programa	en	el	momento	justo	del	error	e	interrumpir	el	programa	para	ejecutar
un	código	fuente	concreto.	En	muchos	casos,	dependiendo	del	error	ocurrido,	el
control	de	la	excepción	implicará	que	el	programa	siga	ejecutándose	después	de
controlarla,	aunque	en	muchos	casos	ésto	no	será	posible.
	
El	 proceso	 de	 controlar	 excepciones	 es	 similar	 en	 todos	 los	 lenguajes	 de
programación,	 en	 primer	 lugar,	 es	 necesario	 incluir	 el	 el	 código	 fuente	 de
ejecución	normal	dentro	de	un	bloque	con	la	sentencia	try,	posteriormente,	se
crea	 un	 bloque	 de	 código	 dentro	 de	 una	 sentencia	 except	 que	 es	 la	 que	 se
ejecutará	en	caso	de	error.	El	bloque	except	permite	especificar	el	tipo	de	error
que	 se	 controla	 con	 el	 bloque	 de	 código,	 es	 por	 ello	 por	 lo	 que	 puedes	 tener
tantos	bloques	except	como	errores	quieras	controlar,	aunque	también	es	posible
controlar	 un	 error	 genérico	 que	 incluya	 a	 todos	 los	 errores.	 En	 el	 control	 de
excepciones	existe	la	posibilidad	de	crear	un	bloque	de	código	que	se	ejecute
siempre	al	final,	independientemente	de	si	ocurre	error	o	no,	dicho	bloque	de
código	se	escribe	como	parte	de	la	sentencia	finally.
	
El	control	de	excepciones	en	Python	tiene	un	aspecto	así:
	
try:
BloqueInstruccionesPrograma
except	TipoError1:
BloqueInstruccionesError1:
except	TipoError2:
BloqueInstruccionesError2
except	TipoErrorN:
BloqueInstruccionesErrorN
finally:
BloqueCodigoFinally
	
Veamos	en	detalle	cada	elemento:
	
try:	 indicador	 de	 comienzo	 del	 bloque	 de	 código	 fuente	 que	 se
controlará.
BloqueInstruccionesPrograma:	 conjunto	 de	 instrucciones	 que
componen	el	programa.
except:	indicador	de	comienzo	de	excepción	controlada.
TipoError:	indicador	del	tipo	de	error	que	se	controla	con	except.	El
parámetro	 es	 opcional,	 si	 no	 se	 especifica	 el	 tipo	 se	 controlará	 la
excepción	de	forma	genérica.
BloqueInstruccionesError:	conjunto	de	instrucciones	que	se	ejecuta	si
se	produce	el	error	indicado	por	TipoError.
finally:	indicador	de	comienzo	del	bloque	de	código	final.	La	sección
es	opcional.
BloqueCodigoFinally:	 conjunto	 de	 instrucciones	 que	 se	 ejecutan	 al
acabar	cualquiera	de	los	bloques	de	código	anteriores.
	
En	Python	existen	diferentes	tipos	de	excepciones	que	pueden	controlarse,	todas
ellas	 derivan	 de	 una	 serie	 de	 excepciones	 base.	 En	 el	 anexo	 al	 final	 del	 libro
podrás	encontrar	los	diferentes	tipos	de	excepciones	que	existen	en	Python.
FASE	1:	Controlando	excepciones
	
La	primera	fase	del	objetivo,	y	única,	consiste	en	el	aprendizaje	de	qué	es	una
excepción,	cómo	se	producen	y	que	formas	existen	de	controlarlas.
	
El	 primer	 ejercicio	 de	 la	 fase	 consiste	 en	 ejecutar	 un	 programa	 compuesto
únicamente	por	una	instrucción	que	lanza	una	excepción,	una	división	por	cero.
El	código	fuente	es	el	siguiente:
	
print(3/0)
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 segundo	 ejercicio	 de	 la	 fase	 consiste	 en	 controlar	 el	 código	 fuente	 del
programa	 anterior	 y	 capturar	 la	 excepción	 que	 lanza	 la	 división	 por	 cero.	 El
objetivo	es	que	no	se	muestre	el	error	de	antes	por	pantalla	y	mostremos	un	error
personalizado.	El	código	fuente	es	el	siguiente:
	
try:
				print(3/0)
except:
				print("ERROR:	Division	por	cero")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	 tercer	 ejercicio	 de	 la	 fase	 consiste	 en	 incluir	 un	 bloque	 de	 código	 final	 e
indicar	que	el	programa	ha	terminado.	El	código	fuente	es	el	siguiente:
	
print("¡Iniciando	programa!")
try:
				print(3/0)
except:
				print("ERROR:	Division	erronea")
finally:
print("¡Programa	acabado!")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	cuarto	ejercicio	de	la	fase	consiste	en	comprobar	que	el	bloque	de	código	que
hemos	 incluido	 dentro	 del	 bloque	 final	 se	 ejecuta	 también	 si	 el	 programa	 no
lanza	ninguna	excepción.	Para	ello	en	lugar	de	dividir	por	cero	vamos	a	dividir
por	uno.	El	código	fuente	es	el	siguiente:
	
print("¡Iniciando	programa!")
try:
				print(3/1)
except:
				print("ERROR:	Division	erronea")
finally:
				print("¡Programa	acabado!")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	quinto	ejercicio	de	la	fase	consiste	en	añadir	un	bloque	de	instrucciones	else
que	se	ejecuta	cuando	no	se	lanzan	excepciones	y	no	se	desea	incluir	ese	bloque
de	código	dentro	del	bloque	final.	El	código	fuente	es	el	siguiente:
	
print("¡Iniciando	programa!")
try:
				print(3/1)
except:
				print("ERROR:	Division	erronea")
else:
				print("¡No	se	han	producido	errores!")
finally:
				print("¡Programa	acabado!")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
El	 sexto	 ejercicio	 de	 la	 fase	 consiste	 en	 comprobar	 que	 el	 bloque	 de
instrucciones	que	hemos	introducido	anteriormente	dentro	de	else	no	se	ejecuta
si	se	produce	alguna	excepción.	Para	ello,	volvemos	a	dividir	por	cero	en	lugar
de	por	uno.	El	código	fuente	es	el	siguiente:
	
print("¡Iniciando	programa!")
try:
				print(3/0)
except:
				print("ERROR:	Division	erronea")
else:
				print("¡No	se	han	producido	errores!")
finally:
				print("¡Programa	acabado!")
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
	
	
El	séptimo	ejercicio	de	la	fase	consiste	en	aprender	cómo	se	especifica	el	tipo	de
excepción	 que	 se	 quiere	 controlar.	 Vamos	 a	 añadir	 un	 control	 para	 el	 tipo	 de
excepción	 ZeroDivisionError	 y	 vamos	 a	 mantener	 la	 captura	 de	 excepciones
genérica,	por	si	pudiera	producirse	otra	excepción	que	no	fuera	la	específica,	de
esta	forma,	capturaríamos	de	forma	específica	la	excepción	de	la	división	y	de
forma	genérica	el	resto	de	las	excepciones.	El	código	fuente	es	el	siguiente:
	
print("¡Iniciando	programa!")
try:
				print(3/0)
except	ZeroDivisionError:
				print("ERROR:	Division	por	cero")
except:
				print("ERROR:	General")
else:
				print("¡No	se	han	producido	errores!")
finally:
				print("¡Programa	acabado!")
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
Ahora	eres	capaz	de…
	
En	este	noveno	objetivo	has	aprendido	los	siguientes	conocimientos:
	
Control	del	código	fuente	mediante	excepciones.
PROYECTO	4:	CALCULADORA	EVOLUTIVA	2
	
Ha	llegado	el	momento	de	realizar	el	cuarto	proyecto	del	libro,	en	el	que	vas	a
afianzar	los	conocimientos	adquiridos	en	el	manejo	de	instrucciones	del	objetivo
anterior.
	
El	proyecto	consiste	en	evolucionar	el	proyecto	número	dos	incluyendo	control
de	excepciones	y	reorganizando	el	código	fuente	añadiendo	una	función	única
para	realizar	la	lectura	de	los	números,	también	con	control	de	excepciones.
	
El	objetivo	del	proyecto,	además	de	afianzar	el	uso	del	control	de	excepciones,
consiste	en	familiarizarte	con	un	concepto	que	se	utiliza	mucho	en	desarrollo	de
software,	 que	 es	 la	 refactorización	 del	 código	 fuente.	 La	 refactorización	 del
código	 fuente	 consiste	 en	 la	 modificación	 del	 código	 fuente	 sin	 alterar	 su
comportamiento	 con	 fines	 de	 limpieza	 de	 código	 fuente,	 hacer	 el	 código	 más
legible,	mejorar	el	rendimiento	de	éste	y	su	mantenimiento.
Código	fuente	y	ejecución
	
El	 código	 fuente	 del	 proyecto	 número	 dos	 vas	 a	 modificarlo	 realizando	 los
siguientes	cambios:
	
Incluir	control	de	excepciones	en	la	función	división	para	controlar
que	 si	 el	 usuario	 introduce	 un	 cero	 como	 divisor	 el	 programa	 no
devuelva	un	error.
Creación	de	una	nueva	función	que	realice	la	lectura	de	los	números
introducidos	 por	 los	 usuarios.	 La	 función	 tendrá	 las	 siguientes
características:
Recibirá	como	parámetro	de	entrada	el	texto	que	tiene	que
mostrar	para	pedir	al	usuario	que	introduzca	el	número.
Controlará	las	excepciones	ante	la	posible	introducción	por
parte	 del	 usuario	 de	 valores	 que	 no	 sean	 números.	 La
función	terminará	una	vez	el	usuario	haya	introducido	un
número,	es	decir,	continuará	pidiendo	al	usuario	el	número
hasta	que	lo	introduzca	correctamente.
Devolverá	el	resultado	de	la	lectura	del	número.
Modificar	todas	las	funciones	en	las	que	se	realizaba	la	lectura	del
número	de	forma	independiente	para	realizar	la	lectura	del	número
mediante	la	función	nueva	creada	con	dicho	fin.
	
El	código	fuente	resultante	es	el	siguiente:
	
def	LeerNumero(texto):
				leido	=	False
				while	not	leido:
								try:
												numero	=	int(input(texto))
								except	ValueError:
												print("Error:	Tienes	que	introducir	un	numero.")
								else:
												leido	=	True
				return	numero
	
def	Sumar():
				sum1	=	LeerNumero("Sumando	uno:")
				sum2	=	LeerNumero("Sumando	dos:")
				print	("La	Suma	es:",	sum1+sum2)
	
def	Restar():
				minuendo	=	LeerNumero("Minuendo:")
				sustraendo	=	LeerNumero("Sustraendo:")
print	("La	Resta	es:",	minuendo-sustraendo)
	
def	Multiplicar():
				multiplicando	=	LeerNumero("Multiplicando:")
				multiplicador	=	LeerNumero("Multiplicador:")
				print	("La	Multiplicacion	es:",	multiplicando*multiplicador)
	
def	Dividir():
				dividendo	=	LeerNumero("Dividendo:")
				divisor	=	LeerNumero("Divisor:")
				try:
								resultado	=	dividendo/divisor
				except	ZeroDivisionError:
								print("Error:	No	puedes	dividir	por	cero.")
				else:
								print	("La	Division	es:",	resultado)
	
def	MostrarMenu():
				print	("""************
Calculadora
************
Menu
1)	Suma
2)	Resta
3)	Multiplicacion
4)	Division
5)	Mostrar	menu
6)	Salir""")
	
def	Calculadora():
				fin	=	False
				MostrarMenu()
				while	not(fin):
								opc	=	LeerNumero("Opcion:")
								if	(opc==1):
												Sumar()
								elif(opc==2):
												Restar()
								elif(opc==3):
												Multiplicar()
								elif(opc==4):
												Dividir()
								elif(opc==5):
												MostrarMenu()
								elif(opc==6):
												fin	=	1
	
Calculadora()
	
La	ejecución	del	código	fuente	anterior	tendrá	la	siguiente	salida:
1. aprende python en un fin de semana sqminingsociety
Ahora	eres	capaz	de…
	
En	este	cuarto	proyecto	has	aprendido	los	siguientes	conocimientos:
	
Controlar	excepciones	en	programas	que	ya	tenías	desarrollados.
Refactorizar	código	fuente.
PROYECTO	FINAL	–	AGENDA
	
Ha	llegado	el	momento	de	realizar	el	proyecto	final	del	libro,	en	el	que	vas	a
utilizar	todos	los	conocimientos	que	has	aprendido	durante	el	libro.
Código	fuente	y	ejecución
	
En	este	apartado	vamos	a	explicarte	el	código	fuente	del	proyecto	con	cada	uno
de	sus	componentes	y	realizaremos	una	ejecución	de	éste	para	que	veas	cómo
funciona.
	
El	proyecto	Agenda	estará	compuesto	por	las	siguientes	clases:
	
Dirección:	contendrá	toda	la	información	referente	a	la	dirección.
Persona:	contendrá	toda	la	información	referente	a	la	persona.
Teléfono:	contendrá	toda	la	información	referente	a	los	teléfonos.
Contacto:	 hereda	 de	 las	 tres	 clases	 anteriores	 para	 conformar	 una
clase	que	contendrá	toda	la	información	de	un	contacto	junta.
Agenda:	contendrá	toda	la	información	de	todos	los	contactos.
	
Veamos	las	clases	en	detalle:
	
Clase	Dirección
	
La	clase	dirección	estará	compuesta	por	los	siguientes	atributos:
	
Calle:	contendrá	la	información	referente	a	la	calle	de	la	dirección.
Piso:	contendrá	la	información	referente	al	piso	de	la	dirección.
Ciudad:	 contendrá	 la	 información	 referente	 a	 la	 ciudad	 de	 la
dirección.
CodigoPostal:	contendrá	la	información	referente	al	código	postal	de
la	dirección.
	
La	clase	dirección	estará	compuesta	por	los	siguientes	métodos:
	
GetCalle:	devolverá	la	información	del	atributo	Calle.
GetPiso:	devolverá	la	información	del	atributo	Piso.
GetCiudad:	devolverá	la	información	del	atributo	Ciudad.
GetCodigoPostal:	 devolverá	 la	 información	 del	 atributo
CodigoPostal.
SetCalle:	modificará	la	información	del	atributo	Calle.
SetPiso:	modificará	la	información	del	atributo	Piso.
SetCiudad:	modificará	la	información	del	atributo	Ciudad.
SetCodigoPostal:	 modificará	 la	 información	 del	 atributo
CodigoPostal.
	
Clase	Persona
	
La	clase	persona	estará	compuesta	por	los	siguientes	atributos:
	
Nombre:	contendrá	la	información	referente	al	nombre	de	la	persona.
Apellidos:	 contendrá	 la	 información	 referente	 a	 los	 apellidos	 de	 la
persona.
FechaNacimiento:	contendrá	la	información	 referente	 a	la	fecha	de
nacimiento	de	la	persona.
	
La	clase	persona	estará	compuesta	por	los	siguientes	métodos:
	
GetNombre:	devolverá	la	información	del	atributo	Nombre.
GetApellidos:	devolverá	la	información	del	atributo	Apellidos.
GetFechaNacimiento:	 devolverá	 la	 información	 del	 atributo
FechaNacimiento.
SetNombre:	modificará	la	información	del	atributo	Nombre.
SetApellidos:	modificará	la	información	del	atributo	Apellidos.
SetFechaNacimiento:	 modificará	 la	 información	 del	 atributo
FechaNacimiento.
	
Clase	Teléfono
	
La	clase	teléfono	estará	compuesta	por	los	siguientes	atributos:
	
TelefonoFijo:	contendrá	la	información	referente	al	teléfono	fijo.
TelefonoMovil:	contendrá	la	información	referente	al	teléfono	móvil.
TelefonoTrabajo:	contendrá	la	información	referente	al	teléfono	del
trabajo.
	
La	clase	teléfono	estará	compuesta	por	los	siguientes	métodos:
	
GetTelefonoFijo:	devolverá	la	información	del	atributo	TelefonoFijo.
GetTelefonoMovil:	 devolverá	 la	 información	 del	 atributo
TelefonoMovil.
GetTelefonoTrabajo:	 devolverá	 la	 información	 del	 atributo
TelefonoTrabajo.
SetTelefonoFijo:	 modificará	 la	 información	 del	 atributo
TelefonoFijo.
SetTelefonoMovil:	 modificará	 la	 información	 del	 atributo
TelefonoMovil.
SetTelefonoTrabajo:	 modificará	 la	 información	 del	 atributo
TelefonoTrabajo.
	
Clase	Contacto
	
La	clase	contacto	estará	compuesta	por	los	siguientes	atributos:
	
Email:	contendrá	la	información	referente	al	email.
	
La	clase	contacto	estará	compuesta	por	los	siguientes	métodos:
	
GetEmail:	devolverá	la	información	del	atributo	Email.
SetEmail:	modificará	la	información	del	atributo	Email.
MostrarContacto:	mostrará	la	información	completa	del	contacto.
	
La	clase	contacto	será	una	clase	que	herede	de	todas	las	anteriores,	por	lo	que,
además	de	los	atributos	y	métodos	propios,	tendrá	los	de	las	clases	de	las	que
hereda.
	
Clase	Agenda
	
La	clase	agenda	estará	compuesta	por	los	siguientes	atributos:
	
ListaContactos:	contendrá	la	información	de	todos	los	contactos	que
están	en	la	agenda.
Path:	 contendrá	 la	 información	 de	 la	 ruta	 física	 del	 fichero	 en	 el
ordenador	en	donde	están	almacenados	los	contactos.
	
La	clase	agenda	estará	compuesta	por	los	siguientes	métodos:
	
CargarContactos:	 cargará	 en	 la	 aplicación	 la	 lista	 de	 contactos
leyéndola	desde	el	fichero.
CrearNuevoContacto:	almacenará	en	la	lista	de	contactos	un	nuevo
contacto.
GuardarContactos:	 grabará	 en	 el	 fichero	 la	 lista	 de	 contactos	 que
tiene	almacenada	el	atributo	ListaContactos.
MostrarAgenda:	 mostrará	 por	 pantalla	 el	 contenido	 del	 atributo
ListaContactos.
BuscarContactoPorNombre:	 realizará	 una	 búsqueda	 de	 un	 contacto
en	el	atributo	ListaContactos	por	su	nombre	y	lo	devolverá.
BuscarContactoPorTelefono:	realizará	una	búsqueda	de	un	contacto
en	el	atributo	ListaContactos	por	su	teléfono	y	lo	devolverá.
BorrarContactoPorNombre:	 borrará	 un	 contacto	 del	 atributo
ListaContacto	utilizando	el	nombre	para	buscarlo.
BorrarContactoPorTelefono:	 borrará	 un	 contacto	 del	 atributo
ListaContacto	utilizando	el	teléfono	para	buscarlo.
	
El	constructor	de	la	clase	recibe	como	parámetro	la	ruta	en	la	que	se	encuentra	el
fichero	que	se	utiliza	para	almacenar	los	contactos.
	
Funciones
	
Ahora	veamos	las	diferentes	funciones	que	contendrá	el	proyecto:
	
ObtenerOpcion:	 leerá	 la	 opción	 elegida	 del	 menú	 por	 parte	 del
usuario.
MostrarMenu:	mostrará	el	menú	de	opciones	por	pantalla.
BuscarContacto:	 realizará	 el	 proceso	 completo	 de	 búsqueda	 a
excepción	de	la	propia	búsqueda	en	la	lista,	que	la	realizará	la	propia
clase	Agenda	con	uno	de	los	métodos	de	búsqueda.
CrearContacto:	 realizará	 el	 proceso	 completo	 de	 creación	 de	 un
contacto	a	excepción	del	propio	almacenamiento	en	la	agenda	que	lo
realizará	la	propia	clase	Agenda	con	el	método	de	crear.
BorrarContacto:	 realizará	 el	 proceso	 de	 borrado	 de	 un	 contacto	 a
excepción	 del	 propio	 borrado	 del	 contacto	 de	 la	 agenda	 que	 lo
realizará	la	propia	clase	Agenda	con	el	método	de	borrar.
Main:	 función	 principal	 de	 la	 aplicación	 que	 contiene	 el	 flujo	 del
programa.
El	código	fuente	sería	el	siguiente:
	
class	Direccion:
				def	__init__(self):
								self.__Calle	=	""
								self.__Piso	=	""
								self.__Ciudad	=	""
								self.__CodigoPostal	=	""
				def	GetCalle(self):
								return	self.__Calle
				def	GetPiso(self):
								return	self.__Piso
				def	GetCiudad(self):
								return	self.__Ciudad
				def	GetCodigoPostal(self):
								return	self.__CodigoPostal
				def	SetCalle(self,	calle):
								self.__Calle	=	calle
				def	SetPiso(self,	piso):
								self.__Piso	=	piso
				def	SetCiudad(self,	ciudad):
								self.__Ciudad	=	ciudad
				def	SetCodigoPostal(self,	codigopostal):
								self.__CodigoPostal	=	codigopostal
	
class	Persona:
				def	__init__(self):
								self.__Nombre	=	""
								self.__Apellidos	=	""
								self.__FechaNacimiento	=	""
				def	GetNombre(self):
								return	self.__Nombre
				def	GetApellidos(self):
								return	self.__Apellidos
				def	GetFechaNacimiento(self):
								return	self.__FechaNacimiento
				def	SetNombre(self,	nombre):
								self.__Nombre	=	nombre
				def	SetApellidos(self,	apellidos):
								self.__Apellidos	=	apellidos
				def	SetFechaNacimiento(self,	fechanacimiento):
								self.__FechaNacimiento	=	fechanacimiento
	
class	Telefono:
				def	__init__(self):
								self.__TelefonoMovil	=	""
								self.__TelefonoFijo	=	""
								self.__TelefonoTrabajo	=	""
				def	GetTelefonoMovil(self):
								return	self.__TelefonoMovil
				def	GetTelefonoFijo(self):
								return	self.__TelefonoFijo
				def	GetTelefonoTrabajo(self):
								return	self.__TelefonoTrabajo
				def	SetTelefonoMovil(self,	movil):
								self.__TelefonoMovil	=	movil
				def	SetTelefonoFijo(self,	fijo):
self.__TelefonoFijo	=	fijo
				def	SetTelefonoTrabajo(self,	trabajo):
								self.__TelefonoTrabajo	=	trabajo
	
class	Contacto(Persona,	Direccion,	Telefono):
				def	__init__(self):
								self.__Email	=	""
				def	GetEmail(self):
								return	self.__Email
				def	SetEmail(self,	email):
								self.__Email	=	email
				def	MostrarContacto(self):
								print("-----	Contacto	-----")
								print("Nombre:	",	self.GetNombre())
								print("Apellidos:	",	self.GetApellidos())
								print("Fecha	de	nacimiento:	",	self.GetFechaNacimiento())
								print("Telefono	movil:	",	self.GetTelefonoMovil())
								print("Telefono	fijo:	",	self.GetTelefonoFijo())
								print("Telefono	trabajo:	",	self.GetTelefonoTrabajo())
								print("Calle:	",	self.GetCalle())
								print("Piso:	",	self.GetPiso())
								print("Ciudad:	",	self.GetCiudad())
								print("Codigo	postal:	",	self.GetCodigoPostal())
								print("Email:	",	self.__Email)
								print("--------------------")
	
class	Agenda:
				def	__init__(self,	path):
								self.__ListaContactos	=	[]
								self.__Path	=	path
				def	CargarContactos(self):
								try:
												fichero	=	open(self.__Path,"r")
								except:
												print("ERROR:	No	existe	el	fichero	de	la	agenda")
								else:
												contactos	=	fichero.readlines()
												fichero.close()
												if(len(contactos)>0):
																for	contacto	in	contactos:
																				datos	=	contacto.split("#")
																				if(len(datos)==11):
																								nuevocontacto	=	Contacto()
																								nuevocontacto.SetNombre(datos[0])
																								nuevocontacto.SetApellidos(datos[1])
																								nuevocontacto.SetFechaNacimiento(datos[2])
																								nuevocontacto.SetTelefonoMovil(datos[3])
																								nuevocontacto.SetTelefonoFijo(datos[4])
																								nuevocontacto.SetTelefonoTrabajo(datos[5])
																								nuevocontacto.SetCalle(datos[6])
																								nuevocontacto.SetPiso(datos[7])
																								nuevocontacto.SetCiudad(datos[8])
																								nuevocontacto.SetCodigoPostal(datos[9])
																								nuevocontacto.SetEmail(datos[10])
																								self.__ListaContactos	=	self.__ListaContactos	+	[nuevocontacto]
																print("INFO:	Se	han	cargado	un	total	de	",len(self.__ListaContactos),"	contactos")
				def	CrearNuevoContacto(self,nuevocontacto):
								self.__ListaContactos	=	self.__ListaContactos	+	[nuevocontacto]
				def	GuardarContactos(self):
								try:
fichero	=	open(self.__Path,"w")
								except:
												print("ERROR:	No	se	puede	guardar")
								else:
												for	contacto	in	self.__ListaContactos:
																texto	=	contacto.GetNombre()	+	"#"
																texto	=	texto	+	contacto.GetApellidos()	+	"#"
																texto	=	texto	+	contacto.GetFechaNacimiento()	+	"#"
																texto	=	texto	+	contacto.GetTelefonoMovil()	+	"#"
																texto	=	texto	+	contacto.GetTelefonoFijo()	+	"#"
																texto	=	texto	+	contacto.GetTelefonoTrabajo()	+	"#"
																texto	=	texto	+	contacto.GetCalle()	+	"#"
																texto	=	texto	+	contacto.GetPiso()	+	"#"
																texto	=	texto	+	contacto.GetCiudad()	+	"#"
																texto	=	texto	+	contacto.GetCodigoPostal()	+	"#"
																texto	=	texto	+	contacto.GetEmail()	+	"n"
																fichero.write(texto)
												fichero.close()
				def	MostrarAgenda(self):
								print("##########	AGENDA	##########")
								print("Numero	de	contactos:	",len(self.__ListaContactos))
								for	contacto	in	self.__ListaContactos:
												contacto.MostrarContacto()
								print("############################")
				def	BuscarContactoPorNombre(self,	nombre):
								listaencontrados	=	[]
								for	contacto	in	self.__ListaContactos:
												if	contacto.GetNombre()	==	nombre:
																listaencontrados	=	listaencontrados	+	[contacto]
								return	listaencontrados
				def	BuscarContactoPorTelefono(self,	telefono):
								listaencontrados	=	[]
								for	contacto	in	self.__ListaContactos:
												if	(contacto.GetTelefonoMovil()	==	telefono
																or	contacto.GetTelefonoFijo()	==	telefono
																or	contacto.GetTelefonoTrabajo()	==	telefono):
																listaencontrados	=	listaencontrados	+	[contacto]
								return	listaencontrados
				def	BorrarContactoPorNombre(self,	nombre):
								listafinal	=	[]
								for	contacto	in	self.__ListaContactos:
												if	contacto.GetNombre()	!=	nombre:
																listafinal	=	listafinal	+	[contacto]
								print("Info:	",	len(self.__ListaContactos)	-	len(listafinal),"	contactos	han	sido	borrados")
								self.__ListaContactos	=	listafinal
				def	BorrarContactoPorTelefono(self,	telefono):
								listafinal	=	[]
								for	contacto	in	self.__ListaContactos:
												if	(contacto.GetTelefonoMovil()	==	telefono
																or	contacto.GetTelefonoFijo()	==	telefono
																or	contacto.GetTelefonoTrabajo()	==	telefono):
																listafinal	=	listafinal	+	[contacto]
								print("Info:	",	len(self.__ListaContactos)	-	len(listafinal),"	contactos	han	sido	borrados")
								self.__ListaContactos	=	listafinal
	
def	ObtenerOpcion(texto):
				leido	=	False
				while	not	leido:
								try:
												numero	=	int(input(texto))
except	ValueError:
												print("Error:	Tienes	que	introducir	un	numero.")
								else:
												leido	=	True
				return	numero
	
def	MostrarMenu():
				print	("""Menu
1)	Mostrar	contactos
2)	Buscar	contactos
3)	Crear	contacto	nuevo
4)	Borrar	contacto
5)	Guardar	contactos
6)	Salir""")
	
def	BuscarContactos(agenda):
				print	("""Buscar	contactos:
1)	Nombre
2)	Telefono
3)	Volver""")
				finbuscar	=	False
				while	not	finbuscar:
								opcbuscar	=	ObtenerOpcion("Opcion:")
								if	opcbuscar	==	1:
												encontrados	=	agenda.BuscarContactoPorNombre(input((">Introduce	el	nombre	a	buscar:	")))
												if	len(encontrados)	>	0:
																print("##########	CONTACTOS	ENCONTRADOS	##########")
																for	item	in	encontrados:
																				item.MostrarContacto()
																print("###########################################")
												else:
																print("INFO:	No	se	han	encontrado	contactos")
												finbuscar	=	True
								elif	opcbuscar	==	2:
												encontrados	=	agenda.BuscarContactoPorTelefono(input((">Introduce	el	telefono	a	buscar:	")))
												if	len(encontrados)	>	0:
																print("##########	CONTACTOS	ENCONTRADOS	##########")
																for	item	in	encontrados:
																				item.MostrarContacto()
																print("###########################################")
												else:
																print("INFO:	No	se	han	encontrado	contactos")
												finbuscar	=	True
								elif	opcbuscar	==	3:
												finbuscar	=	True
	
def	ProcesoCrearContacto(agenda):
				nuevocontacto	=	Contacto()
				nuevocontacto.SetNombre(input((">Introduce	el	nombre	del	contacto:	")))
				nuevocontacto.SetApellidos(input((">Introduce	los	apellidos	del	contacto:	")))
				nuevocontacto.SetFechaNacimiento(input((">Introduce	la	fecha	de	nacimiento	del	contacto:	")))
				nuevocontacto.SetTelefonoMovil(input((">Introduce	el	telefono	movil	del	contacto:	")))
				nuevocontacto.SetTelefonoFijo(input((">Introduce	el	telefono	fijo	del	contacto:	")))
				nuevocontacto.SetTelefonoTrabajo(input((">Introduce	el	telefono	del	trabajo	del	contacto:	")))
				nuevocontacto.SetCalle(input((">Introduce	la	calle	de	la	direccion	del	contacto:	")))
				nuevocontacto.SetPiso(input((">Introduce	el	piso	de	la	direccion	del	contacto:	")))
				nuevocontacto.SetCiudad(input((">Introduce	la	ciudad	del	contacto:	")))
				nuevocontacto.SetCodigoPostal(input((">Introduce	el	codigo	postal	del	contacto:	")))
				nuevocontacto.SetEmail(input((">Introduce	el	email	del	contacto:	")))
				agenda.CrearNuevoContacto(nuevocontacto)
def	BorrarContacto(agenda):
				print	("""Buscar	contactos	a	borrar	por:
1)	Nombre
2)	Telefono
3)	Volver""")
				finbuscar	=	False
				while	not	finbuscar:
								opcbuscar	=	ObtenerOpcion("Opcion:")
								if	opcbuscar	==	1:
												agenda.BorrarContactoPorNombre(input((">Introduce	el	nombre	a	borrar:	")))
												finbuscar	=	True
								elif	opcbuscar	==	2:
												agenda.BorrarContactoPorTelefono(input((">Introduce	el	telefono	a	borrar:	")))
												finbuscar	=	True
								elif	opcbuscar	==	3:
												finbuscar	=	True
	
def	Main():
				agenda	=	Agenda("agenda.txt")
				agenda.CargarContactos()
				fin	=	False
				while	not(fin):
								MostrarMenu()
								opc	=	ObtenerOpcion("Opcion:")
								if	(opc==1):
												agenda.MostrarAgenda()
								elif(opc==2):
												BuscarContactos(agenda)
								elif(opc==3):
												ProcesoCrearContacto(agenda)
								elif(opc==4):
												BorrarContacto(agenda)
								elif(opc==5):
												agenda.GuardarContactos()
								elif(opc==6):
												fin	=	1
	
Main()
	
Antes	de	ejecutar	el	código	fuente	debes	de	crear	el	fichero	“agenda.txt”	vacío	y
modificar	la	primera	línea	de	la	función	Main	en	la	que	se	indica	por	parámetro
la	ruta	del	fichero	a	la	clase	Agenda.
	
A	continuación,	te	mostramos	un	ejemplo	de	creación	de	un	contacto	y	mostrar
los	contactos	que	hay	en	la	agenda,	opciones	3	y	1	del	menú.
La	siguiente	captura	muestra	la	opción	de	buscar	contacto	por	nombre,	opción	2
del	menú.
La	siguiente	captura	muestra	la	opción	de	borrar	contacto	por	nombre,	opción	4
del	menú.
Ahora	eres	capaz	de…
	
En	este	proyecto	final	has	aprendido	los	siguientes	conocimientos:
	
Realizar	 un	 programa	 completo	 con	 todos	 los	 conocimientos
adquiridos	en	el	libro.
¡CONSEGUIDO!
	
¡Enhorabuena!	¡Has	llegado	al	final	del	aprendizaje!	Para	que	seas	consciente	de
todo	lo	que	has	aprendido	en	un	fin	de	semana	te	hemos	preparado	un	resumen
con	los	hitos	que	has	alcanzado:
	
Mostrar	información	por	pantalla	en	una	línea	y	en	múltiples	líneas.
Lectura	 de	 información	 introducida	 por	 los	 usuarios	 a	 través	 del
teclado.
Utilización	de	variables.
Tipos	de	datos	existentes	en	Python.
Conversión	de	datos.
Utilización	de	números	enteros	y	reales.
Utilización	de	operadores	matemáticos.
Utilización	de	operadores	relacionales.
Utilización	de	operadores	lógicos.
Utilización	de	booleanos.
Utilización	de	cadenas	de	texto	y	su	manipulación.
Utilización	de	listas,	tuplas	y	diccionarios.
Utilización	de	todas	las	variantes	de	las	bifurcaciones	if.
Utilización	de	bucles	for	y	while.
Creación	y	utilización	de	funciones.
Diferencia	entre	clase	y	objeto	o	instancia.
Creación	de	clases.
Utilización	de	clases	en	tus	programas.
Acceso	a	atributos	y	métodos	públicos	y	privados	de	clase.
Utilización	de	la	composición	de	clases.
Utilización	de	herencia	simple	y	múltiple	de	clases.
Creación	de	ficheros.
Lectura	de	ficheros.
Escritura	de	información	en	ficheros.
Control	del	código	fuente	mediante	excepciones.
Realizar	 un	 programa	 completo	 con	 todos	 los	 conocimientos
adquiridos	en	el	libro.
ANEXOS
	
En	el	apartado	de	Anexos	vamos	a	explicarte	conceptos	teóricos	que	amplían	los
conocimientos	adquiridos	en	todo	el	libro.
Palabras	reservadas
	
Algunas	de	las	palabras	reservadas	que	vamos	a	ver	este	anexo	no	las	hemos
tratado	en	el	libro	ya	que	se	encuentran	fueran	del	ámbito	de	éste.	El	objetivo	del
anexo	es	ofrecerte	el	listado	de	palabras	reservadas	por	si	necesitases	consultarlo
en	un	futuro.
	
La	 lista	 de	 palabras	 reservadas	 de	 Python	 que	 no	 se	 pueden	 utilizar	 como
nombres	de	variables,	funciones,	clases,	atributos	y	métodos	son	las	siguientes:
	
and:	representación	lógica	de	Y.
as:	 tiene	 dos	 funciones,	 la	 primera	 de	 ellas	 es	 para	 asignar	 una
excepción	a	un	determinado	objeto	y	la	segunda	es	para	renombrar
un	módulo	importado	al	código.
assert:	utilizada	en	la	depuración	de	código	para	lanzar	errores	si	se
cumplen	ciertas	condiciones.
break:	sirve	para	finalizar	un	bucle.
class:	utilizada	para	definir	una	clase.
continue:	 suspende	 la	 iteración	 de	 un	 bucle	 y	 salta	 a	 la	 siguiente
iteración	de	éste.
def:	utilizada	para	definir	funciones.
del:	tiene	dos	funciones,	la	primera	de	ellas	es	eliminar	la	referencia
de	un	objeto	concreto	y	la	segunda	es	para	eliminar	elementos	de	una
lista.
elif:	definición	de	una	bifurcación	alternativa	con	condición.
else:	definición	del	camino	sin	condición	en	una	bifurcación.
except:	 utilizada	 para	 capturar	 excepciones	 ocurridas	 durante	 la
ejecución	del	código	fuente.
False:	utilizada	para	representar	el	valor	booleano	0	/	falso.
finally:	 utilizada	 para	 definir	 un	 bloque	 de	 código	 fuente	 que	 se
ejecutará	al	final	del	procesamiento	de	las	excepciones.
for:	utilizada	para	definir	bucles	for.
from:	 utilizada	 para	 importar	 elementos	 de	 módulos	 externos	 a
nuestro	código.
global:	 utilizada	 para	 modificar	 objetos	 en	 un	 ámbito	 inferior,
creando	un	objeto	nuevo	y	sin	alterar	el	valor	del	objeto	del	ámbito
superior.
if:	definición	de	una	bifurcación	con	condición.
import:	 importa	 un	 módulo	 externo	 a	 nuestro	 código.	 Se	 puede
utilizar	junto	a	from,	pero	en	ese	caso	importará	elementos	en	vez	del
módulo	completo.
in:	 determina	 la	 existencia	 de	 un	 elemento	 en	 una	 lista,	 tupla,
diccionario	o	cualquier	objeto	iterable.
is:	determina	si	dos	objetos	son	iguales.	No	es	lo	mismo	dos	objetos
con	los	mismos	valores	que	dos	objetos	iguales.
lambda:	utilizada	para	definir	funciones	lambda.
None:	utilizada	para	representar	la	ausencia	de	valor.
nonlocal:	 permite	 modificar	 el	 valor	 de	 un	 objeto	 definido	 en	 un
ámbito	anterior.
not:	representación	lógica	de	NO.
or:	representación	lógica	de	O.
pass:	únicamente	tiene	funciones	estéticas	para	rellenar	huecos	en	el
código	fuente.
print:	utilizada	para	imprimir	por	pantalla	una	cadena	de	texto.
raise:	utilizada	para	lanzar	excepciones.
return:	utilizada	para	devolver	un	elemento	al	finalizar	la	ejecución
de	una	función.
True:	utilizada	para	representar	el	valor	booleano	1	/	verdadero.
try:	 utilizada	 para	 capturar	 excepciones	 ocurridas	 durante	 la
ejecución	del	código	fuente.
while:	utilizada	para	definir	bucles	while.
with:	utilizada	para	encapsular	la	ejecución	de	un	bloque	de	código
fuente.
yield:	 utilizada	 para	 devolver	 más	 de	 un	 elemento	 al	 finalizar	 la
ejecución	de	una	función.
Comentarios	de	código
	
Un	 recurso	 utilizado	 en	 programación	 para	 aclarar	 el	 código	 fuente	 que	 se
escribe	 es	 la	 utilización	 de	 comentarios.	 Los	 comentarios	 son	 una	 forma	 de
añadir	documentación	a	los	propios	ficheros	de	código	fuente,	como	por	ejemplo
puede	ser	describir	lo	que	hace	una	función,	describir	los	parámetros	de	entrada
que	tiene	y	los	parámetros	de	salida	que	devuelven	al	acabar	su	ejecución.
	
Los	 comentarios,	 a	 la	 hora	 de	 ejecutar	 el	 programa,	 son	 ignorados	 por	 el
ordenador,	 por	 lo	 que	 puedes	 introducir	 todos	 los	 comentarios	 que	 desees	 o
necesites,	aunque	te	recomendamos	que	pongas	énfasis	en	escribir	código	que
sea	descriptivo,	tanto	a	nivel	de	nombres	que	eliges	para	las	variables,	funciones
o	clases	como	a	nivel	de	las	propias	instrucciones.
	
Los	comentarios	se	pueden	añadir	al	código	fuente	de	dos	formas	diferentes:
	
Comentarios	de	una	única	línea:	normalmente	hacen	referencia	a	una
única	 instrucción	 del	 código	 fuente.	 En	 Python	 hay	 que	 poner	 el
carácter	‘#’	al	comienzo	de	la	línea	para	indicar	que	esa	línea	es	un
comentario.
Bloque	de	comentarios	o	comentario	de	varias	líneas:	normalmente
hacen	 referencia	 a	 un	 bloque	 de	 instrucciones,	 aunque	 también
pueden	usarse	únicamente	a	una	línea.	En	Python	hay	que	poner	los
caracteres	 ‘”””’	 (triple	 comilla	 doble)	 al	 comienzo	 de	 la	 primera
línea	del	bloque	y	al	final	de	la	última	línea	del	bloque.
	
El	siguiente	ejemplo	muestra	un	comentario	de	una	única	línea:
	
sumando1	=	float(input("Introduzca	el	primer	sumando	(Decimal):	"))
sumando2	=	float(input("Introduzca	el	segundo	sumando	(Decimal):	"))
#	Una	vez	tenemos	los	dos	sumandos	se	realiza	la	suma	y	se	muestra	por	pantalla
print("Resultado	de	la	suma:	",	sumando1	+	sumando2)
	
El	siguiente	ejemplo	muestra	un	bloque	de	comentarios:
	
"""	El	siguiente	código	realiza	la	suma	de	dos	números
que	son	pedidos	al	usuario	y	el	resultado	lo	muestra	por	pantalla"""
sumando1	=	float(input("Introduzca	el	primer	sumando	(Decimal):	"))
sumando2	=	float(input("Introduzca	el	segundo	sumando	(Decimal):	"))
print("Resultado	de	la	suma:	",	sumando1	+	sumando2)
Caracteres	especiales	en	cadenas
	
En	este	anexo	vamos	a	explicarte	una	serie	de	caracteres	especiales	que	puedes
utilizar	en	las	cadenas	de	texto	y	que	se	conocen	como	caracteres	de	escape.
	
Los	caracteres	son	los	siguientes:
	
:	carácter	para	introducir	la	barra		en	la	cadena	de	texto.
':	carácter	para	introducir	una	comilla	simple	en	la	cadena	de	texto.
":	carácter	para	introducir	una	comilla	doble	en	la	cadena	de	texto.
a:	 carácter	 para	 introducir	 el	 carácter	 ASCII	 Bell	 en	 la	 cadena	 de
texto.
b:	carácter	para	introducir	el	carácter	ASCII	Backspace	en	la	cadena
de	texto.
f:	carácter	para	introducir	un	salto	de	página	en	la	cadena	de	texto.
n:	carácter	para	introducir	un	salto	de	línea	en	la	cadena	de	texto.
r:	carácter	para	introducir	un	salto	de	carro	en	la	cadena	de	texto.
t:	carácter	para	introducir	una	tabulación	horizontal	en	la	cadena	de
texto.
uxxxx:	carácter	para	introducir	un	carácter	hexadecimal	de	16bits.
Únicamente	es	válido	para	juegos	de	caracteres	Unicode.
Uxxxxxxxx:	 carácter	 para	 introducir	 un	 carácter	 hexadecimal	 de
32bits.	Únicamente	es	válido	para	juegos	de	caracteres	Unicode.
v:	carácter	para	introducir	una	tabulación	vertical	en	la	cadena	de
texto.
ooo:	carácter	para	introducir	un	carácter	octal	en	la	cadena	de	texto.
xhh:	carácter	para	introducir	un	carácter	hexadecimal	en	la	cadena
de	texto.
	
Los	caracteres	de	escape	se	introducen	de	la	misma	forma	que	otros	caracteres
en	las	cadenas	de	texto.
Excepciones	existentes	en	Python
	
En	este	anexo	vamos	a	explicarte	las	diferentes	excepciones	que	puedes	utilizar
en	 Python.	 El	 listado	 incluye	 todas	 las	 existentes,	 por	 lo	 que	 están	 incluidas
excepciones	relacionadas	con	conceptos	que	están	fuera	del	ámbito	del	libro.
	
El	 listado	 está	 divido	 a	 su	 vez	 en	 dos	 listados.	 El	 primero	 incluye	 aquellas
excepciones	 genéricas	 de	 las	 que	 se	 derivan	 las	 excepciones	 específicas	 que
podrás	encontrar	en	el	segundo	listado.
	
Excepciones	genéricas:
	
Exception:	tipo	de	excepción	más	genérica,	de	ella	derivan	todas	las
excepciones	existentes	en	Python.
ArithmeticError:	 tipo	 de	 excepción	 genérica	 para	 errores
aritméticos.
BufferError:	 tipo	 de	 excepción	 genérica	 para	 errores	 relacionados
con	buffers.
LookupError:	tipo	de	excepción	genérica	para	errores	relacionados
con	acceso	a	datos	de	colecciones.
	
Excepciones	específicas:
	
AssertionError:	excepción	que	se	lanza	cuando	la	instrucción	assert
falla.
AttributeError:	 excepción	 que	 se	 lanza	 cuando	 hay	 un	 error	 a	 la
hora	de	asignar	un	valor	a	un	atributo	o	cuando	se	intenta	acceder	a
él.
EOFError:	excepción	que	se	lanza	cuando	la	instrucción	input	no
devuelve	datos	leídos.
FloatingPointError:	excepción	que	ya	no	se	usa.
GeneratorExit:	excepción	que	se	lanza	cuando	se	cierra	una	función
de	tipo	generator	o	coroutine.
ImportError:	excepción	que	se	lanza	cuando	se	intenta	importar	un
módulo	al	programa	y	falla.
ModuleNotFoundError:	excepción	que	se	lanza	cuando	se	intenta
importar	un	módulo	y	no	se	encuentra.	Deriva	de	la	anterior.
IndexError:	excepción	que	se	lanza	cuando	se	intenta	acceder	a	una
posición	de	una	secuencia	y	ésta	es	superior	a	la	posición	mayor.
KeyError:	 excepción	 que	 se	 lanza	 cuando	 se	 intenta	 acceder	 a	 la
clave	de	un	diccionario	y	no	se	encuentra.
KeyboardInterrupt:	 excepción	 que	 se	 lanza	 cuando	 el	 usuario
utiliza	 el	 comando	 de	 interrupción	 con	 el	 teclado	 (Control-C	 o
delete).
MemoryError:	excepción	que	se	lanza	cuando	el	programa	ejecuta
una	instrucción	y	ésta	supera	el	máximo	de	memoria	disponible.
NameError:	excepción	que	se	lanza	cuando	el	nombre	local	o	global
no	se	encuentra.
NotImplementedError:	excepción	que	se	lanza	cuando	un	método
de	una	clase	no	ha	sido	implementado	todavía	y	tiene	que	hacerlo.
OSError:	excepción	que	se	lanza	cuando	el	sistema	operativo	lanza
una	 excepción	 al	 ejecutar	 una	 instrucción.	 Existen	 las	 siguientes
excepciones	específicas	que	puede	lanzar	el	sistema	operativo:
BlockingIOError:	 excepción	 que	 se	 lanza	 cuando	 una
operación	 se	 bloquea	 en	 un	 objeto	 que	 no	 debería	 de
bloquearse.
ChildProcessError:	 excepción	 que	 se	 lanza	 cuando	 una
operación	de	un	proceso	hijo	devuelve	un	error.
ConnectionError:	 excepción	 genérica	 que	 se	 lanza	 para
errores	relacionados	a	conexión.
BrokenPipeError:	 excepción	 que	 se	 lanza	 cuando	 se
intenta	escribir	en	un	socket	o	pipe	(tubería)	y	ya	ha	sido
cerrado.
ConnectionAbortedError:	 excepción	 que	 se	 lanza
cuando	durante	un	intento	de	conexión	ésta	es	abortada	por
el	otro	extremo.
ConnectionRefusedError:	excepción	que	se	lanza	cuando
durante	 un	 intento	 de	 conexión	 ésta	 es	 rechazada	 por	 el
otro	extremo.
ConnectionResetError:	excepción	que	se	lanza	cuando	la
conexión	es	reseteada	por	el	otro	extremo.
FileExistsError:	excepción	que	se	lanza	cuando	se	intenta
crear	un	fichero	o	directorio	y	éste	ya	existe.
FileNotFoundError:	 excepción	 que	 se	 lanza	 cuando	 se
intenta	acceder	a	un	fichero	o	directorio	y	no	existe	o	no	se
encuentra.
IsADirectoryError:	 excepción	 que	 se	 lanza	 cuando	 se
intenta	 ejecutar	 una	 operación	 relacionada	 con	 ficheros
sobre	un	directorio.
NotADirectoryError:	excepción	que	se	lanza	cuando	se
intenta	ejecutar	una	operación	relacionada	con	directorios
sobre	algo	que	no	es	un	directorio.
PermissionError:	 excepción	 que	 se	 lanza	 cuando	 se
intenta	ejecutar	una	operación	y	no	se	tienen	los	permisos
suficientes.
ProcessLookupError:	excepción	que	se	lanza	cuando	se
ejecuta	un	proceso	que	no	existe	y	se	ha	indicado	que	sí.
TimeoutError:	 excepción	 que	 se	 lanza	 cuando	 se
sobrepasa	 el	 tiempo	 de	 espera	 en	 alguna	 función	 del
sistema.
OverflowError:	excepción	que	se	lanza	cuando	el	resultado	de	una
operación	matemática	es	demasiado	grande	para	ser	representado.
RecursionError:	 excepción	 que	 se	 lanza	 cuando	 el	 número	 de
recursividades	supera	el	máximo	permitido.
ReferenceError:	excepción	que	se	lanza	al	intentar	acceder	a	ciertos
atributos	 por	 parte	 de	 la	 clase	 proxy	 y	 que	 ya	 se	 encuentran	 en	 el
recolector	de	basura.
RuntimeError:	excepción	que	se	lanza	cuando	el	error	que	ocurre
no	puede	ser	categorizado	en	ninguno	de	los	tipos	existentes.
StopIteration:	excepción	que	se	lanza	cuando	se	intenta	acceder	al
siguiente	elemento	de	un	iterador	y	ya	no	tiene	más	elementos	sobre
los	que	iterar.
StopAsyncIteration:	 excepción	 que	 se	 lanza	 cuando	 se	 intenta
acceder	al	siguiente	elemento	de	un	iterador	asíncrono	y	ya	no	tiene
más	elementos	sobre	los	que	iterar.
SyntaxError:	excepción	que	se	lanza	cuando	el	analizador	sintáctico
encuentra	un	error	de	sintaxis.
IndentationError:	 excepción	 genérica	 que	 se	 lanza	 cuando	 se
encuentran	errores	de	indentación	del	código	fuente.
TabError:	excepción	que	se	lanza	cuando	se	encuentran	errores	de
uso	en	las	tabulaciones	y	espaciados	del	código	fuente.	La	excepción
deriva	de	la	anterior.
SystemError:	excepción	que	se	lanza	cuando	el	intérprete	de	Python
encuentra	un	error	interno	mientras	ejecuta	el	programa.
SystemExit:	 excepción	 que	 se	 lanza	 al	 ejecutar	 la	 instrucción
sys.exit()	y	que	provoca	que	se	pare	la	ejecución	del	programa.
TypeError:	excepción	que	se	lanza	cuando	una	operación	o	función
se	usa	con	un	tipo	de	dato	incorrecto.
UnboundLocalError:	excepción	que	se	lanza	cuando	se	utiliza	una
variable	local	en	una	función	o	método	y	no	ha	sido	asignado	ningún
valor	previamente.
UnicodeError:	excepción	que	se	lanza	cuando	se	produce	un	error	a
la	hora	de	codificar	o	decodificar	Unicode.
UnicodeEncodeError:	excepción	que	se	lanza	cuando	se	produce	un
error	a	la	hora	de	realizar	una	codificación	a	Unicode.
UnicodeDecodeError:	excepción	que	se	lanza	cuando	se	produce	un
error	a	la	hora	de	realizar	una	decodificación	de	Unicode.
UnicodeTranslateError:	excepción	que	se	lanza	cuando	se	produce
un	error	a	la	hora	de	traducir	Unicode.
ValueError:	excepción	que	se	lanza	cuando	una	operación	o	función
recibe	un	parámetro	del	tipo	correcto,	pero	con	un	valor	incorrecto.
ZeroDivisionError:	 excepción	 que	 se	 lanza	 cuando	 se	 realiza	 una
división	por	cero.
SOBRE	LOS	AUTORES	Y	AGRADECIMIENTOS
	
Este	libro	y	todo	lo	que	rodea	a	Time	of	Software	es	el	resultado	de	muchos	años
dedicados	 a	 la	 docencia	 en	 el	 ámbito	 tecnológico.	 Primero	 con	 grupos	 de
Educación	Secundaria	Obligatoria	y	Bachillerato	y	posteriormente	mediante	la
docencia	a	formadores.
	
El	trabajo	de	creación	del	método	de	aprendizaje,	sintetización	y	ordenación	de
toda	 la	 información	 teórica	 relacionada	 con	 Python	 y	 elaboración	 de	 las
diferentes	 prácticas	 plasmadas	 en	 el	 libro	 son	 responsabilidad	 de	 las	 personas
directamente	 responsables	 de	 Time	 of	 Software,	 Alfredo	 Moreno	 y	 Sheila
Córcoles,	apasionados	por	el	mundo	tecnológico	y	por	la	docencia.
	
Queremos	 agradecer	 a	 nuestras	 familias,	 amigos	 y	 compañeros	 de	 trabajo	 el
apoyo	 incondicional	 y	 las	 aportaciones	 que	 han	 realizado	 al	 método	 de
aprendizaje	 de	 Python	 que	 hemos	 desarrollado,	 ¡gracias	 por	 ser	 nuestros
conejillos	de	indias!	Sin	vosotros	esto	no	hubiera	sido	posible.
	
Y	por	supuesto	gracias	a	ti	por	adquirir	“Aprende	Python	en	un	fin	de	semana”.
Esperamos	que	hayas	conseguido	el	objetivo	que	te	propusiste	cuando	compraste
el	libro.	Habrás	podido	comprobar	que	ésto	es	sólo	el	principio,	que	Python	es
un	 mundo	 apasionante.	 No	 tengas	 dudas	 en	 ponerte	 en	 contacto	 con	 nosotros
para	contarnos	qué	tal	te	ha	ido	y	cómo	te	va,	¡NO	ESTÁS	SOLO!
MATERIAL	DESCARGABLE
	
El	código	fuente	de	todos	los	ejercicios	realizados	en	el	libro	puedes	descargarlo
de	la	siguiente	URL:
	
http://timeofsoftware.com/aprendepythonejercicios/
	
La	contraseña	del	fichero	ZIP	es:	TIMEOFSOFTWARE
OTROS	LIBROS	DE	LOS	AUTORES
	
Si	 te	 ha	 gustado	 el	libro	y	 quieres	seguir	aprendiendo	con	el	mismo	formato,
puedes	encontrar	en	Amazon	otros	libros	escritos	por	nosotros:
	
Aprende	Arduino	en	un	fin	de	semana

Más contenido relacionado

PDF
Algoritmos programacion-python
PDF
Aprende python en un fin de semana (spanis alfredo moreno munoz
PPT
04 Servidores ws2019.ppt
PDF
Ejemplo soa
DOC
Manual glpi administrador
PDF
Introducción a Django
DOCX
Mapa conceptual de algoritmos
PDF
Práctica Active Directory 1-12
Algoritmos programacion-python
Aprende python en un fin de semana (spanis alfredo moreno munoz
04 Servidores ws2019.ppt
Ejemplo soa
Manual glpi administrador
Introducción a Django
Mapa conceptual de algoritmos
Práctica Active Directory 1-12

Similar a 1. aprende python en un fin de semana sqminingsociety (20)

PPTX
iniciación con python aprendizaje de programación
PDF
PIAD-211_MATERIAL.pdf
PDF
3 Conceptos progamacion-tema3
PDF
CLASE 1 DE INICIACION A LA PROGRAMACION DE PYTHON TALENTO TECH
PPS
Ciclo de vida de un programa
PPTX
Taller Python
PPTX
INTRODUCCIÓN A LA PROGRAMACIÓN (1).pptx
PPTX
introduccinalaprogramacin1-221020044822-0d05d20a.pptx
PPTX
Introducción a Python
PPTX
Python_Introduccion_a_la_programacion.pptx
PDF
Unidad Iii Generalidades Sobre Algoritmos
PDF
Programación
PPTX
Etapa 2- Clase 1 - Bienvenidos a la primer etapa!.pptx
PPT
Clase Programación WEB
PDF
PROGRAMACIÓN DEL ROBOT LEGO EV3
PPTX
Introducción a Programación I (Clase1).pptx
PDF
pensamiento computacional seudocodigos y sentencias
PDF
Tema1b 120417003759-phpapp01
PPTX
PROGRAMACION BASICA, INICIACION A LA PROGRAMACION .pptx
iniciación con python aprendizaje de programación
PIAD-211_MATERIAL.pdf
3 Conceptos progamacion-tema3
CLASE 1 DE INICIACION A LA PROGRAMACION DE PYTHON TALENTO TECH
Ciclo de vida de un programa
Taller Python
INTRODUCCIÓN A LA PROGRAMACIÓN (1).pptx
introduccinalaprogramacin1-221020044822-0d05d20a.pptx
Introducción a Python
Python_Introduccion_a_la_programacion.pptx
Unidad Iii Generalidades Sobre Algoritmos
Programación
Etapa 2- Clase 1 - Bienvenidos a la primer etapa!.pptx
Clase Programación WEB
PROGRAMACIÓN DEL ROBOT LEGO EV3
Introducción a Programación I (Clase1).pptx
pensamiento computacional seudocodigos y sentencias
Tema1b 120417003759-phpapp01
PROGRAMACION BASICA, INICIACION A LA PROGRAMACION .pptx
Publicidad

Último (20)

PPTX
CNE-Tx-ZyD_Comite_2020-12-02-Consolidado-Version-Final.pptx
PPTX
Investigacioncientificaytecnologica.pptx
PDF
SESION 10 SEGURIDAD EN TRABAJOS CON ELECTRICIDAD.pdf
PDF
silabos de colegio privado para clases tema2
PPTX
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
PDF
Diseño y Utiliación del HVAC Aire Acondicionado
PDF
MODULO 1 Base Legal Nacional y sus aplicaciones.pdf
PDF
Presentacion_Resolver_CEM_Hospitales_v2.pdf
PDF
TRABAJO DE ANÁLISIS DE RIESGOS EN PROYECTOS
PDF
manual-sostenibilidad-vivienda-yo-construyo (1).pdf
PPTX
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
PPTX
TRABAJOS DE ALTO RIESGO ELEC - LOTO.pptx
PPTX
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
PPTX
Cómo Elaborar e Implementar el IPERC_ 2023.pptx
PPTX
PPT PE 7 ASOCIACIONES HUAMANGA_TALLER DE SENSIBILIZACIÓN_20.04.025.pptx
PDF
Módulo V. Tema 2. Disruptive & Transformation 2024 v.0.4.pdf
PDF
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
PPTX
TECNOLOGIA EN CONSTRUCCION PUBLICO Y PRIVADA
PDF
METODOLOGÍA DE INVESTIGACION ACCIDENTES DEL TRABAJO.pdf
PDF
Seguridad vial en carreteras mexico 2003.pdf
CNE-Tx-ZyD_Comite_2020-12-02-Consolidado-Version-Final.pptx
Investigacioncientificaytecnologica.pptx
SESION 10 SEGURIDAD EN TRABAJOS CON ELECTRICIDAD.pdf
silabos de colegio privado para clases tema2
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
Diseño y Utiliación del HVAC Aire Acondicionado
MODULO 1 Base Legal Nacional y sus aplicaciones.pdf
Presentacion_Resolver_CEM_Hospitales_v2.pdf
TRABAJO DE ANÁLISIS DE RIESGOS EN PROYECTOS
manual-sostenibilidad-vivienda-yo-construyo (1).pdf
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
TRABAJOS DE ALTO RIESGO ELEC - LOTO.pptx
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
Cómo Elaborar e Implementar el IPERC_ 2023.pptx
PPT PE 7 ASOCIACIONES HUAMANGA_TALLER DE SENSIBILIZACIÓN_20.04.025.pptx
Módulo V. Tema 2. Disruptive & Transformation 2024 v.0.4.pdf
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
TECNOLOGIA EN CONSTRUCCION PUBLICO Y PRIVADA
METODOLOGÍA DE INVESTIGACION ACCIDENTES DEL TRABAJO.pdf
Seguridad vial en carreteras mexico 2003.pdf
Publicidad

1. aprende python en un fin de semana sqminingsociety