miércoles, 27 de septiembre de 2017

Generación de números primos en Python

Puede descargar el archivo: primos.py

Veamos diferentes métodos para calcular números primos en Python.


Método 1

Creamos dos funciones, la primera detecta si un número es primo o no, y la segunda crea un listado de números primos hasta 100.

#Función que detecta si un número es primo
import math
def esPrimo(num):
 for i in range(3,int(math.sqrt(num))+1,2):
  if num%i==0:
   return False
 return True
def listaPrimos(limite):
 print(2)
 for j in range(3,limite+1,2):
  if esPrimo(j):
   print(j)
listaPrimos(100)

La expresión if num%i==0 también se puede sustituir por la expresión if num/i%1==0 que hace el mismo trabajo.

Para optimizar el algoritmo los bucles únicamente trabajan con los impares, ya que salvo el 2, todos los demás primos son impares.
Otra forma de optimizar el algoritmo consiste en hacer que el bucle interior que detecta si un número es primo calcule el resto de dividir ese número entre todos los anteriores pares únicamente hasta la raíz cuadrada de ese mismo número. Esto es así ya que si llegamos dividiendo hasta la raíz cuadrada de ese número y no hemos encontrado ninguna división exacta, superada la raíz cuadrada ya es imposible que encontremos esa división exacta.

Método 2

Crear una lista de números primos y añadir el siguiente con append.

import math
lista=[2,]
for i in range(3,100, 2):
 soy=True #inicialmente suponemos que el número es primo
 for j in range(3,int(math.sqrt(i))+1,2):
  if i%j==0:
   soy=False
 if soy:lista.append(i)
print(lista)

Método 3

Este método es muy similar al anterior pero más corto ya que nos ahorramos crear la variable booleana soy, y trabajar al final con ella en un if. Lo que hacemos en este caso es usar solo el primer if con un break y luego un else con una indentación sorprendente.

lista=[2,]
for i in range(3,100,2):
 for j in range(3,int(i**.5)+1,2):
  if i%j==0:
   break
 else:         # else del for
  lista.append(i)
print(list(lista))

Método 4

Este método es similar al anterior pero no usa una lista, simplemente imprime los resultados separados por coma.

print(2, end = ',')
for i in range(3,150,2):
 for j in range(3,int(i**.5)+1,2):
  if i%j==0: break
 else: print(i, end = ',')

Método 5

Usando un generador con yield.

#Método 4
from math import sqrt
def esPrimo(n):
 for i in range(3,int(sqrt(n))+1,2):
  if n%i==0:
   return False
 return True
def generaPrimos(n):
 for i in filter(esPrimo, range(3,n+1,2)):
  yield i
print(2)
for i in generaPrimos(100):
 print(i)

Podemos sustituir la expresión if n%i==0: por esta otra if not(n%i):. El motivo de que podamos hacer esta sustitución y todo continúe funcionando bien es que si una expresión es cero se interpreta como False y si es uno (u otro número) se interpreta como True.
Se utiliza la expresión filter.

Método 6

Con dos funciones, la primera detecta si un número es primo o no, la segunda va preguntando por los primos en un cierto rango y si resultan ser primos los anota en una lista. Finalmente se imprime la lista.

def isPrime(n):
 for x in range(2, int(n**0.5)+1):
  if n % x == 0:
   return False
 return True

def primeList(n):
 primes = [2,]
 for i in range(3,n,2):
  if isPrime(i):
   primes.append(i)
 return primes
print(primeList(100))

martes, 26 de septiembre de 2017

Palíndromos en una frase

Puede descargar el archivo: palindromos.py

Un palíndromo es una palabra capicúa, esto es, que se lee igual de izquierda a derecha que de derecha a izquierda. Por ejemplo, radar.

Vamos a crear un código en Python que detecta palíndromos en una frase y que luego los imprime en pantalla.

 #Detectar palindromos en una frase e imprimirlos  
 frase="El señor Uruburu contruyó un radar. Ana, que tiene buen ojo, le dijo que ni con todo el oro del mundo le haría funcionar porque no tenía rotor. Uruburu tardó en reconocer su error."   
 #Primero quitamos todos los puntos y comas. Dejamos solo letrs y espacios.  
 def limpia(texto):  
  limpio=''  
  for i in frase:  
   if i!="." and i!=",":  
    limpio+=i  
  return limpio  
 limpiado=limpia(frase)     
 #Creamos una lista con todas las palabras.  
 lista=limpiado.split()  
 #Función que detecta si una palabra es o no un palíndromo  
 def soyPalindromo(palabra):  
  palabra=palabra.lower()  
  soy=True #inicialmente suponemos que si es un palíndromo  
  n=len(palabra)  
  if n%2==0: #número par de letras en la palabra  
   for i in range(int(n/2)):  
    if palabra[i]!=palabra[n-i-1]:  
     soy=False  
  else: #número impar de letras  
   for i in range(int((n-1)/2)):  
    if palabra[i]!=palabra[n-i-1]:  
     soy=False  
  return soy  
 #Pasamos todas las palabras de la lista por la función que detecta si son palíndromos  
 #Si se trata de un palindromo lo imprime en pantalla  
 for palabrita in lista:  
  if soyPalindromo(palabrita):  
   print(palabrita)  


