Создание временных меток с помощью .format()

#python

#python

Вопрос:

В основном в этом задании мы должны создать время, основанное на значениях ran(час, минута):. Ниже я опубликую код, который у меня есть, а затем сообщение об ошибке, которое я получаю. Мой код действительно плохой или я чего-то не хватает? Что означает «Не удается преобразовать объект ‘int’ в str неявно.

 def show_time(hour,min):
if(hour > 12):
    hour = hour -12
if(min < 10):
    min = "0" min
print("{hour}:{min}".format(show_time()))
  

 Traceback (most recent call last):
  File "zyLabsUnitTestRunner.py", line 10, in <module>
    passed = test_passed(test_passed_output_file)
  File "/home/runner/local/unit_test_student_code/zyLabsUnitTest.py", line 33, in test_passed
    ans = show_time(hour,min)
  File "/home/runner/local/unit_test_student_code/main.py", line 15, in show_time
    min = "0" min
TypeError: Can't convert 'int' object to str implicitly
  

Ответ №1:

В следующей строке:

 if(min<10):
    min = "0" min
  

вы пытаетесь объединить строку и целое число, чего python не может сделать. Чтобы преобразовать строку в int, используйте int(str) , а чтобы преобразовать int в строку, используйте str(int)

Ответ №2:

Я думаю, что вы неправильно используете формат, и вы не можете объединить объекты ‘str’ и ‘int’ (min = «0» min). Я думаю, что это работает:

 def show_time(hour,min):
    if(hour > 12):
        hour = hour -12
    if(min < 10):
        min = "0"   str(min)
    print "{}:{}".format(hour, min)
  

Ответ №3:

Причина, по которой вы получаете эту ошибку, заключается в том, что вы "0" объединяете (строку) с min , которая является целым числом.

 >>> '0'   3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
  

Вы бы избежали этого, приведя min в виде строки:

 >>> '0'   str(3)
'03'
  

Однако лучшим решением было бы сохранить такое форматирование для — как вы уже догадались!— str.format() . Он имеет богатый синтаксис, который позволяет вам сохранять эти преобразования там, где они должны быть. Вот пример:

 >>> '{:02d}'.format(3)
'03'
  

В нынешнем виде ваш код имеет несколько проблем:

  1. Вы вызываете его без аргументов в своем фрагменте кода.
  2. Вы используете переменную внутри функции format, а не в ее аргументах: похоже, вы путаете передачу параметров ключевого слова следующим образом:
>>> '{a}:{b}'.format(**{'a':1, 'b':2})
'1:2'
  1. Вы ничего не возвращаете с помощью функции.
  2. min это плохое название для переменной, поскольку это встроенная функция.

Вот гораздо более простой способ сделать все в одном блоке:

 print("{}:{:02d}".format(hour % 12, minute))
  

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

1. Я понимаю все, кроме {:02d}, можете ли вы объяснить, что это делает?