En éste vídeo vamos a construir un programa que nos permite determinar si un número es primo o no, usando expresiones booleanas, operadores relacionales y operadores lógicos.
Recuerda:
Todas las funciones deben declararse con el keyword def
Un bug es un error en el código y requiere ser verificado
La funcion " raw_input" cambio de nombre en Python 3 ahora es solo “input”
Es muy bueno hacer esta denotación o si no los programas no corren
En realidad en Python 2 existe input() y raw_input(). input() solo acepta que ingreses valores numericos como integer o float. y los guarda asi. raw_input() acepta todos los valores pero los pasa a una cadena(string).
En Python 3 se saco raw_input() y se dejo solo input() modificando su compartamiento para que acepte todos los valores y los pase a una cadena (string).
Hola, yo también dejo mi aporte. El siguiente código verifica si el numero es primo pero lo hace de manera mas eficiente, es decir, en vez de probar todos los números en el rango (2, n), solo probamos hasta la raíz cuadrada de ese numero, ya que con esto es suficiente para comprobar si el numero es primo o no.
import math
def is_prime(n):if(n<2):returnFalse root=int(math.sqrt(n))for a inrange(2,root+1):if n%a==0:returnFalsereturnTrue
Imaginen que queremos comprobar si 1000 es primo, con el código normal el computador tendría que hacer cerca de 1000 comparaciones para verificar si es primo, mientras que si comprobamos hasta la raíz solo hacemos unas 32 comparaciones, si tomamos en cuenta números mas grandes podemos ver que la diferencia es significativa.
Se que esto es un poco mas avanzado, pero una parte importante de la programación es hacer las cosas lo mas eficiente posible y me pareció interesante decir algo al respecto, sin embargo para los que estén comenzando, aun no se preocupen por eso.
Saludos
Excelente aporte.
yo recien estoy comenzando :c
Una alternativa al codigo propuesto puede ser:
"""
Programa para determinar si un numero es primo."""
# -- coding: utf-8-*-def is_prime(number): # si el numero es menor que 2, no es primo
if number <2: result =False # si el numero es igual a 2, es primo
elif number ==2: result =True # si el numero es mayor que 2 y es divisible entre 2, no es primo
elif number >2 and number %2==0: result =False # si el numero es mayor que 2 y no es divisible entre 2else: # toma el valor True antes de iterar en el ciclo
result =Truefor i inrange(3, number): # si el numero que estamos evaluando es divisible entre alguno
# de los numeros contenidos en el mismo, no es primo, se sale del ciclo con valor Falseif number % i ==0: result =Falsebreakreturn result
def run(): number =int(input('Escribe un numero: ')) result =is_prime(number)if result is True:print('Tu numero es primo\n')else:print('Tu numero NO es primo\n')# Nuestro programa empieza aqui.if __name__ =='__main__':run()
De esta forma solo hay 1 return en la funcion is_prime 😃
Muy interesante tu propuesta! es muy importante tener un solo return para hacer mas legible el código, le añadiría algo a tu solución, si los números entre 3 y (number / 2) no son divisibles el siguiente restante (number / 2) - number tampoco lo serán!
No es cierto que si un número es menor que dos no sea primo
Recuerden que podemos mejorar la impresión utilizando .format() para traer el valor de alguna de nuestras variables.
if result ==True:print("El número {} es primo".format(number))else:print("El número {} NO es primo".format(number))
Al ejecutarlo:
C:\Users\Crawler\Documents\Platzi\python>python numeros_primos.pyEscribe un numero:3El número 3NO es primo
Saludos 😃
tambien puedes usar:
<print("El número "+ number +" es un número primo")>
No es buena práctica utilizar ni la concatenación con + o con %s. Siempre con format.
Esta es mi solución un poco "más eficiente" en recursos:
def is_prime(number): assert number>=2,'The number inputed must be greater than or equal to 2'for i inrange(2,int(math.sqrt(number))):if number%i ==0:returnFalsereturnTrue```
¡Genial Mateo! ¿Cómo te fue en el curso? ¿Qué es lo que más te gustó? :)
Python 3.8
def is_prime(number):if number <2:returnFalse elif number ==2:returnTrue elif number >2 and number %2==0:returnFalseelse:for i inrange(3,number):if number % i ==0:returnFalsereturnTruedef run(): number =int(input('Ingresa un número: ')) result =is_prime(number)if result is True:print('El número {} es primo.'.format(number))else:print('El número {} NO es primo'.format(number))if __name__ =='__main__':run()
Hola!
Usando los conceptos aprendidos entre las clases 10 y 11 (esta clase y la anterior), decidir crear este código para saber la generación de acuerdo a la edad:
- coding: utf-8 --
def generacion(age):
if age >= 72:
print ('Eres de la generacion Niños de la postguerra, es decir seres humanos que nacieron entre los años de 1930 y 1948')
elif age <= 71 and age >= 52:
print ('Eres de la generacion Baby boom, es decir seres humanos que nacieron entre los años de 1949 y 1968')
elif age <= 51 and age >= 40:
print ('Eres de la generacion X, es decir seres humanos que nacieron entre los años de 1969 y 1980')
elif age <= 39 and age >= 27:
print ('Eres de la generacion Millennials, es decir seres humanos que nacieron entre los años de 1981 y 1993')
elif age <= 26 and age >= 10:
print ('Eres de la generacion Z, es decir seres humanos que nacieron entre los años de 1994 y 2010')
elif age <= 9 and age >= 1:
print ('Eres un baby y aún no tienes generacion definida, es decir seres humanos que nacieron entre los años de 2011 y 2020')
elif age <= 1:
print ('No existes!!! Pero no te preocupes porque tal vez tus padres te tengan en planes')
def run():
age = int(input('Escribe tu edad: '))
result = generacion(age)
if name == 'main':
run()
print (' ')
print ('Esto fue todo por ahora')
print (' ')
print ('Fue un placer indicar tu generacion de acuerdo con tu edad')
Esto me podría ayudar en las tareas del colegio!!!
que mal que ya estamos en vacaciones
Espere a que las clases comiencen nuevamente para usar todo lo que ha aprendido aquí!
¿Cómo te ha ido en el colegio con estos conocimientos Diego? :)
Buenas noches,
Me gustaría compartirles este pequeño programa que retorna la cantidad de números primos que ustedes deseen, por si les sirve para ampliar el análisis descrito en el vídeo.
Este es un ejemplo para los primeros 100 números primos.
[[ 1 2 3 5 ... 13 17 19 23]
[ 29 31 37 41 ... 53 59 61 67]
[ 71 73 79 83 ... 101 103 107 109]
[113 127 131 137 ... 151 157 163 167]
...
[281 283 293 307 ... 317 331 337 347]
[349 353 359 367 ... 383 389 397 401]
[409 419 421 431 ... 443 449 457 461]
[463 467 479 487 ... 503 509 521 523]]
def if_prime(number): response =Falseif number ==1: response =True elif number !=1: divider = number -1while divider >1 and number % divider !=0: divider +=-1if divider ==1: response =True elif divider >1: response =Falsereturn response
def return_primes(elements): i =0 primes =[]while elements >0:ifif_prime(i)==True: primes.append(i) elements +=-1 i +=1return primes
elements =int(input("Quantity of first prime numbers: "))primes =return_primes(elements)#Nowif the number of elements have square number, then we are going to create a square matrix to easy the view.square= elements**(1/2)if square %1==0: square =int(square) primes = np.array(primes).reshape(square,square)print("primes:\n", primes)```
interesante, te falta hacerle comentarios pero sí se ve muy interesante, desarrollaste vos el programa?
La palabra reservada pass es una forma de decirle al interprete de Python que se acabo de definir una función que no tiene aun código dentro de ella y que en algún momento tendría algo. Si esto no se hace el interprete no identificaría donde empieza y termina la función.
significado del %, el numero es divisible y da residuo 0
¡Hola @zivaku1968! Ese símbolo es el "módulo" y permite obtener el resto de una división de enteros ;)
Para la versiòn de Python 3.7 la captura en pantalla como raw_input genera un error, es sòlo necesario input.
Dejo como aporte este artículo sobre las diferencias entre Python 2 y 3, para que puedan profundizar ;)
La función " raw_input" cambio, ahora en Python 3 el es solo “input”, esa podría ser la causa de algunos errores
Dejo como aporte este artículo sobre las diferencias entre Python 2 y 3, para que puedan profundizar ;)
Este es mi código (lo hice antes de ver el vídeo):
# -*- coding: utf-8-*-def is_prime(number):if(number ==2):returnTrue count =0for i inrange(2, number-1):if(number % i ==0): count +=1if count >0:returnFalseelse:returnTruedef run(): number =int(input('Ingresa el número que quieres probar: ')) result =is_prime(number)if(result):print('El número: {} es primo!'.format(number))else:print('El número: {} NO es primo!'.format(number))if __name__ =='__main__':run()```
Saludos!
xD
Puedes ahorrarte los parentesis que estás usando en los if, ya que sólo estás usando una condición.
¿Qué opinas David?
# -*- coding: utf-8-*-def calcular_pares_o_primos(number):if number %2==0:return"Par"else:return"Impar"def run():print("CALUCLAR PARES Y PRIMOS") number =int(input("Digita un número : ")) result =calcular_pares_o_primos(number)print("El número {} es {}".format(number,result))if __name__ =='__main__':run()```
Te diria que para este tipo de funciones es mejor devolver booleanos en vez de Strings, te será más fácil en programas más complejos comprobar que todo funcione correctamente.
¡Hola @jjhdzh! Puedes prescindir de la línea
# -*- coding: utf-8 -*-
ya que Python 3 admite Unicode por defecto ;)
tengo que comentarles que no ha sido fácil para mi, sobretodo que no sé cual es el edior que usa el profesor, la idea es usar lo mismo y aprender bajo la misma ilaridad. Empecé usando Spider de Anaconda y me va mejor por lo menos logré hacer que corra el programa.
El editor que utiliza el profesor es: Atom; por si quiere intentar con ese...
Saludos.
¡Hola @Jpierre9! Te recomiendo probar Visual Studio Code antes que cualquier otro editor actualmente, ya que provee más funcionalidades y plugins (y menos bugs). Además, puedes prescindir de la línea
# -*- coding: utf-8 -*-
ya que Python 3 admite Unicode por defecto ;)👌🏼
Para generar un comentario en python debe colocar símbolo almohadilla # delante de la linea de texto si desea comentar varia lineas utilizas triple comilla.
# esto es un comentario
"""esto es un comentario
para varias lineas"""
Si en el 'range' le agregan otro parámetro, se puede establecer el tamaño de salto o avance que se da en cada iteración, en este caso, si le pones 2, evitamos repetir la validación de pares que se lograba con el operador matemático 'módulo 2' hecha en 'elif' anterior, a final de cuentas puede hacer la diferencia en rendimiento al momento de validar un número muy grande.
def is_prime(number):if number <2:returnFalse elif number ==2:returnTrue elif number >2 and number %2==0:returnFalseelse:for i inrange(3, number,2):if number % i ==0:returnFalsereturnTrue```
Los números primos son divisibles por 1 o por sí mismo. En Python, RANGE(0, un_numero) es una lista que va desde 0, 1, 2, ..., hasta "un_numero"-1, es decir, no incluye el extremo final. Por esto es que el profesor David realiza el ajuste del minuto 10.
# -*- coding: utf-8-*-def run(): number =int(input("Escribe un número:")) result =is_prime(number)if result ==True:print("El número {} es primo".format(number))else:print("El número {}NO es primo".format(number))def is_prime(number): #Si es negativo,0 ó 1, no es primo
if number <2:returnFalse #2 es el primer número primo
elif number ==2:returnTrue #Si es mayor que 2 pero es divisible por 2, no es primo
elif number >2 and number %2==0:returnFalseelse: #Se revisan los números desde el 3 hasta el número bajo análisis(Sin incluirlo, propiedad de RANGE)for i inrange(3, number): #Si el número es divisible completamente por uno de estos números,NO es primo
if number % i ==0:returnFalse #En el resto de casos, el número es primo
returnTrueif __name__ =="__main__":run()```