Invertir el orden de una cadena alfanumérica en Python

Puede descargar el archivo: cadena_inversa.py

Dada una cadena alfanumérica devuelve su inversa. Lo que hace es cambiar de orden los caracteres del string.

Método 1

Esta es, posiblemente, la forma más rápida de invertir una cadena.

#Método 1  
miCadena="La contraseña es abracadabra"  
def invierte1(cadena):  
 return cadena[::-1]  
print(invierte1(miCadena))  


Método 2

Creamos un bucle for y recorremos todos los elementos de la cadena de principio a fin, poniendo cada elemento al final.

#Método 2  
miCadena="Radar o no radar"  
def invierte2(cadena):  
 inversa=""  
 for i in cadena:  
  inversa=i+inversa  
 return inversa  
print(invierte2(miCadena))  

Método 3

Creamos un for que va hacia atrás recorriendo todos los elementos del string.

#Método 3  
miCadena="Esto es Troya"  
def invierte3(cadena):  
 inversa=""  
 for i in range(len(cadena),0,-1):  
  #print(i) imprimiría del 5 al 1, por eso luego restamos 1  
  inversa+=cadena[i-1]  
 return inversa  
print(invierte3(miCadena))  

Método 4

Usando un for recorremos todos los elementos de la cadena.

#Método 4  
miCadena="El maestro Uruburu"  
def invierte4(cadena):  
 invertida=''  
 for i in cadena:  
  invertida=i+invertida  
 return invertida  
print(invierte4(miCadena))  


Una variante: Invertir las letras de cada palabra de una frase sin cambiar de orden las palabras

Si queremos invertir el orden de las letras de cada palabra dentro de una frase pero sin cambiar de orden las palabras utilizando el siguiente código conseguiríamos este cambio en la frase:

amigos esto es magia  🡢  sogima otse se aigam

mi_frase="amigos esto es magia"  
frase=mi_frase.split()  
def invierte(cadena):   
 return cadena[::-1]  
frase_inversa=[]  
for palabra in frase:  
 frase_inversa.append(invierte(palabra))  
print(' '.join(frase_inversa))  

Sumar los elementos de una lista en Python

Puede descargar el archivo: suma_lista.py

Vamos a crear una función que sume los elementos de una lista, y también aprovecharemos para hacer el producto de sus elementos, y así multiplicar en la misma función.

#Crear una función suma que sume los elementos de una lista.  
#Crear también una función que multiplique  
miLista=[1,2,3,4]  
def sumaProducto(lista):  
 s,p=0,1 #inicializamos el valor de la suma y el producto  
 for i in lista:  
  s+=i  
  p*=i  
 print("La suma es %i y el producto es %i"%(s,p))  
print(miLista)  
sumaProducto(miLista)  


domingo, 24 de septiembre de 2017

Generador de números aleatorios

Puede descargar el archivo: generador_aleatorio.py

Veamos un ejemplo de un generador de números. Creamos una función que no usa return. Lo que hace un generador es usar yield. Esto permite generar los valores de uno en uno, a medida que se van pidiendo.

Ejemplo 1


#Ejemplo de un Generador en Python  
#Primero, veamos un caso que genera del 0 al max que digamos  
def contador(max):  
 n=0  
 while n<=max:  
  yield n  
  n+=1  
mycont=contador(5) #mycont es un objeto iterable    
for i in mycont: #recorremos el objeto iterable  
 print(i)  
#print(mycont)  

Ejemplo 2


#Segundo, generamos n números aleatorios entre 0 y 100, ambos incluidos  
import random  
def generaRandom(n):  
 for i in range(n+1):  
  yield random.randint(1000,2001)  
alea=generaRandom(10)  
for j in range(1,10+1):  
 print(j,":",end='')  
 print(next(alea))  


Generador de pares

Puede descargar el archivo: generadorPares.py

Veamos la diferencia que existe entre una función normal de Python y un generador. Vamos a verlo con un ejemplo donde pretendemos generar números pares. Primero usaremos una función normal que tiene su return. Luego usaremos un generador que no usa return sino que usa yield.

Función


#Función: imprimir los pares hasta un cierto valor  
def generaPares(limite):  
 n=1 #contador  
 lista=[]  
 while n<=limite:  
  lista.append(n*2)  
  n+=1  
 return lista  
pares=generaPares(10) #pares es un iterador, en este caso es una lista  
#un iterador es un objeto iterable, esto es que podemos recorrer  
print(pares)  
for i in pares: #recorremos el objeto iterable  
 print(i)  


Generador

El generador no usa return, en su lugar usa yield.

 #Generador de pares  
 def generaPares2(limite):  
  n=1  
  while n<=limite:  
   yield n*2  
   n+=1  
 pares=generaPares2(10)  
 for i in pares:  
  print(i)  


