Получение времени суток от пользователя для простого глупого приложения - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в Python, и я хотел сделать myslef простым кусочком кода, который потребовал бы моего времени, когда я пришел на работу, и сказал, когда я вернусь домой.

Проблема заключается в форматировании ввода и добавлении в него этих 8 часов работы с выводом.

Я могу заставить его работать с целыми числами, но этого недостаточно. Я хотел бы видеть формат HH:MM в I / O

Я искал по всему Интернету, но я нашел в основном статьи и советы по времени в целом (дата и, что более важно, datetime.now), тогда как мне нужно, чтобы он понимал, что я хочу ввести время, когда я пришел на работу, и время, когда я ухожу с работы, независимо от дня и т. д.

# When do I get to go home program
# first we need ot define a variable to use it to store the time when I came 
# to work
# That is atw (arrived to work)
# gh is "go home"

from datetime import time
atw = input ("When I came to work in format of HH:MM \n")
#atw = datetime.strptime(input('enter time you arrived to work in HHMM format: '), "%H%M")
h,m = map (int, time.split(":"))
#gh = atw (hour = h, minute = m)
print (("I came to work @", atw ,"%H%M"))

gh = atw + 0800  
print ("You can go home @ ", gh)

Все виды сообщений об ошибках, от синтаксиса до проблем с форматом ввода и добавлением этих 8 часов работы к окончательному числу (gh переменная)

Есть ли какое-то удивительное существо, которое может помочь мне понять, как я на самом деле заставляю python понимать, что я добавляю время к переменной, которая должна быть отформатирована как ввод времени (HH:MM), поступающий от пользователя?

1 Ответ

0 голосов
/ 09 июня 2019

Хорошо, давайте сделаем это шаг за шагом, потому что, как вы сказали, есть Все виды сообщений об ошибках, от синтаксиса до ...

from datetime import time
atw = input ("When I came to work in format of HH:MM \n")

Эти первые две строки работают без проблем, это нормально.

h,m = map (int, time.split(":"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.time' has no attribute 'split'

О, ошибка, давайте прочитаем, что говорится в сообщении об ошибке: Тип объекта «datetime.time» не имеет атрибута «split» . Ну, это правильно, потому что мы не хотим разделять time, но время, которое мы дали для ввода и которое имеет имя atw, поэтому давайте использовать это:

h,m = map (int, atw.split(":"))
print (("I came to work @", atw ,"%H%M"))

Нет ошибок, но странный вывод:

(«Я пришел на работу», «08:17», «% H% M»)

Вы, вероятно, не хотели выводить кортеж (круглые скобки) и хотели отформатировать этот вывод, как я вижу из строки форматирования "%H%M". К счастью, python (> = 3.6) имеет хорошее решение для этого, которое называется f-strings :

print (f"I came to work @{atw}")

Хммм, подождите, как насчет форматирования, которое просто выводит то, что мы внесли ... Так что используйте h и m:

print (f"I came to work @{h:02d}:{m:02d}")

Выполните поиск в Google, что означает :02d, и какие еще есть варианты;) Следующая строка:

gh = atw + 0800  
  File "<stdin>", line 1
    gh = atw + 0800  
                  ^
SyntaxError: invalid token

Хммм, вы хотите добавить 8 часов, чтобы получить конечное время, но все, что вы получаете, это синтаксическая ошибка ... Это потому, что 0800 не является допустимой конструкцией Python, вы, вероятно, имеете только 8? Давайте попробуем это ...

gh = atw + 8  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

Еще одна ошибка, но почему? Вы используете строку atw, хотя вы уже разбили ее на два целых числа h и m, где h обозначает часы:

gh = h + 8
print ("You can go home @ ", gh)

Ах, черт побери, эта печать снова. Посмотрите выше и используйте f-строки:

print (f"You can go home @{gh}:{m}")

А теперь попробуйте посмотреть, получите ли вы решение, используя strptime, как предложено в комментариях @ mkrieger1. И pleeeeease сделать урок Python:)

...