Python (Parte 5) – Sentencias de control de flujo (2)

por | 11 octubre, 2016

Este artículo dará continuación a nuestra explicación sobre «Sentencias de control de flujo (1)» donde expusimos el uso de sentencias ‘if/else/elif‘,  ‘for‘ y ‘while‘. Las sentencias que revisaremos con ejemplo en esta entrada serán las siguientes:

  • def
  • try, except, finally

1. Sentencia ‘def’

Antes de definir esta sentencia es preciso tener claro el concepto de «función«, una función es un conjunto de líneas o un bloque de código que realiza una tarea específica y que puede retornar un valor. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y repetitiva. Es recomendable definir funciones sobre bloques de código que vamos a usar en repetidas ocasiones, de este modo simplificaremos nuestras aplicaciones y su mantenimiento.

La sentencia «def» nos permitirá definir funciones de usuario, como indicábamos estas funciones serán bloques de código independientes a las que daremos uso cuando consideremos oportuno.

A continuación os mostraremos varios ejemplos e incrementaremos su complejidad poco a poco, en estos ejemplos plantearemos la situación o condición  y a continuación su interpretación en Python.

  • Ejemplo 1:

Requisito en texto: Definir función que nos indique el mayor entre dos números que recibirá como argumentos de entrada, en caso de ser iguales devolverá el valor del primer argumento de entrada.

Python:

def MiPrimeraFuncion(PrimerNumero, SegundoNumero):

if PrimerNumero > SegundoNumero:

return PrimerNumero

elif PrimerNumero < SegundoNumero:

return SegundoNumero

else:

return PrimerNumero

Resultado = MiPrimeraFuncion(10, 15)

print (Resultado)

  • Ejemplo 2:

Requisito en texto: Averiguar el valor de una posición concreta en la «sucesión de Fibonacci«. El número de posición será informado como argumento de entrada y su valor resultante será devuelto por la función para posteriormente imprimirlo por pantalla. La «sucesión de Fibonacci« es la sucesión de números que, empezando por la unidad,  cada uno de sus términos o posiciones es la suma de los dos anteriores.

Python:

def fibonacci(n):

a = 0

b = 1

c = 0

for i in range (n-1):

c = a + b

a = b

b = c

return (a)

Resultado = fibonacci (5)

print (Resultado)

Nota: Este es uno de los modos más sencillos de calcular este número fibonacci, los puristas preferirán el uso de una función recursiva, con asignaciones de variables del tipo a,b = b, a+b y otras opciones, sin embargo, este tutorial pretende enseñar sin excesivos dolores de cabeza y de ahí el motivo de alargar ligeramente el código.

2. Sentencias ‘try/except/finally’

Las sentencias try/except/finally nos permitirán controlar errores de nuestro código y, por decirlo de algún modo, buscar una vía de escape más o menos controlada en caso de que se produzcan. Normalmente los errores son debidos a errores la sintaxis del código o a situaciones que el programador no tuvo en cuenta. Por ejemplo, si nuestro programa suma números y quien lo usa introduce letras es más que probable que se muestre un mensaje de error nada bonito.

Para muestra, un botón.

  • Ejemplo con error:

Requisito en texto: Reutilizaremos nuestra función «MiPrimeraFuncion» pero en esta ocasión introduciremos en su invocación letras en sus parámetros.

Python:

def MiPrimeraFuncion(PrimerNumero, SegundoNumero):

if PrimerNumero > SegundoNumero:

return PrimerNumero

elif PrimerNumero < SegundoNumero:

return SegundoNumero

else:

return PrimerNumero

Resultado = MiPrimeraFuncion(«tralara», 15)

print (Resultado)

La respuesta será semejante a esta:

if PrimerNumero > SegundoNumero: TypeError: ‘>’ not supported between instances of ‘str’ and ‘int’

Ay dios mio que horror! y ahora que hago!?….. tranquilos que todo en la vida tiene solución salvo la versión española de «cheers».

Para controlar errores o excepciones en nuestro código utilizaremos las sentencias a las que está dedicado este punto. Estas sentencias funcionan en conjunto del siguiente modo:

  • try: Tras esta sentencia o clausula definiremos el bloque de código que deseamos controlar.
    • Si no se produce un error el bloque de código será ejecutado hasta el final.
    • Si se produce un error el bloque de código parará su ejecución en el punto del error y dará un salto al código definido dentro de la clausula «except«.
  • except: El bloque de código contenido en esta sentencia se ejecutará al producirse un error en el bloque de código contenido en la clausula «try«. Existen distintos tipos de excepciones predefinidas, no obstante, para nuestro manual usaremos la más sencilla.
  • finally: Por último, tras la ejecución del bloque de código «except«, será ejecutado el bloque de código contenido en la sentencia o clausula «finally«. Esta clausula opcional es ejecutada para llevar a cabo una limpieza de variables, mensajes finales,…
  • Ejemplo 1:

Requisito en texto: Provocar un caso de error dividiendo 1 entre 0 para mostrar distintos mensajes en las sentencias «except» y «finally«. En caso de no existir error únicamente será mostrado el mensaje definido tras la sentencia «finally«.

Python:

def funcionError():

try:

x = 1/0

except:

print(‘Error controlado’)

finally:

print(‘Mensaje de finalización de código’)

funcionError()

Con este artículo finalizamos nuestro curso introducción a Python, esperamos no haber sido demasiado «espesos» y que os sirva de ayuda como base en el futuro.

Listado de artículos relacionados:

Artículo 1: Introducción
Artículo 2: Operadores
Artículo 3: Variables
Artículo 4: Tipos de datos
Artículo 5: Sentencias de Control (1)
Artículo 6: Sentencias de Control (2)

logo_sexy

Python (Parte 4) – Sentencias de control de flujo (1)

por | 2 junio, 2016

En los dos próximos artículos os mostraremos como definir y usar herramientas de control de flujo, estas herramientas nos permitirán condicionar el comportamiento de nuestro programa a través de puntos de control, tomar decisiones a partir de validaciones y ejecutar repeticiones o bucles.

Muchas de estas herramientas también son conocidas como «declaraciones compuestas» o «sentencias«, en nuestro caso haremos referencia a ellas usando el término «declaraciones compuestas» pues consideramos que engloba mejor el conjunto . El listado de declaraciones compuestas que explicaremos es el siguiente:

  • if, else, elif
  • for
  • while
  • def
  • try, except, finally

Comienza el show!

1. Sentencia ‘if, else, elif’

Este tipo de declaración es una de las más utilizadas en programación, nos servirá para derivar o decidir el código o acción que debe ser ejecutada a partir de una condición. La programación, en cualquier lenguaje, se basa en llevar a cabo una acción u otra dependiendo de los datos introducidos por el usuario (causa y efecto como decía el francés de Matrix), así pues, recomendamos practicar con distintas combinaciones para entender bien como funciona la sentencia «if«.

Es necesario aclarar que Python organiza el código en bloques, es decir, las líneas de código deben estar alineadas cuando tratamos con sentencias «if» y semejantes para que Python sepa que ese código es parte de su contenido. En otros lenguajes se suele agrupar el código o contenido con sintaxis que usan sentencias block { }, no obstante, en Python el delimitador de contenido sería la alineación misma del código en lugar de dicho carácter especial.