Generador con next

Con next vamos pidiendo nuevos elementos del objeto iterable y el generador los va 'fabricando'. De esta forma se ahorran recursos de memoria y de tiempo de cálculo ya que los elementos se generan uno a uno a medida que next los va pidiendo. Por el contrario si usáramos una función normal, ésta ha de generar todos los elementos del la lista, lo cual supone mayor gasto de recursos. La función ha de generar todos los elementos de la lista ya que una vez finalizada la función no se pude volver a ella, salvo que se invoque nuevamente. La función una vez que finaliza pierde el contenido de todas las variables locales que usa internamente.

 #Generador con next  
 def generaPares3(limite):  
  n=1  
  while n<=limite:  
   yield n*2  
   n+=1  
 pares=generaPares3(10)  
 print(next(pares))  
 print("otro, por favor.")  
 print(next(pares))  
 print("otro, por favor.")  
 print(next(pares))  
 print("otro, por favor.")  
 print(next(pares))  
 print("otro, por favor.")  
 print(next(pares))  


sábado, 23 de septiembre de 2017

Vocal o consonante en Python

Puede descargar el archivo: vocal.py

Crear una lista con todas las letras, tomar una y decir si es vocal o consonante.

Método 1

Trabajamos con listas. Creamos de forma manual una lista con todas las letras minúsculas, otra para las mayúsculas y otra para las vocales. Luego unimos, o fusionamos las listas de las letras minúsculas y mayúsculas.

 #Método 1  
 import random  
 minusculas=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']  
 mayusculas=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']  
 todas=minusculas+mayusculas  
 vocales=['a','e','i','o','u']  
 toditas=''.join(todas) #convertimos la lista en un string  
 print(toditas)  
 toditas=toditas.lower()  
 vocalitas=''.join(vocales) #convierte la lista en un string  
 letra=random.choice(todas) #eleginos aleatoriamente una letra de la lista todas  
 #letra=random.randrange(len(todas)) #esto no daría la letra sino el orden  
 print(letra)  
 letra=letra.lower()  
 def vocalConsonante(letrita):  
  if letrita in vocalitas:  
   print(letrita," es vocal.")  
  else:  
   print(letrita," es consonante")  
 vocalConsonante(letra)  

Método 2

Generamos un string con todas las letras y otro con las vocales. Para generar un string con todas las letras minúsculas y mayúsculas en Python 3.6 usamos string.ascii_letters.

 #Método 2  
 import string  
 print(string.ascii_letters) #crea un string con todas las letras  
 import random  
 letra=random.choice(string.ascii_letters) #elige una letra del string  
 print(letra)  
 letra=letra.lower() #La convierte en minúscula  
 vocales="aeiou"  
 def vocalConsonante(letrita):  
  if letrita in vocales:  
   print(letrita," es vocal.")  
  else:  
   print(letrita," es consonante.")  
 vocalConsonante(letra)  

Convertimos a minúscula la letra elegida aleatoriamente usando para ello la función lower(). También existe la función upper() que convierte una cadena a mayúsculas.


Factorial de un número en Python

Puede descargar el archivo: factorial.py

Comenzamos pidiendo al usuario que introduzca un número. Si no se introduce nada se calculará el factorial de 5. Observe el operador lógico or.
Introducimos un control de excepciones por si se produce un error. Observe que antes del input hemos añadido int para asegurarnos que entran números enteros. Si se añade un texto o un número decimal se produciría un error. El tratamiento de las excepciones o errores se consigue con try y con except.

#Calcula el factorial de un número entero mayor o igual a cero, hasta 120  
#Si no se introduce ningún número se calcula el factorial de 5  
while True:  
 try:  
  n=int(int(input("Introduzca un número entero, no negativo: ") or 5))  
  break  
 except ValueError:  
  print("No es un número válido, pruebe de nuevo.")  
factor=1 #por definición el factorial de cero es 1  
if n>0:  
 for i in range(1,n+1):  
  factor *=i  
 print("El factorial de ",n," es = ",factor)  
elif n<0:  
 print("El número no puede ser negativo.")  
else:  
 print("El factorial de cero, por definición, es 1")  

Para el cálculo del factorial observe la expresión factor*=i, que permite ir multiplicando los valores sucesivos.
Hemos añadido un if ya que por definición el factorial de cero es uno.

Múltiplos en Python

Puede descargar el archivo: multiplos23.py

Vamos a calcular los múltiplos de 2 y de 3 que hay entre 1 y el número que el usuario introduzca por teclado. Finalmente contaremos cuantos hay.

#Imprimir los múltiplos de 2 y de 3 que hay entre 1 y  
#el número que se introduzca por teclado  
#Y contar cuantos hay  
c=0 #inicializamos el contador  
n=int(input("Introduzca el extremos superior: "))  
print("Múltiplos de 2 y de 3 entre 1 y %i:"%n)  
for i in range(1,n+1):  
 if i%2==0 and i%3==0:  
  c+=1  
  print(i)  
