Ayuda urgente con problema en python

Iniciado por Josueosor, 28 Enero 2021, 16:54 PM

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

Josueosor

Me mandaron a escribir un programa que te pida la hora, luego te pida el formato (am o pm), luego me pedirá cuántas horas al futuro quieres ir y luego a la hora ingresada previamente se le suma las horas al futuro y el formato cambia de AM a pm o viceversa si lo necesita y me lleva comiendo la cabeza por dias, alguien me podría ayudar?

Danielㅤ

Hola, por supuesto que te podemos ayudar, déjanos tu código y coméntanos específicamente que problema o duda tenés con tu código.

Si es para pedido para que te hagamos la tarea, no podremos porque estamos de vacaciones.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Josueosor

#2
Código (python) [Seleccionar]


hour = input('Enter an hour between 1 and 12: ')
h = int(hour)
ampm = input('am (1) or pm (2)? ')              
a = int(ampm)
b = 1
c = 2
future = input('how many hours ahead?: ')
f = int(future)
m = f + h
if m <= 12:
 if a == b:
   print('New hour am: ')
   print(m)
 else:
   print('New hour pm: ')
   print(m)
elif a == b:
 new_hour = h + f - 12
 print('New hour pm: ')
 print(new_hour)
else:
 new_hour2 = h + f - 12
 print('New hour am:')
 print(new_hour2)


Está así, el problema es que no me cambia el formato de AM a pm bien


[MOD] usar las etiquetas GeSHi para publicar codigo.



Necesito ayuda súper rápido :C

[MOD] No hacer doble post. Usa el botón modificar.

MCKSys Argentina

Hola!

Puedes usar datetime para hacer los cálculos:

Código (python) [Seleccionar]

import datetime

hour = input('Enter an hour between 1 and 12: ')
if (not hour.isdecimal()) or (int(hour) < 1 or int(hour) > 12):
    print('You must enter an hour between 1 and 12!')
    exit(0)
h = datetime.datetime(year=2021, month=1, day=1, hour=int(hour))

ampm = input('am (1) or pm (2)? ')
if (not ampm.isdecimal()) or (int(ampm) != 1 and int(ampm) != 2):
    print('You must enter 1 for am or 2 for pm!')
    exit(0)
a = int(ampm)

if a == 2:
    h += datetime.timedelta(hours=12)

future = input('how many hours ahead?: ')
if not future.isdecimal():
    print('You must enter a numer of hours!')
    exit(0)
f = int(future)

m = h + datetime.timedelta(hours=f)
print('New hour %s: ')
print('{:%I %p}'.format(m))
exit(0)


Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Josueosor

No funciona, queda así:

Enter an hour between 1 and 12: 12
am (1) or pm (2)? 1
how many hours ahead?: 4
New hour %s:
04 PM

Deberia quedar 4 AM con esas especificaciones

MCKSys Argentina

#5
Cita de: Josueosor en 28 Enero 2021, 22:04 PM
No funciona, queda así:

Enter an hour between 1 and 12: 12
am (1) or pm (2)? 1
how many hours ahead?: 4
New hour %s:
04 PM

Deberia quedar 4 AM con esas especificaciones

Tienes razón, las 12 AM son las 00:00 en formato de 24 horas.

Debes corregir el if que agrega 12 horas si es PM, para que agregue 12 horas cuando es am. Osea, cambiar el:

Código (python) [Seleccionar]

if a == 2:


por

Código (python) [Seleccionar]

if a == 1:



EDIT:

De paso, deja 1 solo print al final, por ej:
Código (python) [Seleccionar]

print('New hour: {:%I %p}'.format(m))

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Josueosor

lamentablemente ahora el error es al contrario si no eligo 12 como hora inicial queda asi:

Enter an hour between 1 and 12: 4
am (1) or pm (2)? 1
how many hours ahead?: 4
08 PM

al parecer no fui el unico al que le exploto la cabeza .-.

tincopasan

#7
no iba a responder, porque me molesta lo de "urgente", no sé pòrque el foro debería ser ayuda para tareas Y encima con apuros, en fin, como te han ayudado te diré que hay muchas formas de hacerlo, ahora siguiendo tu lógica, no funcionará ni a palos, agrega 50 hs y fijate que pasa, además hay tantas declaraciones inentendible que ni hablar, pero una forma sin uso de bibliotecas sería:
Código (python) [Seleccionar]


hour = int(input('Enter an hour between 1 and 12: '))
ampm = int(input('am (1) or pm (2)? '))              
if ampm == 1:
   ampm ='am'
else:
   ampm = 'pm'
   
future = int(input('how many hours ahead?: '))
m = hour + future

tiempo ,hora_nueva= divmod(m,12)


if tiempo %2 == 1:
   if ampm == 'am':
       ampm = 'pm'
   elif ampm == 'pm':
       ampm = 'am'
   
print(f'La nueva hora es: {hora_nueva} {ampm}')




Citaral parecer no fui el unico al que le exploto la cabeza .-.

esta huevada no le puede explotar la cabeza a nadie

Edit: pegue otro código que también pedían en el foro y también respondí.