Ejemplo JavaScript:

if (condición) {
    bloque de código a ser ejecutado si se cumple la condición
}

Ejemplo Python:

if condición

bloque de código a ser ejecutado si se cumple la condición

En la siguiente imagen mostraremos la organización en bloques de un modo algo más visual:

Bloques3

A continuación os mostraremos varios ejemplos e incrementaremos su complejidad poco a poco, en estos ejemplos plantearemos la situación o condición  y a continuación su interpretación en Python.

  • Ejemplo 1:

Requisito en texto: Si la variable «Edad» es mayor que 18 mostrar el mensaje de texto «Eres mayor de edad«, en caso contrario no mostrar nada.

Python:

Edad = 19

if Edad >= 18:

print (‘Eres mayor de edad’)

Nota: Recordad aplicar una tabulación en las líneas de código tras la sentencia «if» para mantener todo el bloque alineado y dentro de dicha sentencia, así mismo, recordad pulsar dos veces la tecla «Intro» para que sea ejecutado el código.

  • Ejemplo 2:

Requisito en texto: Reutilizar el ejemplo anterior para que muestre el mensaje «Eres menor de edad» en caso de que la variable «Edad» sea menor de 18.

Python:

Edad = 15

if Edad >= 18:

print (‘Eres mayor de edad’)

else:

print (‘Eres menor de edad’)

Nota: En este ejemplo hemos hecho uso de la sentencia «else«. La sentencia «else» es usada en combinación con «if» y su función es ejecutar el bloque de código que se encuentra en su interior únicamente en caso de no cumplirse la condición del bloque «if«.

  • Ejemplo 3:

Requisito en texto: Imaginemos que estamos en un cine para una película de acción y el requisito es ser mayor de edad y tener comprada una entrada, en este caso necesitaremos incluir una nueva variable de tipo booleano en la condición llamada «TieneEntrada» y su posible valor será True o False.

Python:

Edad = 18

TieneEntrada = True

if Edad >= 18 and TieneEntrada == True:

print (‘Eres mayor de edad, tienes entrada y puedes ver la película’)

else:

print (‘Eres menor de edad y no puedes ver la película’)

Nota: En este ejemplo hemos unido las condiciones en una única línea, no obstante, eso limitará la variedad de mensajes que podremos mostrar.

  • Ejemplo 4:

Requisito en texto: Reutilizar el código del ejemplo anterior pero mostrando cuatro mensajes distintos dependientes de la edad y de si tienes entrada.

Python:

Edad = 21

TieneEntrada = True

if Edad >= 18:

print (‘Eres mayor de edad’)

if TieneEntrada == True:

print (‘Tienes y entrada y puedes ver la película’)

else:

print(‘Sin entrada no puedes ver la película’)

else:

print (‘Eres menor de edad y no puedes ver la película’)

Nota: Este ejemplo sería más completo pero no tan limpio como nos gustaría, es decir, en caso de ser mayor de 18 años sería mostrado el mensaje «Eres mayor de edad» e inmediatamente después otro mensaje indicando si tenemos o no entrada. En una situación algo más real intentaríamos reducir la cantidad de mensajes como se muestra en el siguiente ejemplo.

  • Ejemplo 5:

Requisito en texto: Aplicar las mismas validaciones del ejemplo anterior pero unificando los mensajes a solo tres.

Python:

Edad = 21

TieneEntrada = True

if Edad >= 18 and TieneEntrada == True:

print (‘Eres mayor de edad, tienes entrada y puedes ver la película’)

elif Edad >= 18 and TieneEntrada == False:

print (‘Eres mayor de edad pero sin entrada no puedes ver la película’)

else:

print (‘Eres menor de edad y no puedes ver la película’)

Nota: En este caso se ejecutará la condición del primer «if» y si se cumple se mostrará el primer mensaje. En caso de no cumplirse la primera condición, la sentencia «elif» volverá a validar los datos con otra condición y mostrará el segundo mensaje si esta se cumple. En última instancia, si ninguna de las validaciones anteriores se cumple, será mostrado el tercer mensaje correspondiente a la sección «else«.

  • Ejemplo 6:

Requisito en texto: Un punto a tener presente en sentencias «if, elif, else» es asegurarnos de que el tipo de dato que estamos comparando sea correcto, es decir, comparar por ejemplo textos con números podrían provocar un comportamiento inesperado.

Python:

Edad = «21»

if Edad >= 18:

print(‘Eres mayor de edad’)

Nota: Al comparar un dato de texto «21» con un dato numérico 18 recibiremos un mensaje de error.

  • Ejemplo 7:

Requisito en texto: Aplicaremos al ejemplo anterior una conversión de texto a número mediante la función «int()» para que la comparación sea correcta.

Python:

Edad = «21»

if int(Edad) >= 18:

print(‘Eres mayor de edad’)

2. Sentencia ‘for’

La sentencia «for» es usada para llevar a cabo iteraciones o repeticiones, es decir, repetirá un bloque de código tantas veces como indiquemos al declararlo. El ejemplo más sencillo sería el siguiente:

for x in range(0,5):

print x

for1

Es posible que nos confunda el resultado 0,1,2,3,4 y no ver un número 5 cuando lo hemos definido en la sentencia «for» a través del parámetro «range(0,5)«, la explicación es que recorrerá los números existentes del 0 al 5 sin incluir este último, es decir, todos los valores menores de 5 partiendo del valor 0.

No es obligatorio establecer un rango fijo de repeticiones, es decir, podremos sustituir los valores de entrada del parámetro «range()» por variables previamente definidas:

Minimo = 0

Maximo = 11

for x in range(Minimo, Maximo):

print («El valor que toma x es %s» % x)

En caso de desear recorrer un rango en sentido inverso, es decir, una especie de cuenta atrás, invertiremos los valores de inicio, fin y agregaremos un tercer parámetro a la función «range()» con el valor «-1«:

for x in range(11,0,-1):

print (x)for2

 

Existe la posibilidad de establecer el rango de repeticiones sin necesidad del parámetro «range()«, un ejemplo sería a través de una variable de tipo lista que ejecutará tantas iteraciones como valores hay en dicha lista:

NuestraLista = [‘Perro’, ‘Pato’, ‘Elefante’]

for x in NuestraLista:

print(x)

3. Sentencia ‘while’

La sentencia «while» es usada para llevar a cabo iteraciones o repeticiones tantas veces como se defina en una expresión, es decir, repetirá un bloque de código hasta que se cumplan las condiciones establecidas dentro de la propia sentencia «while». El método de control más común es declarar una variable, que usaremos como contador, con valor por defecto cero antes del bucle «while», usar dicho contador en la condición del «while» e incrementar su valor sumando de uno en uno dentro del bloque de código.

Contador = 0

while Contador < 10:

print(Contador)

Contador = Contador + 1

Al contrario que la sentencia «for«, la sentencia «while» no es ejecutada un número finito de veces previamente definido, así pues, debemos tener mucho cuidado al usar este tipo de sentencia y su condición de salida pues podríamos definir por error un bucle infinito que colgaría nuestro código, programa o aplicación.