print("Existen %i múltiplos de 2 y 3 en ese rango, incluidos los extremos"%c)  


Máximo y mínimo de una lista en Python

Puede descargar el archivo: max_lista.py

Creamos una lista de 10 números aleatorios enteros entre 1 y 100. Deseamos conocer el máximo y el mínimo.

Método 1

Usando las funciones max y min.

 #Método 1  
 import random  
 lista=random.sample(range(1,101),10)  
 print(lista)  
 print("Máximo= ",max(lista))  
 print("Mínimo= ",min(lista))  

Método 2

Sin usar las funciones max y min.

 #Método 2  
 import random  
 lista=random.sample(range(1,101),10)  
 print(lista)  
 maxi=1;mini=100 #inicializamos los valores  
 for i in range(len(lista)):  
  if lista[i]>maxi: maxi=lista[i]  
  if lista[i]<mini:mini=lista[i]  
 print("Máximo= ",maxi)  
 print("Mínimo= ",mini)  


Longitud de una cadena en Python

Puede descargar el archivo: largo_cadena.py

Deseamos conocer el largo de un string. Dada una cadena alfanumérica podemos averiguar cuantos caracteres tiene usando len, que es la forma abreviada de la palabra inglesa lengh que significa longitud.

Método 1

#Método 1 para una cadena, con len  
cadena="Hola"  
print(len(cadena))  

Método 2


El método 1 es el más efectivo, pero ahora se trata de intentar calcular la longitud de la cadena sin usar len.

#Método 2 para una cadena  
cadena="Hola"  
cont=0 #inicializamos el contador  
for i in cadena:  
 cont+=1  
print(cont)  

Método 3


Supongamos que ahora no tenemos un string sino una lista de la que necesitamos conocer su tamaño, esto es cuantos elementos tiene.

 #Método 3 para una lista, con len  
 lista=[1,2,3,4,5,6,7]  
 def largoLista1(entrada):  
  print(len(entrada))  

Método 4


Necesito calcular cuantos elementos contiene la lista sin usar len.

 #Método 4 para una lista  
 lista=[1,2,3,4,5,6,7]  
 def largoLista2(miLista):  
  c=0 #contador  
  for i in miLista:  
   c+=1  
  return c  
 print(largoLista2(lista))  


Sumar pares e impares en Python

Puede descargar el archivo: suma_pares_impares.py

#Sumar los pares por un lado y los impares por otro entre los números 1 a 100
s_par=0;s_impar=0  
for i in range(1,101):  
 if i%2==0:  
  s_par+=i  
 else:  
  s_impar+=i  
print("La suma de los pares entre 1 y 100 es= ",s_par)  
print("La suma de los impares entre 1 y 100 es= ",s_impar)  


Contar pares e impares en Python

Puede descargar el archivo: contar_pares.py


#Introducir dos números por teclado, contar cuantos hay entre ellos  
#contar cuantos son pares y la suma de los pares  
n=int(input("Indique el número menor: "))  
m=int(input("Indique el número mayor: "))  
total=0;pares=0;suma_pares=0  
for i in range(n,m+1): #en la suma se incluyen ambos extremos  
 total+=1  
 if i%2==0:  
  pares+=1  
  suma_pares+=i  
print("Entre %i y %i hay %i números, y de ellos %i son pares." % (n,m,total,pares))
print("La suma de los pares es= ",suma_pares)  



Condicional if en Python

Puede descargar el archivo: par_o_impar.py

Veamos un ejemplo del uso del condicional if en Python.
Introducir un número por teclado y decir si es par o impar.

#Introducir un número por teclado y decir si es par o impar  
n=int(input("Introduzca un número: "))  
if n%2==0:  
 print(str(n)," es un número par.")  
else:  
 print(str(n)," es un número impar.")  


Suma los valores de una serie de números

Puede descargar el archivo: suma_serie.py

Vamos a sumar los valores comprendidos entre uno inicial y otro final, ambos incluidos. El usuario introduce por teclado dichos valores.

#suma los números que indique el usuario entre un número inicial y uno final  
while True:  
 inicial=int(input("Indique el número inicial: ") or 1)  
 final=int(input("Indique el número final: ") or 100)  
 if inicial<final:  
  break  
suma=0  
for i in range(inicial,final+1):  
 suma+=i  
print("Suma de los números comprendidos entre ",inicial," y ",final,"= ",suma)  


viernes, 22 de septiembre de 2017

Suma descendente en Python

Puede descargar el archivo: suma_descendente.py

Calcular la suma de los números entre 20 y 10 e imprimirlos.

Método 1

Con for y step -1 para ir hacia atrás.

s=0 #suma  
for i in range(20,9,-1):  
 print(i)  
 s+=i  
print("suma=",s)  

Método 2

Con while donde la variable i se reduce de uno en uno: i-=1.

i=20;suma=0  
while i>=10:  
 print(i)  
 suma+=i  
 i-=1  
print("suma=",suma)  

Generando números pares en Python

