¿Cómo puedo escribir un código que cumpla con todos los requisitos para este conjunto?

El objective de esta tarea es encontrar el conjunto X que cumpla con todos los requisitos siguientes:

  1. X = {x | x ∈ Z yx> 0}.

  2. A = {(x mod 2) | x ∈ X}

B = {y | sqrt (y) ∈ X}

C = {sqrt (z) | z ∈ (X ∩ B)}

D = {w ^ 2 | w ∈ C}

  1. 0 <| X |.

  2. | X | ∈ X.

  3. | A | (no elemento en) X.

  4. sum (X) ∈ B.

  5. sum (X ∩ B) 6 (no elemento en) B.

  6. sum (C ∪ D) ∈ X.

Así que este es el problema que estoy tratando de resolver.

He intentado resolver esto a mano y he encontrado que X = {6, 36, 31, 33, 11, 4} es un conjunto que cumple con los requisitos. También escribí un código en Python, pero mi código no funciona. No recibo ningún mensaje de error, simplemente no generará un conjunto que cumpla con los requisitos. Este es el código que he escrito en Python:

import random import math def check(t): X1 = t X = set([x for x in X1 if x>0]) A = set([x%2 for x in X]) - set([0]) print "A= ", "\t", A B = set([math.pow(y,2) for y in X ]) print "B= ", "\t", B C = set([math.pow(z, 0.5) for z in X.intersection(B)]) print "C= ", "\t", C D = set([math.pow(w, 2) for w in C]) print "D= ", "\t", D, "\n" # (iii) if len(X) >0: print "iii.\t The cardinality of X bigger than 0." # (iv) if len(X) in X: print "iv.\t\t The cardinality of X is element in X" # (v) if len(A) not in X: print "v.\t\t Cardinality of A is not element in X." # (vi) if sum(X) in B: print "vi.\t\t Sum of X is element in B." # (vii) if sum(X) and sum(B) not in X: print "vii.\t Sum of X and B is not element in B" # (viii) if sum(C) in X or sum(D) in X: print "viii.\t Sum of C exits in X." if len(X)>0 and len(X) in X and len(A) not in X and sum(X) in B and sum(X) not in B and sum(B) not in B and sum(C) in X or sum(D) in X: print "Set X is ","\t\t ", X print "Fits the requirements." # print "A = ", A else: print "Does not fit the requirements." def guess(): b = 20 genSet = random.sample( range(2,b), 6 ) t = set(genSet) print "---------------" print "Generated set is: ", t return check(t) counter=1 while not guess(): print "try nr: ", teller counter+=1 

Como puede ver, acabo de asumir que el conjunto es de longitud = 6, pero eso es solo por ahora cuando bash que el código funcione. Y mi rango de números aleatorios tampoco es tan grande por la misma razón.

También he escrito algunas sentencias if / else para comprobar si se cumplen los requisitos o no.

Ignora mis comentarios: no sé lo que estaba pensando. Simplemente establecer

 A = set([x%2 for x in X]) 

y asegúrese de return algo de su check función:

  ... print "Fits the requirements." # print "A = ", A return True else: print "Does not fit the requirements." return False ... 

Y necesitas obtener la lógica correcta en tu comparación (la instrucción if larga):

 import random import math def check(t): X1 = t X = set([x for x in X1 if x>0]) A = set([x%2 for x in X]) print "A= ", "\t", A B = set([math.pow(y,2) for y in X ]) print "B= ", "\t", B C = set([math.pow(z, 0.5) for z in X.intersection(B)]) print "C= ", "\t", C D = set([math.pow(w, 2) for w in C]) print "D= ", "\t", D, "\n" # (iii) if len(X) >0: print "iii.\t The cardinality of X bigger than 0." # (iv) if len(X) in X: print "iv.\t\t The cardinality of X is element in X" # (v) if len(A) not in X: print "v.\t\t Cardinality of A is not element in X." # (vi) print '(vi)', sum(X), B if sum(X) in B: print "vi.\t\t Sum of X is element in B." # (vii) if sum(X) and sum(B) not in X: print "vii.\t Sum of X and B is not element in B" # (viii) if sum(C) in X or sum(D) in X: print "viii.\t Sum of C exits in X." if len(X)>0 and len(X) in X and len(A) not in X and sum(X) in B and sum(X.intersection(B)) not in B and sum(C.union(D)) in X: print "Set X is ","\t\t ", X print "Fits the requirements." # print "A = ", A return True else: print "Does not fit the requirements." return False def guess(): b = 20 genSet = random.sample( range(1,b), 6 ) t = set(genSet) print "---------------" print "Generated set is: ", t return check(t) 

Con estas ediciones, una solución parece ser {1, 3, 4, 6, 9, 13} .