Задача со временем пересылки

#python

#python

Вопрос:

У меня возникли проблемы с выполнением задачи.Задача требует, чтобы пользователь установил время (от 1 до 12), затем объявил, является ли оно am или pm, и на сколько часов его пересылать.Время пересылки также должно показывать отметку времени am / pm в зависимости от того, сколько оно пересылается.Пример:

 Input time: 8
am or pm : am
forward: 5
new time: 1pm
  

Я пробовал это:

 time = eval(input('Input time(1-12):'))
ampm = eval(input('am or pm?'))
forward = eval(input('Forward:'))

if ampm == am:
    if time   forward > 24:
        new time = (time   forward)%24
        x = 'am'
    else:
        new time = (time   forward)%12
        x = 'pm'
    print('New time is:' , new time , x)

if ampm == pm:
    if time   forward > 12:
        new time = (time   forward)%12
        x = 'pm'
    else:
        new time = (time   forward)%24
        x = 'am'
    print('New time is:' , new time , x)
  

Комментарии:

1. какую ошибку вы видите?

2. Иногда am и pm путаются при пересылке, например, когда я пересылаю 8 утра с 5 часов, я получаю 1 час дня, что нормально, но когда я пересылаю 8 утра с 25 часов, я получаю 9 вечера вместо 9 утра.

3. Где am и pm определены? Вы проверяли, каково результирующее значение ampm при запуске программы, и оценивается ли оно как равное am или нет, и оценивается ли оно как равное pm или нет? Возможно, вы имели в виду сравнение со строками 'am' и 'pm' ?

4. Это не может быть вашим реальным кодом; повторяющиеся появления new time — это все синтаксические ошибки.

5. А? Это мой код, и у меня нет ни одной синтаксической ошибки, я получаю неправильные результаты только потому, что мой код неправильный.

Ответ №1:

Я предлагаю просто преобразовать время в формат 24 часа, переадресовать, а затем преобразовать обратно в формат 12 часов (am / pm).

Вот как я бы это сделал:

 time = int(input('Input time(1-12):'))
ampm = input('am or pm?')
forward = int(input('Forward:'))

# first get the 24h formatted time
time_24 = time   12 if ampm == 'pm' else time

# then forward time to max 24, else start over from 0
time_24 = (time_24   forward) % 24

# finally convert back to 12h(am/pm) format
time_12 = f'{time_24-12}pm' if time_24 > 12 else f'{time_24}am'

# print out the forwarded time
print(time_12)
  

Комментарии:

1. я получаю сообщение об ошибке, когда пробую ваш код, в нем говорится, что time_24 не определено, когда я устанавливаю ‘pm’ на входе.

2. nvm я исправил это, заменив time_24 на просто time везде. Спасибо за помощь, хотя!

3. @Daxon Я был бы признателен, если бы вы могли проголосовать и принять ответ 🙂

4. Да, нет проблем, приятель, я забыл это сделать, мой плохой.