Programa que pide un conjunto de números y los cambia de posición

Iniciado por ThePaquet1, 5 Marzo 2021, 16:37 PM

0 Miembros y 1 Visitante están viendo este tema.

ThePaquet1

Buenas, estoy haciendo un programa que su funcionamiento es el siguiente:

- Pido por teclado un conjunto de números separados por espacios, específicamente 5, por ejemplo:

1 5 4 3 2

- Esos números representan una torre, siendo el primer número introducido que está más abajo y el último el que está más arriba, así:

2
3
4
5
1


- Después pido que introduzcan "movimientos" (otro conjunto de números separados por espacios), específicamente 3 números, ejemplo:

2 3 2

- Estos números representan los movimientos que se han hecho sobre la torre. El primer movimiento da la vuelta a las 2 primeras tortitas, sobre la torre resultante se da la vuelta a las 3 primeras tortitas y sobre la torre resultante se da la vuelta a las 2 primeras. A continuación hago una demostración, la primera torre es la original que puse antes, y las demás son aplicando los movimientos (la segunda torre con el movimiento 2, la tercera torre con el movimiento 3 y la cuarta torre con el movimiento 2):

2        3        4        2
3        2        2        4
4   ->   4   ->   3   ->   3
5        5        5        5
1        1        1        1


- Por último, cuando se hayan realizado todos los movimientos, se devuelve el valor que se encuentre arriba de la torre. En el ejemplo que he puesto la salida sería:

2

Esto es lo que he hecho:
print("Introduzca la posición de los cinco números:")
num1, num2, num3, num4, num5 = input().split()
numeros = [num5, num4, num3, num2, num1]
numero = []

x = list(map(int, input("Introduzca los movimientos que va a realizar: ").split()))

for z in range(len(x)):
    for y in range(x[z]):
        numero.append(numeros[y])
    numero.reverse()
    for y in range(len(numero)):
        numeros[y] = numero[y]
    numero.clear()
for p in range(len(numeros)):
    print(numeros[p])
print("El número que se encuentra en la cima de la torre es el: " + numeros[0])


El programa funciona perfectamente, me muestra la torre final con los movimientos aplicados y el número que está arriba de la torre, pero al parecer me han dicho que debería haber hecho todo con arrays y que eso está mal, pero que yo sepa lo he hecho con un array, ¿no? ¿Hay alguna otra forma con arrays de hacer esto?

Muchas gracias por adelantado.

tincopasan

habría que ver que es lo que quieren o esperan quienes te dan el ejercicio, hay muchas formas de resolver esto, inclusive me cauda gracia el término array, es una lista como tal, según lo que pusiste un ejemplo:
Código (python) [Seleccionar]

#-*- coding: utf -8 -*-
print("Introduzca la posición de los cinco números:")
numeros=[int(x) for x in input(">> ").split()][::-1]
movimientos = [int(x) for x in input("Introduzca los movimientos que va a realizar: ").split()]
temp=numeros[:]
for j in movimientos:
   
    numeros[0] = numeros[j-1]
    numeros[j- 1] = temp[0]
    temp=numeros[:]
    print(numeros) #opcional
print("El número que se encuentra en la cima de la torre es el: ",numeros[0])   
   


como dije es una de las tantas formas, no te muestro otra porque no me interesa el criterio que tengan los que esperan la respuesta.

Serapis

Cita de: ThePaquet1 en  5 Marzo 2021, 16:37 PM
... pero al parecer me han dicho que debería haber hecho todo con arrays y que eso está mal, pero que yo sepa lo he hecho con un array, ¿no? ¿Hay alguna otra forma con arrays de hacer esto?
Lo que quieren es que pienses, que sepas cómo sucede, no simplemente que hagas que suceda...

Dicho de otro modo: Quieren que uses bucles y que cambies elementos de un array a otro o dentro del mismo array usando variables temporales e índices entre elementos.
No quieren que utilices métodos de objetos que te faclitan el trabajo... eso para cuando seas profesional ahora toca aprender como hacerlo 'manualmente'.