Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ThePaquet1

#1
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.
#2
Buenas, tengo un programa que pide partidos con equipos y sus sets, calcula quien gana para otorgarle 3 puntos y lo guarda en un diccionario (tanto el nombre del equipo como los puntos que consiguen al ganar) para luego mostrarlo en un resultado final. Está constantemente pidiendo partidos hasta que introduzco la palabra FIN. Funciona de la siguiente forma:
Introduces 2 equipos con sus respectivos sets en la misma línea separados por espacios:
equipoA 1 equipoB 2 //El equipoA tiene 1 set y el equipoB tiene 2, por lo que el equipoB gana 3 puntos.
equipoB 4 equipoC 3 //equipoB tiene más sets, por lo que vuelve a ganar 3 puntos (ya lleva 6 por el anterior partido).
equipoD 2 equipoA 3 //equipoA gana, por lo que obtiene 3 puntos

El problema es que al introducir ese último equipo, me salta un error el cuál no entiendo:
Traceback (most recent call last):
 File "(Ruta del archivo)", line 16, in <module>
   diccionario[partido[2]] = diccionario[partido[0]] + 3
KeyError: 'equipoD'


Este es el código completo:

Código (python) [Seleccionar]

[code]diccionario = {}
puntos1 = 0
puntos2 = 0
parar = ""
while parar != "FIN":
   partido = list(map(str, input("Introduzca un partido: ").split()))
   if partido[0] != "FIN":
       pal1 = partido[0]
       equipo1 = partido[0]
       puntos1 = partido[1]
       equipo2 = partido[2]
       puntos2 = partido[3]
       if puntos1 > puntos2 and partido[0] in diccionario:
           diccionario[partido[0]] = diccionario[partido[0]] + 3
       elif puntos1 < puntos2 and partido[2] in diccionario:
           diccionario[partido[2]] = diccionario[partido[0]] + 3
       elif puntos1 > puntos2:
           diccionario[partido[0]] = 3
           diccionario[partido[2]] = 0
       elif puntos2 > puntos1:
           diccionario[partido[2]] = 3
           diccionario[partido[0]] = 0
       else:
           print("No puede haber empates en un partido de pádel.")
       parar = partido[0]
   else:
       break
print("Equipo ganador: " + max(diccionario, key=diccionario.get))
print("Resultados de la liga:")
print(diccionario)


Sin embargo, hay a veces que el programa sí funciona si, por ejemplo, introduzco esto:
madrid 3 barcelona 2
betis 4 getafe 5
madrid 4 getafe 3
FIN
Equipo ganador: madrid
Resultados de la liga:
{'madrid': 6, 'barcelona': 0, 'getafe': 3, 'betis': 0}

He visto que si en el tercer partido no pongo un equipo repetido, me sale el error. ¿Alguien entiende por qué?

Además de esto, tengo otro error, y es que la idea del programa es que si un equipo gana un partido, gana 3 puntos como expliqué antes, pero si pierde, no gana ni pierde puntos, pero mi programa cuando un equipo pierde un partido, le establece los puntos a 0, en vez de simplemente dejarle su puntuación normal.
¿Alguien entiende por qué tengo ambos errores? ¡Muchas gracias por la ayuda![/code]
#3
Hola, he intentado hacer un programa que funciona así:
Pido partidos de una liga de pádel en este formato: {NombreEquipoA} {SetsGanadosEquipoA} {NombreEquipoB} {SetsGanadosEquipoB}
Todo eso se escribe en la misma línea, pero cada partido se escribe en una línea diferente. En cada partido, el equipo con más sets gana. Cada vez que un equipo gana un partido, suman 3 puntos, y si pierde, 0.
Tengo que guardar de alguna forma los nombres de todos los equipos que escriba porque un equipo puede aparecer en diferentes partidos, además como un equipo puede aparecer varias veces también tengo que guardar e ir actualizando su puntuación (si han ganado 1 partido, tendrá 3 puntos, pero si luego gana otro partido, aumentará a 6 puntos).
Ojo, tengo que introducir todo el rato partidos hasta que introduzca la palabra FIN, y en ese momento mostrará los resultados con el ganador (que será el equipo con más puntos), y luego mostrará un ranking de puntuaciones de los equipos.

