Python - Suma de resultados.

 
Vista:
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Jorge Alberto (48 intervenciones) el 15/12/2020 00:02:24
Hola. ¿Cómo andan? Estoy con un problema en un ejercicio en el que hay que sumar resultados. Como viene de otros anteriores, es mejor si resumo todo lo que hay que hacer en vez de copiar todos los textos.

El ejercicio pide calcular el costo de las llamadas realizadas por un teléfono, las cuales se dividen en cortas y largas. El precio difiere según el tipo de llamada. El usuario deberá ingresar el precio por segundo de ambos tipos de llamadas, la duración máxima de una llamada corta y la duración de cada llamada hecha, dadas en horas, minutos y segundos.

Lo que yo hice fue lo siguiente:

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
def main():
  # El usuario ingresará el tiempo de duración máxima de una llamada corta, el precio de la misma y el de una llamada larga,
  # más el tiempo de duración de la llamada (dado en horas, minutos y segundos)
  # El resultado final será el precio de todas las llamadas sumadas.
 
  pc = float(input("Ingrese el precio de una llamada corta: "))
  print("El precio de una llamada corta es $",pc, "por segundo")
  pl = float(input("Ingrese el precio de una llamada larga: "))
  print("El precio de una llamada larga es $",pl, "por segundo")
  print("Por favor, ingres el tiempo máximo de una llamada corta:")
  hm = int(input("Horas: "))
  mm = int(input("Minutos: "))
  sm = int(input("Segundos: "))
  dm = 3600*hm+60*mm+sm
  n = int(input("Ingrese la cantidad de llamadas realizadas: "))
  print("Por favor, ingrese la duración de cada llamada: ")
  for x in range(1,n+1):
    h = int(input("Horas: "))
    m = int(input("Minutos: "))
    s = int(input("Segundos: "))
    dl = 3600*h + 60*m + s
    print(dl)
    if dl<=dm:
      return dl*pc
    else:
      return dl*pl
    print("Duración: ",dl, "Costo: ",dl*pc)
    print("Duración: ",dl, "Costo: ",dl*pl)
    costo_total = 0
    costo_total = costo_total + dl*pc
    print(costo_total)
 
main()


Para una sola llamada sale perfecto, pero cuando intento con más de una, solamente me da el resultado de la primera. Es decir, no puedo ni especificar la duración de las otras llamadas, ni sumar el importe total (lógico, ya que no puedo ingresar la segunda llamada). Como comentario adicional, los prints ("Duración: ", dl, ... ) no me aparecen cuando corro el programa. Me da la sensación que el programa termina después de x = 1 y no sé cómo solucionarlo.

Muchas gracias.
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: 31
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Marcos (5 intervenciones) el 15/12/2020 01:48:40
¿Puédes poner el programa completo? Quitando que haces print de ambas tarifas, sin discriminar si es corta o larga, funciona correctamente.
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 Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Jorge Alberto (48 intervenciones) el 15/12/2020 02:07:30
Perdón, recién empiezo a estudiar la carrera (para colmo, lo hago por mi cuenta) y no entendí. ¿A qué te referís con "poner el programa completo"?
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: 31
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Marcos (5 intervenciones) el 15/12/2020 02:17:33
Me refiero a que si puedes enviarme el código en donde llamas a esta función (main())
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 Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Jorge Alberto (48 intervenciones) el 15/12/2020 02:20:28
Ahhhh ok. La función es la que definí arriba. En la primera línea defino la función main(), que debería hacer lo pedido en el ejercicio.
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: 31
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Marcos (5 intervenciones) el 15/12/2020 02:33:17
Mejor envíame el enunciado del ejercicio. Creo que no he comprendido el funcionamiento esperado.
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 Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Jorge Alberto (48 intervenciones) el 15/12/2020 02:38:42
mmmm seguimos sin entendernos jaja la función no funciona del todo bien. Si realiza una sola llamada por teléfono, no hay drama. Pero cuando quiero calcular el precio total de varias llamadas (con 2 ya es suficiente), sigue calculando el precio de la primera, sin siquiera pedirme las duraciones de las otras.