A continuación os mostraremos varios ejemplos e incrementaremos su complejidad poco a poco, en estos ejemplos plantearemos la situación o condición  y a continuación su interpretación en Python.

  • Ejemplo 1:

Requisito en texto: Definir dos variables «a» y «b» con valores por defecto «1» y «10» respectivamente. Incrementar en uno el valor de la variable «a» e imprimir su valor en ese instante mientras dicha variable sea menor que «b«.

Python:

a = 1

b = 10

while a < b:

print(a)

a = a + 1

Nota: Un error muy común en estos casos sería no definir una suma incremental sobre el valor de la variable «a» como el que hemos usado en nuestro código de ejemplo (a = a + 1), en caso de no definirlo la condición nunca se cumpliría y por tanto el código imprimiría por pantalla el número «1» infinitas veces. Recomendamos hacer una prueba pues como siempre decimos «una imagen vale más que mil palabras aunque pesa más en el disco duro».

  • Ejemplo 2:

Requisito en texto: Deseamos saber cuantos hay desde hoy día 10 hasta el día 30 del mes, para saber cuando cobraremos :P, e informar con un mensaje el total de días.

Python:

DiaDelMes = 10

FinDeMes = 30

NumeroDeDias = 0

while DiaDelMes <= FinDeMes:

DiaDelMes = DiaDelMes + 1

NumeroDeDias = NumeroDeDias + 1

if DiaDelMes == FinDeMes:

print (‘Faltan %s días para cobrar’ % NumeroDeDias)

  • Ejemplo 3:

Requisito en texto: Deseamos saber si el día de hoy está más cerca del principio de mes o del fin de mes y saber únicamente el más cercano.

Python:

DiaDelMes = 18

DiaInicioMes = 1

DiaFinDeMes = 31

Contador1 = DiaDelMes

Contador2 = DiaDelMes

while Contador1 > DiaInicioMes and Contador2 < DiaFinDeMes:

Contador1 = Contador1 – 1

Contador2 = Contador2 + 1

if Contador1 == DiaInicioMes and Contador2 == DiaFinDeMes:

print (‘Existe la misma diferencia entre el día de hoy y principios o finales de mes’)

elif Contador2 == DiaFinDeMes:

print (‘El día de hoy es más cercano al final del mes’)

else:

print (‘El día de hoy es más cercano al principio de mes’)

Nota: Ojo! la sentencia «if» está alineada con la sentencia «while» y por tanto fuera de esta, es decir, se ejecutará una única vez al terminar el «while«. Este ejemplo sabemos que es algo obvio si únicamente tratamos un mes, no obstante, a futuro usando datos de fechas reales entre distintos meses podría servirnos de ayuda. 

Para no extendernos en exceso en un único artículo, descansar un poco los dedos de tanto escribir y dar también descanso a vuestras fatigadas mentes, dividiremos este artículo en dos entregas que encontraréis en la misma categoría dedicada a Python.

Listado de artículos relacionados:

Artículo 1: Introducción
Artículo 2: Operadores
Artículo 3: Variables
Artículo 4: Tipos de datos
Artículo 5: Sentencias de Control (1)
Artículo 6: Sentencias de Control (2)

logo_sexy

Enlaces de interés (Arduino)

por | 24 mayo, 2016

BLOGS:

BLOGS (Arduino + Raspberry Pi):

FOROS:

CANALES YOUTUBE:

 

No dudéis en comentar este artículo si deseáis dar a conocer blogs, foros o portales interesantes!

logo_late

Python (Parte 3) – Tipos de datos

por | 23 mayo, 2016

Aunque Python es un lenguaje muy flexible en cuestión de tipologías de datos, en este artículo detallaremos distintas opciones que pueden resultarnos interesantes a futuro, entre estos tipos se encontrarán los datos numéricos, textos, listas, tuplas y mapas o diccionarios.

Antes de empezar con los tipos de datos distinguiremos dos formas de declarar variables para ahorrar esfuerzos y líneas en nuestro código:

1. Declaración simple: Es el modo de uso más común por el cual definiremos el valores de una variable con una asignación tal como a = 

2. Declaración múltiple: Existen dos posibles opciones

Opción 1 → Asignación de valor único a varias variables en una única línea:

a = b = c = 1

print(a)

print(b)

print(c)

tipos_datos0

Opción 2 → Asignación de valores distintos sobre diferentes variables en una única línea:

a, b, c, d, e, f = «queso», «que»,»eso», «cigarral», «es», «el»

Texto = «¿» + b + » » +  e + » » + c + «?, » + c + » » +  e + » » + a + » ¿» + b + » » + a + » » + e + «? – » + a + » » + f + » » + d + «.»

print (Texto)

tipos_datos1

Una vez puntualizados los modos de declaración comenzamos con el objetivo principal de este artículo.

¿Qué tipos de datos existen en Python?

No entraremos de momento en tipos de datos relacionados con bases de datos, registros, punteros por referencia, punteros por valor, condensadores de fluzo o como aprender Kung Fú en Matrix. El listado de tipos que veremos en este tutorial es:

  • Números (enteros y reales)
  • Textos (comúnmente llamados strings)
  • Lista (también llamados Lists)
  • Tuplas (también llamados Tuples)
  • Mapas (también llamados Maps, Diccionarios, Dictionary o Dic)
  • Booleanos

Nota: Nos gustaría aclarar de nuevo que el lenguaje Python, al contrario a otros lenguajes, no requiere especificar el tipo de dato que estamos usando, es decir, el mismo lenguaje interpretará a partir de la propia declaración que tipo de dato estamos usando y la reserva de memoria que debe destinar a dicha declaración.

1. Números: La asignación de números será directa y su definición como enteros o reales dependerá de si son definidos con decimales o no. En posteriores artículos os mostraremos como hacer conversiones entre ambos tipos y aplicar formatos como número de decimales.

a = 100   #Esta asignación declarará automáticamente la variable como un número entero

b = 1000.5  #Esta asignación declarará automáticamente la variable como un número real con decimales

2. Textos (Strings): Las variables de tipo texto serán definidas entre comillas simples o comillas dobles como mostramos en el siguiente ejemplo.

a = «Me llamo como me puso el cura.»

print(a)

3. Listas: Una lista es una variable que almacenará múltiples valores separados por comas asignando una posición a cada valor semejante al comportamiento de arrays en C, ¿¡Ay madre pero que $%»@&ç* dice el bailaferias este!?, aquí es donde empieza la chicha e imaginamos que nuestro coco comenzará a echar humo, así pues, para que todos lo entendamos usaremos algo de imaginación y el siguiente ejemplo:

Imaginad que tenemos una estantería con tres baldas, compramos tres libros de aventuras y dejamos un libro en cada balda. Llega el día en que queremos leer el libro de la segunda balda y pedimos a nuestro hermano pequeño Pepython que lo traiga al salón (¿¡que lo traiga Pepython que para eso soy el hermano mayo y mando yo no!?).

Ahora vamos a reflejar este ejemplo dentro de Python:

EstanteriaLibros = [«Libro Aventuras 1», «Libro Aventuras 2», «Libro Aventuras 3»]

print (EstanteriaLibros[1])

Nota: La numeración de posiciones en listas comenzará por cero así pues la posición de «Libro Aventuras 1» es 0, «Libro Aventuras 2» es 1 y «Libro Aventuras 3» es 2.

