当前时间某处有零时,将其转换为二进制失败

When there is a zero somewhere in the current time, converting it to binary fails

我的任务是创建一个二进制时钟,将当前时间转换为二进制。最后,它应该是这样的: (当时间 = 19:58:37)

hour    minute    second
0 1      0 1        0 0
0 0      1 0        0 1
0 0      0 0        1 1
1 1      1 0        1 1

我的代码如下所示:

from datetime import datetime

hour = 'datetime.now().hour'
minute = 'datetime.now().minute'
second = 'datetime.now().second'

hourc = str(hour)
minutec = str(minute)
secondc = str(second)

# cut
hour1 = hourc[:1]
hour2 = hourc[1:2]
minute1 = minutec[:1]
minute2 = minutec[1:2]
second1 = secondc[:1]
second2 = secondc[1:2]

# covert to binary
binstunde1 = '{0:04b}'.format(hour1)
binstunde2 = '{0:04b}'.format(int(hour2))

binminute1 = '{0:04b}'.format(int(minute1))
binminute2 = '{0:04b}'.format(int(minute2))

binsekunde1 = '{0:04b}'.format(int(second1))
binsekunde2 = '{0:04b}'.format(int(second2))

我现在的问题是当当前时间某处有零时,我收到一条错误消息。 例如: 当当前时间是 07:52:19 时,我收到以下错误消息:

binstunde1 = '{0:04b}'.format(int(hour1)) 
ValueError: invalid literal for int() with base 10: 'd'

我尝试避免使用整数并改用字符串,但随后收到此错误消息:

 binstunde1 = '{0:04b}'.format(hour1)
 ValueError: Unknown format code 'b' for object of type 'str'

我的第二个问题是我无法弄清楚如何像我的示例中那样垂直并彼此相邻地打印输出。

您必须更正您的代码:

更新根据您的意见:

from datetime import datetime

hour = str(datetime.now().hour)
if len(hour)==1:
    hour="0"+hour
minute = str(datetime.now().minute)
if len(minute)==1:
    minute="0"+minute
second = str(datetime.now().second)
if len(second)==1:
    second="0"+second


# cut
hour1 = hour[:1]
hour2 = hour[1:2]
minute1 = minute[:1]
minute2 = minute[1:2]
second1 = second[:1]
second2 = second[1:2]

# covert to binary
binstunde1 = '{0:04b}'.format(int(hour1))
binstunde2 = '{0:04b}'.format(int(hour2))

binminute1 = '{0:04b}'.format(int(minute1))
binminute2 = '{0:04b}'.format(int(minute2))

binsekunde1 = '{0:04b}'.format(int(second1))
binsekunde2 = '{0:04b}'.format(int(second2))

print('hour'+'\t'+'minute'+'\t'+'second')
print(binstunde1+'\t'+binminute1+'\t'+binsekunde1)
print(binstunde2+'\t'+binminute2+'\t'+binsekunde2)

结果:

hour    minute  second
0000    0100    0101
1000    0100    0011

初步回答:

from datetime import datetime
from itertools import zip_longest


hour = datetime.now().hour
minute = datetime.now().minute
second = datetime.now().second

print(hour,minute,second)

# covert to binary
binstunde1 = '{0:08b}'.format(hour)
binminute = '{0:08b}'.format(int(minute))
binsekunde = '{0:08b}'.format(int(second))

print('hour    '+'\t'+'minute  '+'\t'+'second')
print(binstunde1+'\t'+binminute+'\t'+binsekunde)

结果:

hour            minute          second
00001000        00001101        00000011