Python - Numeros aleatorios y sin repeticion

 
Vista:
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Anonimo (9 intervenciones) el 25/09/2020 02:28:44
Buenas noches,

He empezado a trabajar con python hoy mismo y tengo que hacer la siguiente tarea:

Debo crear 100 tarjetas con 58 numeros en cada una de ellas (un numero por dia, empezaria el dia 1 de octubre y acabaria el dia 29 de noviembre ), no se puede repetir ningun numero, ni tampoco se puede repetir un numero en el mismo dia en otra tarjeta. Esto es, si el dia 10 de la primera tarjeta es 68 la segunda tarjeta no puede tener el mismo numero en el dia 10 (pero si el primer dia por ejemplo).


Si alguien me echa un cable lo agradezco.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Anonimo (9 intervenciones) el 25/09/2020 17:40:33
Si, hasta ahí he llegado ahora mi problema es que no se como hacer para que no se repita un numero en la misma posición en diferentes tarjetas (si es que es posible).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por joel (901 intervenciones) el 26/09/2020 19:17:23
Hola Anonimo!!!

Una duda... de esas 100 tarjetas que contienen 58 números, esos números entre que valores van? entre 1 y 1000?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Aimar (9 intervenciones) el 26/09/2020 19:28:56
entre 1 y 112. Separados en diferentes grupos (1-7, 8-16, 17-38, 39-58, 59-73, 74-96, 97-112)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por joel (901 intervenciones) el 27/09/2020 11:04:02
Eso no lo habías dicho Aimar!!!

Pero... si el primer valor es entre 1 y 7, en 100 tarjetas, se va a repetir un montón de veces!!!

No me queda claro lo que indicas en "no se puede repetir ningun numero, ni tampoco se puede repetir un numero en el mismo dia en otra tarjeta"

Puedes especificar con mas detalle!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Aimar (9 intervenciones) el 27/09/2020 15:18:46
Esto es, habra 100 tarjetas con 58 dias y cada dia tendra un numero.

Ejemplo: la tarjeta numero 1 el dia 16 tiene el numero 70 y la tarjeta numero 2 el dia 16 tiene el mismo numero (70), eso es lo que no quiero que ocurra.

Aparte cada tarjeta tendra una cantidad especifica de numeros de cada grupo (pero eso ya esta definido, eso es lo que seria "sorteototala").

El resultado final de UNA tarjeta seria asi:


IMG_20200925_022518
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por joel (901 intervenciones) el 26/09/2020 19:27:23
He estado probando por fuerza bruta y tarda lo suyo...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import random
 
def randomNumbers():
    return random.sample(range(0,1000), 58)
 
def comprovar(valores, lista):
    for el in lista:
        for i in range(58):
            if valores[i]==el[i]:
                return False
    return True
 
lista=[]
while len(lista)!=100:
    valores=randomNumbers()
    if comprovar(valores, lista):
        lista.append(valores)
 
print(lista)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Aimar (9 intervenciones) el 26/09/2020 19:35:02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import random
 
'Creo grupos de numeros.'
okabio = [1, 2, 3, 4, 5, 6, 7]
oialdeakutiosarobe = [8, 9, 10, 11, 12, 13, 14, 15, 16]
uztarlekuloiategi = [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]
albinoantena = [39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58]
labateiztegi = [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73]
usategietamandoegi = [74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94]
txara = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112]
 
'Por cada grupo creado anteriormente escojo un numero exacto y ademas aleatoriamente.'
okabiosorteo = random.sample(okabio, 5)
oialdeakutiosarobesorteo = random.sample(oialdeakutiosarobe, 6)
uztarlekuloiategisorteo = random.sample(uztarlekuloiategi, 9)
albinoantenasorteo = random.sample(albinoantena, 10)
labateiztegisorteo = random.sample(labateiztegi, 8)
usategietamandoegisorteo = random.sample(usategietamandoegi, 10)
txarasorteo = random.sample(txara, 10)
 
'Para hacer una tarjeta de 58 numeros'
from random import shuffle
 
sorteototala = okabiosorteo + oialdeakutiosarobesorteo + uztarlekuloiategisorteo + albinoantenasorteo + \
               labateiztegisorteo + usategietamandoegisorteo + txarasorteo
print(sorteototala)
 
x = []
for i in range(1, 101):
    shuffle(sorteototala)
    x.append(sorteototala)
print(x)
 
