Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Josueosor en 28 Enero 2021, 16:54 PM

Título: Ayuda urgente con problema en python
Publicado por: Josueosor en 28 Enero 2021, 16:54 PM
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?
Título: Re: Ayuda urgente con problema en python
Publicado por: Danielㅤ en 28 Enero 2021, 17:23 PM
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
Título: Re: Ayuda urgente con problema en python
Publicado por: Josueosor en 28 Enero 2021, 19:11 PM
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.
Título: Re: Ayuda urgente con problema en python
Publicado por: MCKSys Argentina en 28 Enero 2021, 21:33 PM
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!
Título: Re: Ayuda urgente con problema en python
Publicado por: 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
Título: Re: Ayuda urgente con problema en python
Publicado por: MCKSys Argentina en 28 Enero 2021, 22:54 PM
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!
Título: Re: Ayuda urgente con problema en python
Publicado por: Josueosor en 29 Enero 2021, 00:55 AM
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 .-.
Título: Re: Ayuda urgente con problema en python
Publicado por: tincopasan en 29 Enero 2021, 01:33 AM
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í.