Python - Dudas en ausencia de GOTO

 
Vista:
sin imagen de perfil

Dudas en ausencia de GOTO

Publicado por Frank (2 intervenciones) el 26/09/2016 19:35:11
Saludos a todos.
Recuperando poco a poco mis años pasados programando en basic, cobol y visual basic, he llegado a este lenguaje que parece adecuado para mis proyectos a corto plazo (algunas creaciones con rabsperry).

Sin embargo, hay algo que me tiene bloqueado, y es la ausencia de la función GOTO, que siempre me ha permitido moverme por los programas en función de las necesidades.

Para quitarme el oxido y hacerme con los fundamentos de phyton, me decidi a crear un sencillo programa, basado en una necesidad real, que es crear aleatoriamente parejas para una competición de padel.

Cada participante tiene un ranking, y quiero que el programa elija dos parejas de entre los jugadores disponibles, y luego compare el ranking de las parejas para ver si el partido esta equilibrado.

Os copio lo que he avanzado:

---------------------------------------------------------------------------------------------
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
import random
 
 
jugadores=[1,3,5,8,10,12,14,15,18,20,21,23]
 
#cada numero corresponde al ranking de ese jugador.
 
jugador1=random.choice(jugadores)
 
jugador2=random.choice(jugadores)
 
 
while jugador1==jugador2:
    jugador2=random.choice(jugadores)
 
#con esto me aseguro de que la primera pareja esta formada por jugadores diferentes.
 
pareja1=(jugador1,jugador2)
 
 
valorPareja1=(jugador1+jugador2)
 
jugador3=random.choice(jugadores)
 
while jugador3==jugador1:
    jugador3=random.choice(jugadores)
 
while jugador3==jugador2:
    jugador3=random.choice(jugadores)
 
jugador4=random.choice(jugadores)
 
while jugador4==jugador1:
    jugador3=random.choice(jugadores)
 
while jugador4==jugador2:
    jugador3=random.choice(jugadores)
 
while jugador4==jugador2:
    jugador3=random.choice(jugadores)
 
#este bloque, es para que los 4 jugadores sean diferentes.
 
pareja2=(jugador3,jugador4)
 
 
valorPareja2=(jugador3+jugador4)
 
diferenciaParejas=(valorPareja1-valorPareja2)
diferenciaParejas=int(diferenciaParejas)
 
#Aquí viene el bloqueo. Si yo pudiese disponer de GOTO, tras evaluar si el ranking de las dos parejas esta dentro de una diferencia (+/- 10 puntos por ejemplo), enviaría de nuevo el programa a la elección de la pareja dos, y no abandonaría ese bucle hasta que no se cumpliese la condición.

¿Cómo solucionáis este problema? Esta claro que hay una forma de sortear la ausencia de GO TO, pero me esta costando verla.

Saludos y gracias anticipadas.
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: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Dudas en ausencia de GOTO

Publicado por tincopasan (1082 intervenciones) el 27/09/2016 02:01:30
hola:
en los lenguajes "modernos" se sacó el goto por ser un muy mal hábito de programación. Python provee de la creación de funciones que pueden ser llamadas en cualquier momento. por ejemplo:
1
2
3
4
5
def crea_pareja1():
    todo el código para crear la pareja 1
 
def crea_pareja2():
    todo el codigo para crear la pareja 2

ahora podés o no crear otra función pero el caso es que:
1
2
crea_pareja1()
crea_pareja2()
es como se llaman(invocan) las funciones
si las diferencias no te dan volvés a llamar a crea_pareja2()

esto es una explicación muy básica, buscá el uso y creación de funciones en python.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Dudas en ausencia de GOTO

Publicado por tincopasan (1082 intervenciones) el 27/09/2016 06:22:58
modifiqué un poco tu código para que veas lo de las funciones! espero se entienda ya que soy muy perro.
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
import random
jugadores=[1,3,5,8,10,12,14,15,18,20,21,23]
 
def crea_pareja1():
#cada numero corresponde al ranking de ese jugador.
    global jugador1,jugador2
    jugador1=random.choice(jugadores)
    jugador2=random.choice(jugadores)
    while jugador1==jugador2:
        jugador2=random.choice(jugadores)
#con esto me aseguro de que la primera pareja esta formada por jugadores diferentes.
    pareja1=(jugador1,jugador2)
    valorPareja1=(jugador1+jugador2)
    return valorPareja1
 
def crea_pareja2():
    global jugador3,jugador4
    jugador3=random.choice(jugadores)
 
    while jugador3==jugador1 or jugador3 == jugador2:
        jugador3=random.choice(jugadores)
 
    jugador4=random.choice(jugadores)
    while jugador4==jugador1 or jugador4== jugador2 or jugador4 == jugador3:
        jugador3=random.choice(jugadores)
#este bloque, es para que los 4 jugadores sean diferentes.
    pareja2=(jugador3,jugador4)
    valorPareja2=(jugador3+jugador4)
    return valorPareja2
 
valor1= crea_pareja1()
valor2= crea_pareja2()
valores=[valor1,valor2]
valores.sort()
diferenciaParejas=valores[1] - valores[0]
 
while diferenciaParejas > 10:
    valores=[valor1,crea_pareja2()]
    valores.sort()
    diferenciaParejas=valores[1] - valores[0]
 
print("El jugador 1 es el {} y el jugador 2 es el {}".format(jugador1,jugador2))
print("El jugador 3 es el {} y el jugador 4 es el {}".format(jugador3,jugador4))
print(diferenciaParejas)
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

Dudas en ausencia de GOTO

Publicado por Frank (2 intervenciones) el 27/09/2016 17:37:56
Creo te te entiendo. Voy a probar un par de ejemplos para comprender bien el rama de las funciones.

Es cierto que el GOTO creaba malos hábitos de programación, y a veces seguir el código era un caos, pero, era tremendamente practico.

En fin, todo es acostumbrarse a los nuevos lenguajes, que seguro que a la larga, ofrecerán mas ventajas.

Muchas gracias por tu ayuda.
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