i = 0
while i < 58:
    j = 0
    okabio = [1, 2, 3, 4, 5, 6, 7]
    oialdeakutiosarobe = [8, 9, 10, 11, 12, 13, 14, 15, 16]
    uztarlekuloiategi = [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]
    albinoantena = [39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58]
    labateiztegi = [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73]
    usategietamandoegi = [74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94]
    txara = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112]
 
    while j < 100:
        z = j + 1
 
        '''
        if x[j][i] < 8:
            borratu = okabio.index(x[j][i])
            okabio.pop(borratu)
        if 17 > x[j][i] > 7:
            borratu = oialdeakutiosarobe.index(x[j][i])
            oialdeakutiosarobe.pop(borratu)
        if 39 > x[j][i] > 16:
            borratu = uztarlekuloiategi.index(x[j][i])
            uztarlekuloiategi.pop(borratu)
        if 59 > x[j][i] > 38:
            borratu = albinoantena.index(x[j][i])
            albinoantena.pop(borratu)
        if 74 > x[j][i] > 58:
            borratu = labateiztegi.index(x[j][i])
            labateiztegi.pop(borratu)
        if 95 > x[j][i] > 73:
               borratu = usategietamandoegi.index(x[j][i])
            usategietamandoegi.pop(borratu)
        if 113 > x[j][i] > 96:
            borratu = txara.index(x[j][i]])
            txara.pop(borratu)
        '''
        while z < 100:
            if x[j][i] == x[z][i]:
                if x[z][i] < 8:
                    x[z][i] = okabio[0]
                if 17 > x[z][i] > 7:
                    x[z][i] = oialdeakutiosarobe[0]
                if 39 > x[z][i] > 16:
                    x[z][i] = uztarlekuloiategi[0]
                if 59 > x[z][i] > 38:
                    x[z][i] = albinoantena[0]
                if 74 > x[z][i] > 58:
                    x[z][i] = labateiztegi[0]
                if 95 > x[z][i] > 73:
                    x[z][i] = usategietamandoegi[0]
                if 113 > x[z][i] > 96:
                    x[z][i] = txara[0]
            z = z + 1
        j = j + 1
    i = i + 1
 
print(x)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Aimar (9 intervenciones) el 26/09/2020 20:56:15
Estoy intentado con el codigo que me has pasado pero no me da ningun resultado (se queda pensando)

Tal vez no lo he aplicado bien...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import random
 
okabio = [1, 2, 3, 4, 5, 6, 7]
oialdeakutiosarobe = [8, 9, 10, 11, 12, 13, 14, 15, 16]
uztarlekuloiategi = [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]
albinoantena = [39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58]
labateiztegi = [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73]
usategietamandoegi = [74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94]
txara = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112]
 
okabiosorteo = random.sample(okabio, 5)
oialdeakutiosarobesorteo = random.sample(oialdeakutiosarobe, 6)
uztarlekuloiategisorteo = random.sample(uztarlekuloiategi, 9)
albinoantenasorteo = random.sample(albinoantena, 10)
labateiztegisorteo = random.sample(labateiztegi, 8)
usategietamandoegisorteo = random.sample(usategietamandoegi, 10)
txarasorteo = random.sample(txara, 10)
 
 
from random import shuffle
sorteototala = okabiosorteo + oialdeakutiosarobesorteo + uztarlekuloiategisorteo + albinoantenasorteo + \
               labateiztegisorteo + usategietamandoegisorteo + txarasorteo
 
shuffle(sorteototala)
print(sorteototala)
 
 
def randomNumbers():
    return random.sample(sorteototala, 58)
 
 
def comprovar(puestos, sorteo):
    for el in sorteo:
        for i in range(58):
            if puestos[i] == el[i]:
                return False
    return True
 
 
sorteo = []
while len(sorteo) != 100:
    puestos = randomNumbers()
    if comprovar(puestos, sorteo):
        sorteo.append(puestos)
 
print(sorteo)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Aimar (9 intervenciones) el 27/09/2020 00:06:01
Corrijo:

El codigo es valido solo me deja hacer 10 tarjetas, ni una mas jajaja.

No le encuentro ningun sentido, he cambiado el range que pusiste (0, 1000) por "sorteototala" que serian todos los grupos de numeros y eso es lo que ocurre, solo me da 10 tarjetas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por joel (901 intervenciones) el 27/09/2020 11:02:36
Hola Aimar, que valor tiene sorteototala?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros aleatorios y sin repeticion

Publicado por Aimar (9 intervenciones) el 27/09/2020 13:29:47
Sorteototala es todos los grupos de números separado en grupos (112)

La cuestion es que no puede hacerlo o tardaria un milenio por que a partir de 10 tarjetas ya se complica el encontrar una tarjeta que no se repita ningun numero con otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar