pass - Python Set Comprehension
print python 3 (3)
Puede obtener soluciones limpias y claras construyendo los predicados adecuados como funciones de ayuda. En otras palabras, use la notación del creador de conjuntos de Python de la misma manera que escribiría la respuesta con la notación de conjuntos de matemáticas regular.
La idea detrás de las comprensiones de conjuntos es dejarnos escribir y razonar en código de la misma manera que hacemos las matemáticas a mano.
Con un predicado apropiado en la mano, el problema 1 se simplifica a:
low_primes = {x for x in range(1, 100) if is_prime(x)}
Y el problema 2 se simplifica a:
low_prime_pairs = {(x, x+2) for x in range(1,100,2) if is_prime(x) and is_prime(x+2)}
Observe cómo este código es una traducción directa de la especificación del problema, "Un par principal es un par de números impares consecutivos que son primos".
PD: Estoy tratando de darte la técnica correcta de resolución de problemas sin dar realmente la respuesta al problema de la tarea.
Así que tengo estos dos problemas para una tarea y estoy atascado en el segundo.
Use una Comprensión de conjunto de Python (el equivalente de Python de la notación del Generador de conjuntos) para generar un conjunto de todos los números primos que sean menores que 100. Recuerde que un número primo es un número entero mayor que 1 y no divisible por ningún otro entero que no sea sí mismo y 1. Almacene su conjunto de números primos en una variable (lo necesitará para partes adicionales). Envíe su conjunto de números primos (por ejemplo, con la función de impresión).
Use un Python Set Comprensión para generar un conjunto de pares ordenados (tuplas de longitud 2) que consistan en todos los pares primos que consisten en primos menores que 100. Un par primo es un par de números impares consecutivos que son primos. Almacena tu conjunto de Prime Pairs en una variable. Su conjunto de número 1 será muy útil. Salida su conjunto de pares principales.
Para el primero, esto funciona perfectamente:
r= {x for x in range(2, 101)
if not any(x % y == 0 for y in range(2, x))}
Sin embargo, estoy bastante perplejo en el segundo. Creo que puedo tener que tomar el producto cartesiano del set r con algo, pero no estoy seguro.
Esto me acerca un poco pero solo quiero los pares consecutivos.
cart = { (x, y) for x in r for y in r
if x < y }
Puedes generar pares como este:
{(x, x + 2) for x in r if x + 2 in r}
Luego, todo lo que queda por hacer es obtener una condición para que sean primos, lo que ya ha hecho en el primer ejemplo.
Una forma diferente de hacerlo: (aunque más lento para grandes conjuntos de números primos)
{(x, y) for x in r for y in r if x + 2 == y}
primes = {x for x in range(2, 101) if all(x%y for y in range(2, min(x, 11)))}
Simplifiqué la prueba un poco, if all(x%y
lugar de, if not any(not x%y
También limité el rango de y; No tiene sentido probar los divisores> sqrt (x). Entonces max (x) == 100 implica max (y) == 10. Para x <= 10, y también debe ser <x.
pairs = {(x, x+2) for x in primes if x+2 in primes}
En lugar de generar pares de números primos y probarlos, obtenga uno y vea si existe el número primo superior correspondiente.