#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'
В нынешнем виде ваш код имеет несколько проблем:
- Вы вызываете его без аргументов в своем фрагменте кода.
- Вы используете переменную внутри функции format, а не в ее аргументах: похоже, вы путаете передачу параметров ключевого слова следующим образом:
>>> '{a}:{b}'.format(**{'a':1, 'b':2}) '1:2'
- Вы ничего не возвращаете с помощью функции.
min
это плохое название для переменной, поскольку это встроенная функция.
Вот гораздо более простой способ сделать все в одном блоке:
print("{}:{:02d}".format(hour % 12, minute))
Комментарии:
1. Я понимаю все, кроме {:02d}, можете ли вы объяснить, что это делает?