Puede descargar el archivo: pares.py

Vamos a generar números pares entre 20 y 30 por varios métodos.

Método 1

Usando while.

#Método 1  
i=20  
while i<=30:  
 print(i)  
 i=i+2  

Método 2

Usando for.

#Método 2  
for i in range(20,31,2):  
 print(i)  

Método 3

Usando el módulo de 2.

for i in range(20,31):  
 if i%2==0:  
  print(i)  

Método 4

Acumulando el resultado en la variable texto para mostrar el resultado en una sola línea.

#Método 4  
i=20  
texto=""  
while i<=30:  
 if i%2==0:  
  texto+=' %i' % i  
 i+=1  
print(texto)  

Método 5

Con for y step 2, acumulando en la variable texto y quitando la última coma.

#Método 5  
texto=""  
for i in range(20,31,2):  
 texto+=str(i)+','  
print(texto[:-1])  

Hola mundo en Python versión 3

Puede descargar el archivo: HolaMundo.py

Podemos crear o abrir el archivo anterior en el editor de Python. En mi caso es el IDLE versión de Python 3.6 que es la más actual en este momento (septiembre 2017).

print("Hola Mundo!!!")   

Estando en el editor IDLE, primero grabamos el archivo con Control+s y luego pulsando F5 se abre el Shell de Python y se ejecuta el programa.

miércoles, 20 de septiembre de 2017

La función input() en Python

Puede descargar el archivo: input.py

En  la versión 3.x de Python las entradas por teclado se recogen con la función input. En la versión 2.x se utilizaba raw_input. Nosotros estamos trabajando ahora con la versión 3.6.2.

Ejemplo 1

print("¿Cómo se llama?")  
nombre = input()  
print("Me alegro de conocerle,", nombre)  


Ejemplo 2

print("¿Cómo se llama? ",end="")  
nombre=input()  
print("Encantado de conocerle,",nombre)  

Ejemplo 3

nombre = input("¿Cómo se llama? ")  
print("Me alegro de conocerle,", nombre)  


Para ver más casos recomendamos la siguiente página:

Variables y operadores en Python

Puede descargar el archivo: variables.py

Podemos usar el comando type para averiguar de qué tipo es una variable. Veamos un ejemplo donde definimos previamente cuatro variables y luego con type podemos ver de qué tipo son.

#Definimos las variables de varios tipos  
x=12           #número entero (integer): int  
y=12.0          #número decimal, coma flotante: float  
z=3.14159  
p="Esto es un texto"   #cadena de texto, string: str  
q=True          #Buleano, boolean: bool  
   
#Vemos de que tipo son las variables con type  
print(type(x))  
print(type(y))  
print(type(z))  
print(type(p))  
print(type(q))  
   
#Variable string que ocupa varias lineas  
r="""Este texto  
podemos ver que  
ocupa tres lineas"""  
print(r)  
   