En nuestro ejemplo la variable de tipo lista «EstanteriaLibros» sería el equivalente a nuestra estantería, la segunda balda equivaldría a la posición 1 de la lista, el libro de la segunda balda sería el texto «Libro Aventuras 2» y la acción de nuestro hermano Pepython sería el equivalente a llamar a la función print().

A continuación mostraremos varios modos de uso de estas listas (ojo no es necesario escribir los comentarios marcados con #):

MiGranLista = [‘Libro1′,’Libro2′,’Libro3’, ‘Libro4’]

MiMiniLista = [‘Libro5′,’Libro6’]

print (MiGranLista) #Imprime la lista completa

print (MiGranLista[0])  #Imprime el primer valor de la lista

print (MiGranLista[1:3])  #Imprime los valores comprendidos entre las posiciones 1 y 3

print (MiGranLista[2:]) #Imprime los valores existentes a partir de la posición 2

print (MiMiniLista * 2) #Imprime todos los valores de la lista MiMiniLista dos veces

print (MiGranLista + MiMiniLista) #Imprime el contenido de ambas listas

MiMegaLista = MiGranLista + MiMiniLista #Crea una nueva lista llamada MiMegaLista con la combinación de ambas listas

print(MiMegaLista) #Impresión de lista final resultante

MiMegaLista.append(‘Libro7’) #Agregará un nuevo valor al final de la lista

del MiMegaLista[2]  #Eliminará el valor contenido en la posición 2 de la lista

tipos_datos2

4. Tuplas: El tipo de dato Tupla sigue exactamente el mismo concepto y comportamiento que las listas con dos importantes diferencias. La primera diferencia es el modo de declaración, las tuplas son declaradas a través del uso de paréntesis () en lugar de corchetes [], la segunda diferencia es el estado de solo lectura, es decir, una vez declarado el contenido de una tupla éste no se puede modificar.

MiPrimeraTupla = (‘Valor1’, ‘Valor2’, ‘Valor3’)

print (MiPrimeraTupla)

tipos_datos3

5. Mapas: Los mapas poseen un comportamiento similar a las listas con una mejora añadida, nos ofrecen la ventaja de poder asignar un identificador único a cada valor de la lista, es decir, podremos identificar el valor de la lista deseado a través de una palabra clave en lugar del número de posición que ocupa en la lista. Este comportamiento nos será de gran utilidad pues podremos crear una variable que actuará como una mini base de datos o tabla como veremos en los siguientes ejemplos:

Nota: En los siguientes ejemplos marcaremos en negrita los identificadores para dejar algo claro cual es cada parte en la definición de un mapa.

MapaDeportes = {‘Pedro‘:’Futbol’, ‘Juan‘:’Baloncesto’, ‘Ana‘:’Tenis’}

print (MapaDeportes[‘Ana’])

tipos_datos4

Podremos llevar a cabo las siguientes acciones sobre nuestro mapa o diccionario:

MapaDeportes[‘Ana’] = ‘Ciclismo’   #De este modo modificaremos el contenido del identificador ‘Ana’ de ‘Tenis’ a ‘Ciclismo’

print (MapaDeportes.keys())  #Imprimirá el listado de identificadores del mapa

print (MapaDeportes.values())  #Imprimirá el listado de valores del mapa

del MapaDeportes[‘Pedro’]  #Eliminará el identificador ‘Pedro’ así como su valor asignado

print (MapaDeportes)  #Listado completo de contenido de mapa

MapaDeportes[‘Guillermo’] = ‘Dormir’   #Actualizará el contenido del identificador ‘Guillermo’ y en caso de no existir lo creará

tipos_datos6

6. Booleanos: Este tipo de dato es el más sencillo y uno de los más usados en programación, solo puede tomar dos valores posibles que son True o False. Es común su uso en tomas de decisiones pues encontraremos muchos casos donde decidiremos a partir de un booleano si ejecutamos una parte concreta del código o no.

Esperamos no haber provocado muchos dolores de cabeza y que disfrutéis de vuestros nuevos conocimientos! 😀

Listado de artículos relacionados:

Artículo 1: Introducción
Artículo 2: Operadores
Artículo 3: Variables
Artículo 4: Tipos de datos
Artículo 5: Sentencias de Control (1)
Artículo 6: Sentencias de Control (2)

logo_late

Python (Parte 2) – Variables

por | 23 mayo, 2016

¿Qué es una variable?

El término variable puede aplicarse o referirse  a matemáticas y programación de distintas formas, no obstante, para no complicar las cosas y evitar severos daños cerebrales irreversibles, nuestra definición será la siguiente: «Una variable es un símbolo (a nuestra elección) que toma un valor (1, 35, juanito, naranja,…) y que puede ser reemplazado por otro valor»

A continuación mostramos varios ejemplos y comprobaremos escribiendo dichas lineas en Python como funciona:

  • Crearemos la variable «MiDeporte» con nuestro deporte favorito e imprimiremos su contenido por pantalla:

MiDeporte = «Dormir»

print (MiDeporte)

  • Cambiaremos el valor de la variable «MiDeporte» asignando otro deporte que también nos guste:

MiDeporte = «Comer»

print (MiDeporte)variables0

Las variables pueden cambiar de valor y nos permitirán almacenar temporalmente información para su uso en cálculos y otras operaciones que puedan resultar interesantes en nuestro programa.

A continuación mostraremos varios ejemplos muy sencillos con cálculos matemáticos:

  • Suma de variables:

a = 1

b = 3

a + bvariables1

  • Suma de variables, almacenamiento de resultado en otra variable e impresión de resultado:

a = 4

b = 7

c = a + b

print (c)variables2

En los siguientes ejemplos retomaremos las variables de tipo texto y mostraremos como aplicar modificaciones sobre ellas:

  • Concatenar textos, ¿pero qué es concatenar?, es simplemente unir dos textos en uno único. Para concatenar dos textos y unificarlos usaremos el símbolo «+» entre ambos textos como si de una suma se tratara. En el siguiente ejemplo almacenaremos nuestro nombre y apellidos en dos variables distintas y concatenaremos ambas para obtener nuestro nombre completo:

MiNombre = «Guillermo»

MiApellido = «Martínez Nuñez»

MiNombreCompleto = MiNombre + MiApellido

print (MiNombreCompleto)

variables3

Nota: ¿Por qué este resultado tan chungo?, pues por que no tuvimos en cuenta que entre el nombre y nuestro apellido es necesario un espacio. Para solucionar este problema podríamos concatenar un espacio (solución más limpia) o bien asegurarnos de dejarlo preparado en cualquiera de nuestras variables (solución más chapucilla).

Solución 1:

MiNombre = «Guillermo»

MiApellido = «Martínez Nuñez»

MiNombreCompleto = MiNombre + » » + MiApellido

print (MiNombreCompleto)

variables4

Solución 2:

MiNombre = «Guillermo » ⇐ ¡Ojo que aquí hemos guardado en la variable un espacio al final del nombre!

MiApellido = «Martínez Nuñez»

MiNombreCompleto = MiNombre + MiApellido

print (MiNombreCompleto)

  • Uso de comillas: En ocasiones nos encontraremos con la necesidad de insertar comillas simples o dobles en un texto, no obstante, podríamos encontrar problemas ya que los textos en si se definen con comillas.  Aquí os dejamos posibles soluciones u opciones para solventar estos casos:

Opción 1: Para el uso de comillas dobles dentro de textos definiremos el contenido general del texto comillas simples, eso si, si también necesitamos usar comillas simples estas deberán estar precedidas del símbolo «\«.

VariableTexto = ‘Mi nombre es «Guillermo» y mi apellido \’Martínez Nuñez\’ ¿cómo estás?

print (VariableTexto)

variables5

Opción 2: Para el uso de comillas simples dentro de textos definiremos el contenido general del texto entre comillas dobles como es común, sin embargo, si también necesitamos usar dicho carácter en nuestro texto éste deberá estar precedido del símbolo «\«.

VariableTexto = «Mi nombre es Guillermo y mi apellido ‘Martínez Nuñez’ ¿cómo estás?«

print (VariableTexto)

variables6

  • Insertar variables en textos: En nuestros proyectos necesitaremos concatenar o insertar resultados de cálculos en textos para informar del resultado en una única línea, de este modo haremos más legible y comprensible para el usuario el resultado. Para dicha inserción seguiremos dos pasos:

Paso 1: Crearemos una variable de texto e insertaremos el símbolo «%s» allí donde deseemos que se aplique la sustitución.

MiNota = 9

TextoConMiNota = «La nota del alumno es %s en Matemáticas»

Paso 2: Imprimiremos el texto a través de la función print e indicaremos que variable reemplazará al símbolo «%s» definido en el paso 1 con el símbolo «%» antes de la variable y aún dentro del paréntesis del print. Es necesario prestar especial atención a la forma en que es informada la variable de sustitución.

print (TextoConMiNota % MiNota)

variables7

A continuación mostraremos dos ejemplos que esperamos faciliten la comprensión de este tipo de sustituciones:

Ejemplo 1: Almacenaremos las notas de un alumno y mostraremos una a una por pantalla.

NotaMates = 9

NotaQuimica = 10

TextoNotaMates = «La nota del alumno es %s en  Matemáticas.»

TextoNotaQuimica = «La nota del alumno es %s en Química.»

print (TextoNotaMates % NotaMates)

print(TextoNotaQuimica % NotaQuimica)

variables8

Ejemplo 2: Almacenaremos las notas del alumno y mostraremos todas en una única línea.

NotaMates = 9

NotaQuimica = 10

TextoNotasGeneral = «La nota del alumno es %s en  Matemáticas. y %s en Química.»

print (TextoNotasGeneral % (NotaMates, NotaQuimica))

variables9

 

Esperamos que os haya gustado el artículo!

Listado de artículos relacionados:

Artículo 1: Introducción
Artículo 2: Operadores
Artículo 3: Variables
Artículo 4: Tipos de datos
Artículo 5: Sentencias de Control (1)
Artículo 6: Sentencias de Control (2)

logo_sexy

Python (Parte 1) – Operadores

por | 22 mayo, 2016

En este artículo explicaremos que son los Operadores y su modo de empleo. Los operadores son una de las bases más importantes en todo lenguaje de programación y es imprescindible tener claro su modo de empleo.

Un operador no es otra cosa que el modo de expresar o indicar a nuestro ordenador o Raspberry Pi que operación deseamos llevar a cabo, es decir, será la forma en que informaremos a nuestra máquina que tipo de cálculo (sumar, restar, multiplicar,..) o comprobación queremos realizar en un modo que pueda entender.

Todos los lenguajes utilizan operadores, así pues, una vez aprendamos un lenguaje simple nos resultará más sencillo dar el salto a otros más complejos (Java, Visual Basic,…).

Recomendamos en nuestro aprendizaje inicial evitar dolores de cabeza del estilo Matrix (accesos a memoria, buffers, condensadores de fluzo,…) y pensar que la finalidad de todo lenguaje de programación no es otra que recibir datos, tratar/transformar datos, buscar datos y mostrar datos (así de sencillo :D). Cada lenguaje lo hará de una forma u otra pero la finalidad será la misma ya hablemos de Python, Java, Android, JavaScript, PHP, RoR, Elfico, C++ o el lenguaje que sea.

Los operadores son agrupados o tipificados del siguiente modo dependiendo básicamente de su utilidad final:

1. Operadores aritméticos: Los operadores aritméticos nos permiten hacer cálculos de todo tipo (Sumar, restar,…) y su uso es prácticamente imprescindible en cualquier programa que vayamos a crear. En la siguiente tabla mostraremos los distintos operadores aritméticos disponibles, su modo de empleo y un ejemplo.

Tipo Símbolo Descripción Expresión Ejemplo Resultado
Suma + Sumará números en el orden de declaración Numero1 + Numero2 3+2 5
Resta Restará números en el orden de declaración Numero1 – Numero2 3-2 1
Multiplicación * Multiplicará números en el orden de declaración Numero1 * Numero2 3*5 15
División / Dividirá números en el orden de declaración Numero1 / Numero2 16/2 0
Módulo % Devolverá el resto después de dividir el primer operando por el segundo Numero1 % Numero2 5%2 1


2. Operadores de comparación
: Estos operadores nos permitirán comparar números, textos o caracteres,… para posteriormente condicionar el comportamiento de nuestro programa conforme al resultado de dicha comparación, es decir, en un casos prácticos podremos tomar decisiones conforme a edades, importes, textos,…

Es importante tener presente que el resultado final de estas comparaciones será True (Verdadero) o False (Falso), es decir, si introducimos 3>2 estaremos preguntado si el número 3 es mayor que el número 2 al ser una verdad recibiremos como resultado de respuesta el valor True.

Tipo Símbolo Descripción Expresión Ejemplo Resultado
Mayor > Compara si el primer valor es mayor que el segundo Valor1 > Valor2 3 > 2 True
Mayor o igual >= Compara si el primer valor es mayor o igual al segundo Valor1 >= Valor2 3 >= 2 True
Menor < Compara si el primer valor es menor que el segundo Valor1 < Valor2 2 < 1 False
Menor o igual <= Compara si el primer valor es menor o igual que el segundo Valor1 <= Valor2 1 <= 2 True
Igual == Compara si ambos valores son iguales Valor1 == Valor2 «Hola» == «Hola» True
Distinto != Compara si ambos valores son distintos Valor1 != Valor2 «Hola != «Adios» True


3. Operadores lógicos
: Los operadores lógicos, en conjunto con operadores de comparación, nos permitirán unificar distintas comparaciones y en una única expresión y obtener un único resultado. A efectos prácticos podríamos por ejemplo validar si un número es mayor que 10 y divisible entre 2 en una única línea. Al igual que en operadores de comparación, el resultado de los operadores lógicos será True (Verdadero) o False (Falso) y tomaremos nuestras decisiones a partir de dicho resultado de respuesta.

Tipo Símbolo Descripción Ejemplo Resultado
Conjunción (AND) && Unifica comparaciones en una expresión condicional indicando que ambas deben cumplirse True && True True
Disyunción (OR) || Unifica comparaciones en una expresión indicando que al menos una de ellas debe ser verdadera True || False True
Negación (NOT) ! Esta validación únicamente se cumplirá si el resultado de la expresión de comparación no es verdadero True False

Los operadores lógicos pueden llevar a confusión y errores en el funcionamiento esperado de nuestro programa si no son correctamente declarados, así pues, para evitar futuros quebraderos de cabeza y derrames cerebrales en nuestros lectores adjuntaremos tablas con ejemplos de las posibles situaciones que encontraríamos en una caso real.

3.1. Operador lógico AND

Valor X Valor Y Resultado
True True True
True False False
False True False
False False False


3.2. Operador lógico OR

Valor X Valor Y Resultado
True True True
True False True
False True True
False False False


3.3. Operador lógico NOT

Valor X Resultado
True False
False True


4. Operadores de asignación: 
Estos operadores nos permitirán asignar y almacenar valores en variables, es de decir, podremos llevar a cabo sencillas asignaciones como «a = 1«, cálculos básicos como «a = b + c» o cálculos tan complejos como consideremos necesario. Los operadores de asignación disponibles en Python son los siguientes:

Operador Descripción Ejemplo Resultado
= «igual a» es el operador más común y asignará a la variable de la izquierda el valor de la derecha a = 1 1
+= Suma a la variable del lado izquierdo el valor del lado derecho a += 4 Valor original de ‘a’ más 4
-= Resta a la variable del lado izquierdo el valor del lado derecho a -= 5 Valor original de ‘a’ menos 5
*= Multiplica a la variable del lado izquierdo el valor del lado derecho a *= 3 Valor original de ‘a’ por 3


5. Operadores especiales
: Existen otro tipo de operadores menos comunes y con menor uso, no obstante, explicaremos un poco como funcionan por evitar dejar cabos sueltos y por que quien sabe si a alguien en un caso concreto le podrían resultar útiles.

Nota: Tengamos en cuenta que los valores de ejemplo de las variables en las siguiente tabla es «a = 1«, «b = 5» y «c=[1,2,3,4]» ⇐ Una variable que contiene un conjunto de números, que no se asuste nadie pues se explicará en el siguiente artículo.

Operador Descripción Ejemplo Resultado
is Compara los valores de ambos lados y devuelve True si son idénticos a is b False
is not Compara los valores de ambos lados y devuelve True si son distintos a is not b True
in Compara el valor de la izquierda con un conjunto de valores y devuelve True si dicho valor se encuentra contenido en el conjunto a in c True
not in Compara el valor de la izquierda con un conjunto de valores y devuelve True si dicho valor no se encuentra contenido en el conjunto b not in c True

 

Esperamos que os haya gustado nuestra explicación, en próximos artículos será cada vez más y más interesante 😀

Listado de artículos relacionados:

Artículo 1: Introducción
Artículo 2: Operadores
Artículo 3: Variables
Artículo 4: Tipos de datos
Artículo 5: Sentencias de Control (1)
Artículo 6: Sentencias de Control (2)

logo_choco

Configuración inicial de Kodi (Parte 1)

por | 14 mayo, 2016

Sobre la plataforma Kodi existen una gran variedad de add-ons o extensiones del mismo, la intalación de estas extensiones dependerán del gusto de cada cual y del uso que tengamos pensado dar a nuestro servidor multimedia o media center. Para comenzar nuestro aprendizaje en Kodi configuraremos algo tan básico como el acceso a archivos multimedia (películas, música, fotos,…) almacenados en otro dispositivo (portátil, disco duro,…) de nuestra misma red.

Tras instalar Kodi el menú básico constará de las siguientes secciones:

  • Pictures: Esta sección nos permitirá acceder a carpetas de fotografías de nuestra red para mostrarlas por ejemplo a modo diapositiva.
  • Video: Esta sección nos resultará mucho mas interesante, en ella podremos acceder a vídeos o películas de otros dispositivos unificándolas en una única lista.
  • Music: Al igual que en la sección de vídeo podremos organizar toda nuestra música en un único punto de la casa.
  • Programs: En esta sección tendremos acceso a multitud de aplicaciones, encontraremos aplicaciones para copias de seguridad, reproductores de TV online, bibliotecas de libros, chats,…
  • System: Este es el corazón del sistema, aquí podremos configurar la apariencia, opciones de vídeo y audio, activación de add-ons,…

Nota: Dependiendo de la versión y el dispositivo donde esté instalado es posible que aparezca algún menú adicional como «Play Disc».

imagenconfigkodi1

Comenzaremos nuestra configuración accediendo a carpetas de otros dispositivos de nuestra red donde tendremos almacenados vídeos, para ello seguiremos los siguientes pasos:

1. Acceder a sección de vídeo: Como comentábamos, esta sección filtrará el contenido mostrando únicamente ficheros de vídeo y nos permitirá organizarlos más o menos al gusto.

imagenconfigkodi2

2. Agregar archivos: Entre las opciones disponibles seleccionaremos «Files«, las opciones restantes nos permitirán agregar listas reproducción y add-ons, no obstante, no nos interesan de momento.

imagenconfigkodi3

3. Añadir vídeos: Por defecto esta será la única opción en este paso, para continuar pulsaremos sobre «Add videos«.

imagenconfigkodi4

4. Selección de rutas de ficheros: Será mostrada la siguiente ventana donde iniciaremos la búsqueda de la carpeta donde almacenamos nuestras películas o videos. En este paso pulsaremos el botón «Browse«.

imagenconfigkodi5

5. Selección de unidad o modo de compartir ficheros: Existen múltiples modos de compartir ficheros en una red, las opciones más comunes serán el acceso directo a carpetas compartidas, el acceso a través de servidores UPnP (por ejemplo un NAS en casa) o bien a través de Samba (SMB) que es un método por el cual los dispositivos con Linux tienen acceso a carpetas de dispositivos Windows y viceversa. En nuestro caso lo haremos sencillo y seleccionaremos una capeta local en la unidad C:/Películas.

Nota: Imaginamos que sonará chocante hablar de unidad C: cuando este manual es sobre Raspberry Pi y Openelec, así pues, debemos aclarar que estas capturas de pantalla y el ejemplo se extrajeron de un ordenador Windows con Kodi para hacer más llevadero el manual 😛

imagenconfigkodi6

imagenconfigkodi7

Nota: Tras seleccionar la ruta veremos que no es mostrado ningún listado de películas o archivos en su interior, no os preocupéis por ello pues lo que estamos en este punto es simplemente indicando la ruta donde almacenaremos nuestras películas y nada más.

imagenconfigkodi8

6. Añadir origen de vídeos: En este paso indicaremos el nombre o identificador que deseamos dar a este origen de ficheros, en nuestro caso mantenemos el nombre «Películas», sin embargo, si tenemos distintos dispositivos en nuestra red podríamos ser más específicos indicando como parte del nombre también el origen, un ejemplo podría ser «Películas_Portátil_Pedro».

imagenconfigkodi9

7. Selección de tipo de contenido: Tras agregar la carpeta, será mostrada una ventana donde especificaremos el tipo de contenido de dicha carpeta, en nuestro caso seleccionaremos las opciones marcadas en la siguiente imagen. Antes de aceptar esta configuración recomendamos pulsar el botón «Settings» y modificar los idiomas a usar por defecto con valor «es«.

imagenconfigkodi14

imagenconfigkodi10

8. Confirmación de selección y refresco: Tras finalizar el punto anterior será mostrada una ventana emergente de confirmación donde pulsaremos «Yes«, esta acción finalizará la configuración y buscará en nuestro caso todos los vídeos almacenados sobre la carpeta C:/Películas.

imagenconfigkodi11

9. Listados de carpetas y películas: Automáticamente será creada una carpeta con el nombre «Películas» tal como configuramos en el paso 6.

imagenconfigkodi12

10. Hacer palomitas y a disfrutar!: Ya tendremos nuestro listado de películas listo y solo faltará sentarse en el sofá y disfrutarlas. Si tenemos conexión a Internet y el nombre de la película es reconocible será descargada automáticamente tanto la caratula como la sinopsis de dicha película.

imagenconfigkodi13

En la siguiente parte de este manual configuraremos el menú para eliminar botones innecesarios (Pictures,…) y centrarnos en reproducir películas y música a través de un un selector a modo videoclub.logo_sexy

Servidor de impresión con Raspberry Pi (Raspbian)

por | 13 mayo, 2016

En este tutorial configuraremos un servidor de impresión en nuestra Raspberry Pi, este servidor gestionará las impresoras de nuestra red y permitirá enviar solicitudes de impresión desde cualquier dispositivo conectado dicha red. Nuestra Raspberry Pi centralizará la cola de impresiones recibidas, comunicará a la impresora el orden de llegada y dará visibilidad de la misma al resto de dispositivos como si estuviera conectada a cada uno de ellos ¿¡No es genial!? 😀

Es posible que en ciertos casos no merezca la pena la inversión económica en una Raspberry Pi si disponemos de impresoras con opción de conexión a red a través de cable RJ45 o Wifi, sin embargo, si será de utilidad, tanto en nuestra red de casa como en oficinas, si queremos dar un mejor uso (o simplemente uso) a impresoras limitadas a conexión USB.

Requisitos iniciales:

Raspberry Pi: Cualquier modelo debería soportar este tipo de trabajos, no obstante, a más actual sea el modelo con más fluidez trabajará en la gestión de colas de impresión.

Sistema operativo Raspbian: Recomendamos la instalación de este sistema operativo por su nivel de compatibilidad y bajo consumo de recursos. Encontraréis un manual de instalación en el artículo «Instalación y Configuración (Parte 1)» de este portal.

Conexión USB a nuestra impresora: Nuestra Raspberry Pi deberá estar conectada a través de conexión USB a la impresora de destino.

Para gestionar las impresoras, colas, errores,… de un modo sencillo haremos uso de la aplicación CUPS (C Unix Prining System), esta aplicación nos ofrecerá una interfaz gráfica bastante sencilla donde agregar nuevas impresoras, asignar un nombre con el cual identificarlas en nuestra red , gestionar privilegios de usuarios,…

Para la instalación de CUPS seguiremos los siguientes pasos:

1. Instalación de CUPS en Raspbian: Abriremos un nuevo terminal o consola de comandos y escribiremos el siguiente comando sudo apt-get install cups

2. Creación de usuario administrador: Es recomendable crear un nuevo usuario administrador así como modificar la contraseña de nuestro usuario pi. El usuario administrador por defecto en instalaciones Raspbian es pi y su contraseña raspberry, si mantenemos esta configuración en una red de oficina cualquier usuario o agente con un mínimo de conocimientos en informática podría hacernos un destrozo, así pues, recomendamos mejorar ligeramente la seguridad siguiendo los pasos definidos en el manual «Gestión de usuarios en Raspberry Pi (Raspbian)«.

3. Asignación de administración CUPS: Para asignar el permiso de administración en CUPS a un usuario concreto ejecutaremos el siguiente comando sudo usermod -aG lpadmin NombreUsuario

Nota: Podremos encontrar más información referente a lpadmin en es siguiente enlace lpadmin8.

4. Asignación de IP estática a Raspberry Pi: Para evitar reconfigurar el servidor tras un reinicio de nuestra Raspberry Pi recomendamos asignar una IP fija a la misma. Encontraréis más información en el siguiente artículo «Asignación de IP estática en Raspberry Pi» de nuestro portal.

5. Habilitar acceso remoto a CUPS: Será preciso modificar ciertos parámetros en la configuración de CUPS para dar visibilidad desde otros dispositivos a nuestra Raspberry Pi. Para habilitar el acceso remoto seguiremos los siguientes pasos:

5.1. Copia de seguridad de fichero de configuración: Antes de comenzar la modificación recomendamos crear una copia de seguridad usando el comando sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.backup

5.2. Modificación de fichero /etc/cups/cupsd.conf: Modificaremos el fichero de configuración CUPS ejecutando el comando sudo nano /etc/cups/cupsd.conf

El contenido por defecto será:

impresoras1

En nuestro caso de ejemplo nos encontramos en la red local 192.168.0.XX y la IP de nuestra Raspberry es IP es 192.168.0.102, así pues, adaptaremos el acceso para que CUPS sea visible para todos los dispositivos dentro de esa subred

ServerAdmin admin@chocolatesexyconsulting.es #Dirección de correo electrónico del usuario administrador
Listen 127.0.0.1:631 # existing loopback Listen
Listen /var/run/cups/cups.sock # existing socket Listen
Listen 192.168.0.102:631 # Listen on the LAN interface, Port 631 (IPP) #IP de servidor de impresión Raspberry Pi
Port 631 # Puerto de escucha en Raspberry Pi

#Acceso a dispositivos en la misma red a localización de servidor de impresión
<Location />
Order Deny,Allow
Deny From All
Allow From 192.168.0.*
</Location>

#Restricción de acceso a administración de servidor de impresión a usuario administrador
<Location /admin>
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 192.168.0.*
</Location>

Nota: Encontraremos interesantes opciones de configuración adicionales en los siguientes enlaces:
help.ubuntu.com
www.cups.org
ExampleCUPSD

5.3. Guardar fichero de configuración: Para guardar los cambios efectuados pulsaremos las teclas Ctrl + X simultáneamente, aceptaremos el cambio pulsan Y y cerraremos el editor pulsando la tecla Intro.

5.4. Reinicio de servidor: Para aplicar los cambios recientes necesitaremos reiniciar el servidor de impresión ejecutando el siguiente comando sudo service cups restart

6. Acceso a menú de administración CUPS: Accederemos al menú de control de CUPS a través de cualquier explorador (internet Explorer, chrome, Firefox,…) usando la URL resultante de unir la IP de nuestra Raspberry y el puerto 631, es decir, si la IP de nuestra Rasp es 192.168.0.102 insertaremos en el explorador el texto 192.168.0.102:631

Nota: Para obtener la IP de nuestra Raspberry recomendamos leer el artículo «»Asignación de IP estática en Raspberry Pi«» de nuestro portal.

impresoras2

7. Configuración final: Para configurar finalmente nuestro servidor e impresoras llevaremos a cabo los siguientes pasos:

7.1. Navegación a Administración: En esta sección de administración introduciremos el usuario/contraseña de nuestro administrador y pulsaremos «Añadir Impresora«.

impresoras3

7.2. Selección de tipo de impresora: En este punto seleccionaremos la impresora local conectada a nuestra Raspberry Pi.

impresoras4

7.3. Selección de conexión de impresora: En este punto indicaremos la dirección del servidor de impresión, e nuestro caso http://192.168.0.102:631

impresoras5

7.4. Inserción de datos generales de impresora: Configuraremos en esta ventana el nombre con el cual será visible la nueva impresora así como su descripción, ubicación y la opción de compartir dicha impresora en red (¡es importante marcar esta opción!).

impresoras6

7.5. Selección de marca de impresora:

impresoras7

7.6. Selección de modelo de impresora:

impresoras8

7.7. Selección de opciones predeterminadas: Este paso nos permitirá especificar reglas de impresión a aplicar por defecto.

impresoras9

7.8. Confirmación de configuración:

impresoras10

7.9. Información de impresora: En este último apartado obtendremos información de los trabajos realizado por la nuestra impresora en red así como los trabajos en curso o pendientes.

impresoras11

Enlaces de interés: geekytheory.com

Esperamos que este manual os sea de ayuda! 😀

logo_late

Configuración Wifi en Raspberry Pi (Raspbian)

por | 12 mayo, 2016

En este artículo os enseñaremos como conectar nuestra Raspberry Pi a una red Wifi a través de un adaptador Wifi USB. El mayor inconveniente que en este proceso es la limitación de adaptadores o receptores Wifi USB compatibles con Raspberry Pi, así pues, antes de empezar nos aseguraremos de adquirir un adaptador de los listados en el siguiente enlace RPi_VerifiedPeripherals o bien cruzaremos los dedos por que sea compatible el que tenemos en casa 😛

Nota: En el caso del modelo Raspberry Pi 3 no será necesario un adaptador pues ya posee un receptor Wifi integrado en la propia placa 🙂

Para llevar a cabo la configuración seguiremos los siguientes pasos:

1. Pre-Instalación: Antes de comenzar, es recomendable conectar nuestra Raspberry con cable de red RJ45 y actualizar el sistema operativo para, si resulta posible, descargar y activar el gestor Wifi de Raspbian. Una vez conectado por cable RJ45 abriremos un terminal y ejecutaremos los comando sudo apt-get update y sudo apt-get upgrade

En caso de no disponer de este gestor recomendamos aplicar los pasos disponibles en el siguiente enlace www.raspberrypi.org. Resumiremos estos pasos en este mismo punto de preinstalación:

1.1. Búsqueda de redes Wifi: Sobre un terminal ejecutaremos el siguiente comando sudo iwlist wlan0 scan

1.2. Comprobación de USB Wifi: Existe la posibilidad de no encontrar el dispositivo en el paso anterior, esto puede ser debido a que no se ha reconocido el USB, así pues, recomendamos no desesperar y conectar de nuevo el receptor USB Wifi en otra toma USB.

1.3. Edición de fichero /etc/wpa_supplicant/wpa_supplicant.conf: Modificaremos el fichero este fichero a través del siguiente comando sudo nano /etc/wpa_supplicant/wpa_supplicant.conf en un terminal. El contenido de este fichero debería ser semejante al mostrado a continuación:

network={
ssid=»Nombre_de_nuestra_Wifi»
psk=»Contraseña_de_Wifi»
}

1.4. Reinicio de conexión Wifi: Para asegurar este último cambio reiniciaremos el servicio de recepción Wifi ejecutando en un terminal los comandos sudo ifdown wlan0 para parar el servicio y sudo ifup wlan0 para iniciarlo de nuevo.

2. Edición de fichero /etc/network/interfaces: Ejecutaremos el comando sudo nano /etc/network/interfaces en un terminal y editaremos el fichero para que el resultado final sea semejante al siguiente:

auto lo
iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0

iface wlan0 inet dhcp
wpa-ssid «Nombre_de_nuestra_Wifi»
wpa-psk «Contraseña_de_Wifi»

3. Reinicio de sistema: Una vez modificado el fichero reiniciaremos el sistema ejecutando el comando sudo shutdown -r now en un terminal.

4. Comprobación final de conexión: En nuestro menú abriremos un navegador de Internet y buscaremos una página web como www.google.es o una gran web de manuales como www.chocolatesexyconsulting.es 😛

Esperamos que este manual os sirva de ayuda!

logo_choco

Gestión de usuarios en Raspberry Pi (Raspbian)

por | 12 mayo, 2016

La seguridad es un punto muy importante en redes compartidas como oficinas, redes públicas,… y el primer paso para protegernos es la correcta gestión de nuestros usuarios y contraseñas. En este artículo os enseñaremos a crear nuevos usuarios, cambiar contraseñas y asignar permisos de lectura y escritura a los mismos sobre carpetas y ficheros.

1. Creación de usuario: Para crear un nuevo usuario ejecutaremos el comando sudo adduser userpi1 donde «userpi1» es el nombre de usuario a crear. Una vez ejecutado el comando se solicitarán datos del mismo como contraseña, nombre,…

GestUser1

2. Cambio de contraseña: Para modificar la contraseña del usuario «userpi1» ejecutaremos el siguiente comando sudo passwd userpi1GestUser2

3. Asignación de permisos de administración: Un nuevo usuario no tendrá por defecto permisos de administración, así pues, si
deseamos ampliar sus privilegios a nivel de administrador deberemos seguir los siguientes pasos:

3.1. Login con usuario administrador pi: Únicamente un usuario administrador podrá otorgar permisos de administrador a un usuario estándar.

3.2. Modificación de usuarios sudo: Para asignar permiso de administración el usuario deberá estar incluido en una lista interna, esta lista se modificará ejecutando el comando sudo visudo e incluyendo la siguiente línea:

userpi1 ALL=(ALL) NOPASSWD: ALL

GestUser33

Nota: Para guardar el contenido del fichero pulsaremos las teclas Clrl + X simultáneamente. Tras solicitar el guardado aceptaremos los cambios pulsando Y e intro para salir del editor de texto.

3.3. Prueba de usuario «userpi1» como administrador: Haremos login con el usuario «userpi1» ejecutando el comando su userpi1 y ejecutaremos el comando sudo apt-get update. Confirmaremos que los privilegios se han aplicado correctamente si no recibimos por pantalla ningún mensaje de error.

4. Bloqueo de usuario: En caso de querer aplicar un bloqueo temporal del usuario «userpi1» ejecutaremos el comando sudo usermod -L userpi1

Nota: Usando este método bloquearemos el acceso o cuenta de usuario sin llegar a borrarlo. Si intentamos hacer login con dicho usuario bloqueado recibiremos el siguiente mensaje:

GestUser4

5. Desbloqueo de usuario: Si deseamos desbloquear un usuario previamente bloqueado ejecutaremos el comando sudo usermod -U userpi1

6. Borrado de usuario: Para eliminar el usuario «userpi1» ejecutaremos el comando sudo deluser userpi1

GestUser5

Nota: Si deseamos eliminar también el contenido disponible en la carpeta /home/userpi1 del usuario ejecutaremos el comando sudo deluser –remove-home userpi1

Esperamos que os haya gustado el manual y os sirva de ayuda! 😀logo_sexy