Por las dudas, cuando hablas del "código donde haces llamada a esa función" te referís al código que indica qué es lo que hace la función (en lenguaje de programación, no lenguaje común).?
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: 31
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Marcos (5 intervenciones) el 15/12/2020 03:21:48
Vale, ya me he enterado del problema. Perdón por tanta vuelta.
El problema es que pones return, eso te saca de la función. También hay que poner los print en su sitio, y la suma para dar el resultado final no te iba a funcionar.
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
def main():
  # El usuario ingresará el tiempo de duración máxima de una llamada corta, el precio de la misma y el de una llamada larga,
  # más el tiempo de duración de la llamada (dado en horas, minutos y segundos)
  # El resultado final será el precio de todas las llamadas sumadas.
 
  costo_total = 0
 
  pc = float(input("Ingrese el precio de una llamada corta: "))
  print("El precio de una llamada corta es $",pc, "por segundo")
  pl = float(input("Ingrese el precio de una llamada larga: "))
  print("El precio de una llamada larga es $",pl, "por segundo")
  print("Por favor, ingres el tiempo máximo de una llamada corta:")
  hm = int(input("Horas: "))
  mm = int(input("Minutos: "))
  sm = int(input("Segundos: "))
  dm = 3600*hm+60*mm+sm
  n = int(input("Ingrese la cantidad de llamadas realizadas: "))
  print("Por favor, ingrese la duración de cada llamada: ")
  for x in range(1,n+1):
    h = int(input("Horas: "))
    m = int(input("Minutos: "))
    s = int(input("Segundos: "))
    dl = 3600*h + 60*m + s
    print(dl)
    if dl<=dm:
      print("Duración: ",dl, "Costo: ",dl*pc)
      costo_total=costo_total + (dl*pc)
    else:
      print("Duración: ",dl, "Costo: ",dl*pl)
      costo_total=costo_total + (dl*pl)
  print(costo_total)
 
main()
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 Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Jorge Alberto (48 intervenciones) el 15/12/2020 03:31:57
Perfecto. Ya lo modifiqué y funciona perfectamente. Probé sólo con dos, pero no veo razón por la cual no funcione con más.
Ahora me estoy peleando con otro ejercicio, pero creo que es más fácil de entender el problema jaja.

Muchas gracias.
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: 31
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Marcos (5 intervenciones) el 15/12/2020 03:34:39
Cualquier duda, aquí estoy.
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
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

Suma de resultados.

Publicado por tincopasan (1082 intervenciones) el 15/12/2020 04:55:33
te muestro otra forma de hacerlo, por supuesto que siguiendo la línea de tu código basicamente:
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
#-*- coding: utf -8 -*-
# El usuario ingresará el tiempo de duración máxima de una llamada corta, el precio de la misma y el de una llamada larga,
# más el tiempo de duración de la llamada (dado en horas, minutos y segundos)
# El resultado final será el precio de todas las llamadas sumadas.
def main():
    costo_total = 0
    pc = float(input("Ingrese el precio de una llamada corta por segundo: "))
    print(f"El precio de una llamada corta es ${pc} por segundo")
 
    pl = float(input("Ingrese el precio de una llamada larga por segundo: "))
    print(f"El precio de una llamada larga es ${pl} por segundo")
 
    print("Por favor, ingrese el tiempo máximo de una llamada corta con formato = hh/mm/ss :")
    hora = input("Tiempo máximo de llamada corta: ").split("/")
 
    hm,mm,sm = int(hora[0]),int(hora[1]),int(hora[2])
    dm = hm*3600 + mm*60 + sm
 
    n = int(input("Ingrese la cantidad de llamadas realizadas: "))
    print("Por favor, ingrese la duración de cada llamada: ")
 
    for x in range(1,n+1):
        hora = input(f"Tiempo de la llamada {x}  : ").split("/")
        hm,mm,sm = int(hora[0]),int(hora[1]),int(hora[2])
        dl = hm*3600 + mm*60 + sm
        if dl<= dm:
            parcial = dl*pc
        else:
            parcial = dl*pl
 
        print(f"Duración en segundos: {dl}, Costo:{parcial:.2f}")
        costo_total += parcial
 
    return f"El costo total de las llamadas es: ${costo_total:.2}"
 
print(main())
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 Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Suma de resultados.

Publicado por Jorge Alberto (48 intervenciones) el 15/12/2020 05:35:52
Muchas gracias. Mañana lo voy a ver bien completo porque ahora estoy con otro y, por lo que vi, hay algunas cosas que todavía no vi (soy MUY nuevo en programación jaja) como .split en la línea 14. Pero cuando le preste más atención seguramente lo entienda (y, de última, lo entenderé con el tiempo).

Muchas gracias.

Jorge
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