#Veamos los operadores  
print(x+2)  #suma  
print(z-x)  #resta  
print(x*0.5) #producto  
print(15/4)  #division  
print(2**3)  #potencias (dos elevado al cubo)  
print(9//4)  #división entera  
print(9%4)  #módulo: calcula el resto  
   
#Concatenar cadenas alfanuméricas con el signo +  
txt1="Hola, "  
txt2="buenos días."  
print(txt1+txt2+" Comencemos a trabajar.")  

Veamos el resultado en el Shell de Python.


Si el resto es cero indica que existe división entera. Esto es, si x%y es igual a cero entonces indica que x es divisible entre y.

Para concatenar cadenas alfanuméricas usamos el signo +. En este caso las cadenas deben ser variables que contengan un string o caracteres alfanuméricos entre comillas dobles, o entre comillas simples.

Ejercicio 1

Adivine cuál es el resultado del siguiente código.

print("18"+"2")  

Posibles respuestas:

  • 20
  • 182
Efectivamente, al ir entrecomillas dobles el 18 no es un número sino una cadena, lo mismo sucede con el 2, por lo tanto el signo + lo que hace es concatenar las cadenas alfanuméricas y el resultado es 182.


Ejercicio 2

¿Qué resultado arrojaría el siguiente código?

puntos=84  
print("El jugador alcanzó una puntuación de: "+puntos)  

En este caso obtenemos un error al ejecutar el código, ya que se intenta concatenar una frase entrecomillada que es una cadena con la variable puntos que es un valor numérico.


Se puede solucionar el error si convertimos el valor numérico en una cadena. Esto se hace con al función str. El código correcto quedaría de la siguiente forma.

puntos=84  
print("El jugador alcanzó una puntuación de: "+str(puntos))  

Finalmente hemos conseguido concatenarlo.


martes, 19 de septiembre de 2017

Generación de números aleatorios con repetición en Python

Puede descargar el archivo: conrepeticion.py

Generamos números aleatorios entre 1 y 100 e imprimimos 10 de ellos, con lo que pueden estás repetidos.

# Generación de 10 números aleatorios entre 1 y 100 con repetición  
import random  
texto=""  
for i in range(10):  
  n=random.randint(1, 100)  
  texto+=str(n)+' '  
print(texto)  


domingo, 17 de septiembre de 2017

Generación de números aleatorios sin repetición en Python

Puede descargar el archivo: sinrepeticion.py

Veamos varios métodos para conseguirlo. Partimos de una lista de números enteros entre 1 y 100 y deseamos tomar 10 números al azar.

Método 1

Seguidamente vamos a mostrar el código para generar números aleatorios sin repetición.

# Generación de 10 números aleatorios entre 1 y 100 sin repetición   
import random  
#creamos una lista con un primer número aleatorio  
lista=[random.randrange(100)+1] #el primer número nunca se repite  
n=1 #n indica la cantidad de números en la lista  
while n<10:  
 x=random.randrange(100)+1  
 norepe=True #suponemos inicialmente que el número generado no está repetido  
 while norepe:  
  for j in range(len(lista)):  
   if x==lista[j]:  
    norepe=False #aquí hemos detectado que el número si esta repetido  
  if norepe:  
   lista.append(x)  
   n+=1  
print(lista)  


Método 2

Veamos otro método programado de forma breve para obtener aleatorios únicos en una lista.

# Generación de 10 números aleatorios entre 1 y 100 sin repetición  
import random  
print(random.sample(range(1,101), 10))  


Método 3

En este método la idea es crear la lista entre 1 y 100, luego la desordenamos y finalmente imprimimos de ella únicamente los 10 primeros elementos.

# Generación de 10 números aleatorios entre 1 y 100 sin repetición  
import random  
miLista=list(range(1,101))  #creamos una lista del 1 al 100  
random.shuffle(miLista)     #desordenamos la lista  
print(miLista[:10])         #mostramos únicamente los 10 primeros  


Funciones en Python

Puede descargar el archivo: funcionSaluda.py

Las funciones en Python que podemos programar comienzan con def, luego el nombre de la función y entre paréntesis los argumentos que lleven separados por comas. También es frecuente que las funciones no lleven argumentos entonces simplemente se ponen los paréntesis (). Al final la función puede terminar con return si deseamos retornar un valor.
Los dos puntos : al final de la primera línea son importantes. Al pulsar enter en ese momento conseguiremos que la segunda línea quede indentada, lo cual es fundamental para que el intérprete de Python sepa que es línea y todas las demás que vayan indentadas pertenecen a la función. Recordemos que en Python no se usan llaves {} como en otros lenguajes.

Ejemplo 1

Veamos nuestra primera función que se llama saluda y no lleva argumentos, pero es imprescindible escribir los paréntesis (). Tampoco lleva un return al final de la función ya que esta no retorna ningún valor, sino que lo que hace es una acción, print.
Para llamar a la función o invocar a la función simplemente hemos de escribir su nombre y no olvidarnos de los paréntesis.

def saluda():  
  print("Hola, buenos días.")  
saluda()  

Ejemplo 2

Veamos ahora un caso donde si usamos argumentos y donde si retornamos un valor.

def producto(x,y):  
  return x*y  
resultado=producto(3,5)  
print(resultado)  

En el ejemplo anterior la función está formada por las dos primeras líneas. Deseamos calcular el producto de dos números x e y, que actúan como parámetros.
La tercera línea llama a la función pasándole como parámetros los valores:
  • x=3
  • y=5
Sabemos que estos son los valores asignados por la posición que ocupan. La x es la primera variable y la y la segunda.

Ejemplo 3

Preguntamos al usuario a quién quiere saludar. Mediante input recogemos el nombre que el usuario nos diga mediante teclado.

#Creamos una función que saluda a una persona  
def saluda(persona):  
 print("Hola ",persona)  
 print("Anímate a programar en Python.")  
   
nombre=str(input("Indique el nombre de la persona a la que quiere saludar: "))  
saluda(nombre)  

Salto de línea dentro de una línea de código

En el IDLE de Python podemos hacer un salto de línea dentro de una misma línea de código poniendo la barra invertida: \.


En la imagen anterior se muestra el Shell (la consola) de Python para la versión 3.6.2.

Generación de listas en Python

Puede descargar el archivo: listas.py

Veamos cómo se pueden generar listas numéricas con range. También crearemos listas con números aleatorios. Finalmente vamos a desordenar las listas con la librería random y el uso de shuffle.

 #Ejemplo 1   
 lista_a=list(range(11,21))  #crea una lista entre 11 y 21(no incluido)   
 for i in lista_a:   
  print(i)           #se imprime en vertical   
 print('_'*40)  
 #Ejemplo 1.1 (Variantre)  
 myList=list(range(11,21))  
 for i in range(0,10):  
   print(myList[i])  
 print('_'*40)  
 #Ejemplo 2   
 lista_b=range(20,50,5)    #crea una lista entre 20 y 50 (no incluido) de 5 en 5   
 print(lista_b)        #OUT: range(20, 50, 5)   
 print(list(lista_b))     #OUT: [20, 25, 30, 35, 40, 45]   
 print('='*40)   
 #Ejemplo 3   
 print(range(10, 23, 3))    #OUT: range(10, 23, 3)   
 print(list(range(10, 23, 3))) #OUT: [10, 13, 16, 19, 22]   
 print('×'*40)   
 #Ejemplo 4   
 import random         #importanmos la libreria random para aleatorios   
 random.shuffle(lista_a)    #desordena una lista de forma aleatoria   
 print(lista_a)        #imprime lista_a desordenada y en una fila   
 print('~'*40)     

Disponemos de varios ejemplos.

  1. Ejemplo 1/1.1. Creamos una lista con list y range. Con un for recorremos toda la lista y vamos imprimiendo sus elementos en vertical. 
  2. Ejemplo 2. Creamos una lista con range, pero sin el uso de list, la lista va de 20 a 50 (no incluido) de 5 en 5. Al imprimir la lista con print(lista_b) únicamente vemos en pantalla la expresión range(20, 50, 5). Para poder ver la lista numérica creada hemos de usar list dentro del print. De esta forma, con la expresión print(list(lista_b)) podemos obtener la lista numérica deseada en fila: [20, 25, 30, 35, 40, 45]. 
  3. Ejemplo 3. Creamos una lista que va de tres en tres, entre 10 y 23 (no incluido). Si queremos ver la lista numérica creada debemos introducir list dentro del print
  4. Ejemplo 4. Para trabajar con números al eatorios importamos la librería random. Luego desordenamos la lista_a y finalmente la imprimimos. Observe que la lista_a ya ha quedado desordenada aunque no la hemos asignado con un igual. Lógicamente cada vez que ejecutemos el programa, lo más probable es que obtengamos listas diferentes. Si usted realiza este ejercicio es muy probable que obtenga una lista diferente a esta, ya que son números generados de forma aleatoria.

Imprimir impares en Python

Puede descargar el archivo: impares.py

Ya hemos visto anteriormente cómo podemos imprimir listas de números (Series de números). Ahora vamos a imprimir estas listas pero con números que no son consecutivos. Mostraremos en pantalla los impares entre 1 y 15 usando varios métodos.

#Imprimir los impares entre 1 y 15 ambos incluidos  
#Método 1 con for  
for i in range(1,16,2): #el rango de i va de 1 a 16 (no incluido) de 2 en 2  
 print(i)   
print("_" * 40) #repite 40 veces el carácter de barra baja   
print("\n")   #para hacer un salto de línea  
#Método 2 con while  
i=1  
while i<=15:  
  print(i)  
  i=i+2  
print("_" * 40)  
print("\n")  
#Método 3 con modulo 2  
for i in range(1,16):  
  if i%2!=0:     #Si el resto de dividir i entre 2 no es cero = si es impar  
    print(i)  
print("_" * 40)  
print("\n")  
#Método 4 con texto acumulado  
n = 1  
texto = ''         #creamos un string vacio  
while n <= 15:  
  if n%2!=0:  
    texto+='%i,'%n   #acumula un string en fila separado por coma  
    #texto+='%s,'%n   #otro método  
    #texto+='\r%d,'%n  #otro método, con coma y espacio  
  n += 1  
print(texto[:-1]) #elimina la última coma  

  1. Método 1. Usando for. Posiblemente el método más sencillo
  2. Método 2. Usando while.
  3. Método 3. Usando el módulo % (resto). Al dividir entre dos, si el resto no es cero quiere decir que el número analizado es impar.
  4. Método 4. Con una variable texto que acumula los números impares separados por coma y finalmente los imprime en una fila. También nos hemos ocupado que quitar la última coma.
Para eliminar la última coma escribimos print(texto[:-1])


El resultado obtenido es el siguiente.

Series de números con Python

Puede descargar el archivo: serie.py

Vamos a imprimir los números entre 1 y 5. Para ello usaremos dos métodos.
  1. Método 1. Con for, y una variante que será el método 1.1
  2. Método 2. Con while
El código es el siguiente.


# imprimir los números entre 1 y 5
#Metodo 1. Con For
for i in range(1, 6):
    print(i)

#Metodo 2. Con For (Una variante)
print('_____________________________________________________\n')
for i in range(5): #la i toma los valores 0 a 4
  print(i+1)

#Metodo 3. Con While
print("_" * 40)
print("\n")
j=1
while (j<6 ):
    print(j)
    j =j+ 1         # j += 1

Este es un ejercicio sencillo, pero muy ilustrativo cuando se está comenzando a ver los bucles en Python.

sábado, 16 de septiembre de 2017

Hola mundo en PHP

PHP es un lenguaje que trabaja modificando de forma dinámica el lenguaje HTML. PHP se inserta dentro del lenguaje HTML y le modifica.

Veamos la estructura básica de una página web programada en HTML con el código PHP que se ha insertado en su interior.

<html>
  <head>  
    <title>Prueba de PHP</title>  
  </head>
  <body>  
    <?php echo '<p>Hola Mundo</p>'; ?>  
  </body>  
</html>  

El usuario lo único que verá en su pantalla es es texto que pone Hola Mundo. Si ese usuario en su navegador pulsa Control+u podrá ver el código HTML que está interpretando su browser y verá el siguiente código.


<html>  
  <head>  
    <title>Prueba de PHP</title>  
  </head>  
  <body>  
    <p>Hola mundo</p>  
  </body>  
</html>  


Observe que en ese código HTML no podemos ver el código PHP que se programó. Esto es debido a que en el servidor el intérprete de PHP se ha encargado de ejecutar el código PHP y seguir sus instrucciones para llegar al obtener un código HTML puro, sin rastro de PHP.

Puede ver la página holamundo.php en el siguiente enlace.

Necesitamos un servidor PHP y MySQL

Primero tenemos que tener un servidor donde poder probar nuestro código en PHP. Existen dos alternativas:

  • Podemos instalar en nuestro ordenador un servidor para hacer las pruebas en localhost, o bien
  • Podemos darnos de alta en algún hosting de páginas web que soporte PHP y MySQL. Los tenemos de pago, o gratuitos.

Como hosting gratuito podemos mencionar el siguiente, que de momento funciona bastante bien, aunque hemos de recordar que se trata de hacer pruebas.
Lo más cómodo es subir los ficheros mediante FTP (File Transfer Protocol).


Vamos a usar Filezilla que es nuestro software recomendado para hacer FTP. Nos descargaremos e instalaremos la versión Client, ya que nosotros actuaremos como cliente del servidor para subir nuestros ficheros.

Si te decides por la alternativa de instalar en tu propio ordenador un servidor Apache +MySQL+PHP lo recomendable es que uses un paquete instalador, en lugar de instalar cada cosa por su lado. Podemos recomendarte el siguiente paquete según tu sistema operativo.

viernes, 15 de septiembre de 2017

Canal en Youtube para JS

Hace poco creé un canal de Youtube llamado Alejandro Magnitopic. En el, subo tutoriales de diferentes lenguajes de programación y temas tecnológicos. Lo único es que los temas de conversación son temas mas avanzados o que no están bien explicados en otros vídeos. Otro punto es que están en ingles, pero el código que dejo en la descripción de cada vídeo es perfectamente valido.

Este es el primer video de JS.



Canal en Youtube de Python

Hace poco creé un canal de Youtube llamado Alejandro Magnitopic. En el, subo tutoriales de diferentes lenguajes de programación y temas tecnológicos. Lo único es que los temas de conversación son temas mas avanzados o que no están bien explicados en otros vídeos. Otro punto es que están en ingles, pero el código que dejo en la descripción de cada vídeo es perfectamente valido.

Este es el vídeo mas reciente de Python.


sábado, 2 de septiembre de 2017

Asignación de variables y sus tipos en Python

Las variables en Python se asignan poniendo el nombre de la variable un signo igual y el valor asignado. Veamos un ejemplo.

x=5

En el caso anterior la variable es x a la que hemos asignado un número entero que es 5.
El nombre de las variables debe cumplir ciertas reglas:

  • no puede contener espacios
  • debe comenzar por una letra aunque luego puede llevar números
  • se diferencia entre mayúsculas y minúsculas

Las variables pueden ser de la siguiente forma.

  • x=5 números enteros: integer
  • x=4.7 números decimales: float
  • pais="Canada" variables de texto: string. Van entre comillas
Cuando se asigna una variable en programación siempre se almacena el valor de la derecha en el nombre de variable de la izquierda. Por ejemplo x=5. Nunca pondríamos 5=x ya que esto en programación no tiene sentido, aunque en matemáticas sería válido.



Otras estructuras que nos encontraremos en Python son las siguientes.

  • Listas x=[1,2,3]
  • Tuplas dias=("lun","mar","mie","jue","vier","sab","dom")
  • Diccionarios capitales={"España":"Madrid","Francia":"Paris","Italia":"Roma"}
Las tuplas se usan normalmente para valores que no cambiarán. Por el contrario las listas se usan normalmente para series de valores que podemos cambiar, aumentar en número o eliminar.

Comentarios del programador en Python

Para realizar un comentario de una sola línea usamos #.

# Esto es un comentario de una sola línea



Para realizar comentarios de varias líneas usamos tres dobles comillas para iniciar el párrafo y lo cerramos de la misma forma.

""" Esto es un comentario que
abarca varías líneas.
En este ejemplo son tres líneas """


También podemos usar la # (almoadilla) para poner un comentario a la derecha de una línea de código.

ciudad="Madrid" #Esta será la ciudad origen de los vuelos


En el ejemplo anterior hemos creado una variable llamada ciudad y la hemos asignado a un nombre de ciudad que debe ir entre comillas ya que se trata de una cadena de texto (string). Esta sería la línea de código normal. A su derecha ponemos el símbolo # lo que indica que comienza un comentario y todo lo que hay a su derecha hasta el final de la línea constituye el comentario que realizamos.