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ú

Mensajes - 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
¡Hola! Muchísimas gracias por responder a mi duda y arreglar el código. La cosa es que soy totalmente nuevo en Python y al intentar hacer este programa estuve comiéndome el coco y no conseguí arreglar el programa entero (antes ni si quiera sabía como crear el diccionario).

Llevo un tiempo sin pasarme por aquí y tampoco me suena haber preguntado algo sobre ese input, a si que imagino que no he sido yo (si he sido yo y no me acuerdo perdón porque probablemente ni lo haya visto)

De nuevo, muchísimas gracias por la ayuda con el código, con Python me cuesta muchísimo más encontrar información que con Java, es por eso que a veces me veo obligado a pedir ayuda a gente con conocimientos muy por encima de los míos. Gracias  ;D
#3
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]
#4
Cita de: crazykenny en 30 Enero 2021, 23:12 PM

Hola, ThePaquet1.

Hace tiempo hice un programa similar en Blitz3D (un compilador basado en Basic) para sacar estadísticas de los partidos, y, bueno, lo que hice fue guardar los resultados de los partidos en una matriz de dos dimensiones para luego poder realizar tareas como la que comentas.

Como nota adicional:

Sobre la "segunda" dimensión de esta debería tener 4 valores; un valor para cada equipo y los otros dos para la puntuación de cada equipo.
Sobre la primera dimensión de matriz; El valor que debe tener es igual al numero de partidos disputados.


Por ultimo, el resto seria utilizar el comando input para añadir los nombres de los equipos y sus resultados.

Espero poder ser de ayuda con la duda que has expuesto en este tema, o, almenos, en el sentido de aportar una idea a la hora de realizar el código.

Muchas gracias por vuestra atención, y, bueno, saludos.
Hola, ¡muchísimas gracias por tu respuesta!
He intentado buscar en Google cómo crear una matriz bidimensional y no sólo no he encontrado como crear una añadiendo nombres (sólo he encontrado creándolas con números), sino que tampoco he encontrado cómo crearla vacía e ir llenándola a medida que escribo equipos y estos ganan puntos. Al menos he entendido que eso es lo que quieres que haga para poder guardar los equipos y sus puntos.

Cita de: tincopasan en 31 Enero 2021, 00:56 AM
ni loco te hago todo el código, si puedo ayudarte y seguro muchos otros, pero tenés que hacer aunque sea de a poco lo que esperas. Suena feo, pero no debes ser muy bueno buscando sino encuentras lo que pides, hay cientos de tutoriales y manuales de python.
Vamos con lo de "fin" y while:

Código (python) [Seleccionar]

equipo1 = ""  #debe estar declarado antes del while
while equipo1 != "FIN": #fin es una cadena debe ir entre comillas dobles o simples como tal
   equipo1 = input(">")
   #todas las líneas que siguen tienen algo mal en general
   """equipo1, puntos1, equipo2, puntos2 = input(">>").split() #esto dará error si solo ingresa FIN
   if puntos1 > puntos2
       puntuacionequipo1 = 3
   else:
       puntuacionequipo2 = 3
else:
   print("Equipo ganador:")
   print("Resultados de la liga:")"""


en fin, de apoco si intentas te ayudaran, sino espera que alguien que este muy aburrido te haga todo el código, que tampoco es tan díficil.
¡Muchísimas gracias a ti también por tu respuesta!
Gracias a ese código ya he entendido como poder usar correctamente el while para que cuando ponga FIN pare de pedirme partidos, pero ahora tengo otra duda. Yo he aprendido a poner diferentes variables en la misma frase mediante este código:
equipo1, sets1, equipo2, sets2= input().split()
La cosa es que con el código que me has enseñado no sé cómo meterlo, ya que tú en el input sólo pones el equipo1, y yo necesito meter en la misma fila los dos equipos con sus respectivos sets y luego sacar de ahí un ganador del partido para sumarle los tres puntos. Si intento agregar en tu input los dos equipos y los sets de cada uno pero luego sólo pongo FIN, me aparece el error "ValueError: not enough values to unpack (expected 4, got 1)", que es el error que me has dicho que iba a aparecer si sólo ponía FIN. ¿Alguna idea?
#5
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.
#6
¡Muchísimas gracias! Estaba desesperado por no saber como concatenar los números en Python.
#7
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.
#8
Cita de: tincopasan en 28 Enero 2021, 20:32 PM
hay varias formas de resolver esto, siguiendo parte de tu lógica:

Código (python) [Seleccionar]
#-*- coding: utf -8 -*-

num1 = int(input('Introduce el primer número: '))
num2 = int(input('Introduce el segundo número: '))
sum = 0
for x in range(1,num1 + 1):
   sum += x ** num2
   print(f'{x} elevado a {num2} es {x**num2}')
print('la suma total es: ',sum)
   

obviamente que está muy incompleto ya que entre otras cosas no tiene manejo de errores
tampoco entendí porque como float en vez de int
y como ves para realizar una operación varias veces se usa un bucle, en este caso for, pero también podría ser while
cambié tu formato de cadena por uno más legible para mí.

Otra cosa, hay un foro de script
No sabía de la existencia de los rangos con el for, lo tomaré en cuenta, muchísimas gracias.
Y por cierto, no sabía que había un foro para Python, perdón por eso  ;D
#9
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?