Ya que es algo lioso, os pongo un ejemplo: voy a introducir 3 partidos y luego la palabra FIN, y entonces mostrará los resultados:

Buenardos 1 Malardos 4    //Como el equipo "Malardos" tiene más sets, gana el partido y obtiene 3 puntos.

Picasos 2 Redbull 3    //Gana el equipo "Redbull", por lo que obtiene 3 puntos

Malardos 4 Camisetas 3    //Vuelve a ganar el equipo Malardos, por lo que ahora tienen 6 puntos

FIN //Al introducir esto, el programa deja de pedirme partidos y muestra los resultados

Equipo ganador: "Malardos"
Resultados de la liga:
Malardos - 6 puntos
Redbull - 3 puntos
Buenardos - 0 puntos //El ranking es de 3, o sea que no es necesario poner todos los equipos con 0 puntos

Y básicamente ese sería el programa, poner varios partidos hasta poner FIN, los equipos ganan puntos al ganar partidos, y luego mostrar el resultado con un ranking de 3 equipos como máximo.

Esto es lo que tengo de código:
while equipo1 != FIN:
    equipo1, puntos1, equipo2, puntos2 = input().split()
    if puntos1 > puntos2
        puntuacionequipo1 = 3
    else:
        puntuacionequipo2 = 3
else:
    print("Equipo ganador:")
    print("Resultados de la liga:")


Básicamente lo que tengo es muy poco, porque por más que busco en Google (tanto en inglés como en español), no comprendo como funciona el while en Python para que me pida constantemente equipos hasta poner FIN, y tampoco sé como poder guardar los nombres de los equipos ni sumarles puntos cuando ganan un partido para luego poder hacer un ranking. Y bueno, en la parte donde imprimo los resultados tampoco he escrito ningún equipo porque para empezar no sé cómo seleccionar al equipo ganador si no sé como añadirles puntos cuando ganan partidos.

Sé que estoy pidiendo mucha ayuda, pero llevo desde el jueves buscando e informándome sobre Python y no consigo realizar este programa, a si que si alguien pudiera ayudarme estaría increíblemente agradecido.
#4
Buenas, estoy intentando hacer un programa que básicamente funciona de esta forma:
Pido por pantalla un número, y a partir de ese número debo formar un número N concatenando todos los números entre 1 y N. Por ejemplo, si introduzco un 12, el número N será 123456789101112. Una vez se haya formado N debo devolver por pantalla "SI" en el caso de que N sea divisible entre 3 y "NO" en el caso de que no lo sea.

Esto es lo que tengo:

n = int(input("Introduce un número:"))

for x in range (n + 1):
   if(n%3==0):
       print("SI")
   else:
       print("NO")


Acabo de empezar a utilizar el for y el range y no sé que estoy haciendo mal, si alguien puede echarme una mano estaría muy agradecido.
#5
Hola, necesito hacer un programa de Python que pida dos números. El primer número será N y el segundo P. Una vez obtenidos ambos números el programa deberá calcular la suma de los N primeros números elevados al valor P, siguiendo esta fórmula: 1^P + 2^P + 3^P + 4^P... + N^P

Si introduzco, por ejemplo, un 3 y un 5, el programa calculará lo siguiente: 1^5 + 2^5 + 3^5 = 276

Ahora mismo tengo de código esto:

---------------------------------------
num1 = input('Introduce el primer número: ')
num2 = input('Introduce el segundo número: ')

sum = float(num1) ** float(num2)

print('{0} elevado a {1} es {2}'.format(num1, num2, sum))
---------------------------------------

El problema es que no sé como hacer para que, por ejemplo, si yo introduzco un 3 y un 5, la operación sea 1 ^ 5 + 2 ^ 5 + 3 ^ 5, en vez de únicamente 3^5 que es lo que actualmente hace mi programa. ¿Alguien podría ayudarme?