首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Microbit上将十进制转换为二进制

在Microbit上将十进制转换为二进制
EN

Stack Overflow用户
提问于 2016-08-26 17:57:57
回答 1查看 865关注 0票数 2

我认为这将是一个有趣的想法,把我的BBC Microbit变成一个数字时钟-具体地说,一个二进制数字时钟。为了做到这一点,我用Python编写了一些代码:

代码语言:javascript
复制
from microbit import *

def makeBinary(intValue,padding):
    number = intValue
    returnValue = ""
    brightness = 4 #value 0 to 8
    while number > 0:
        bit = number % 2
        if bit > 0:
            bit = brightness
        quotient = number / 2
        returnValue = str(bit)+returnValue
        number = quotient
    for i in range(len(returnValue),padding):
        returnValue = "0"+returnValue
    return returnValue

timeAdvance = 0
minuteAdvance = 0
hourAdvance = 0
secondCounter = 0
while True:
    if button_a.was_pressed():
        #advance hours
        hourAdvance = hourAdvance + 1
        if hourAdvance > 23:
            hourAdvance = 0
        timeAdvance = (hourAdvance*60*60*1000)+(minuteAdvance*60*1000)
    elif button_b.was_pressed():
        #advance minutes
        minuteAdvance = minuteAdvance + 1
        if minuteAdvance > 59:
            minuteAdvance = 0
        timeAdvance = (hourAdvance*60*60*1000)+(minuteAdvance*60*1000)
    else:
        #calculate and display time
        if (running_time()-secondCounter) > 1000:
            secondCounter = running_time()
            seconds = (running_time()/1000)%60
            minutes = ((running_time()+timeAdvance)/1000/60)%60
            hours = ((running_time()+timeAdvance)/1000/60/60)%24
            pmString = "0"
            addthirtyMString = "00000"
            addthirtySString = "00000"
            if hours>12:
                pmString = "9"
                hours = hours - 12
            if minutes>29:
                addthirtyMString = "00900"
                minutes = minutes - 30
            if seconds>29:
                addthirtySString = "00900"
                seconds = seconds - 30
            hourString = makeBinary(hours,4)
            minuteString = makeBinary(minutes,5)
            secondString = makeBinary(seconds,5)
            time = Image(pmString+hourString+":"+minuteString+":"+addthirtyMString+":"+secondString+":"+addthirtySString)
            display.show(time)

问题是is不起作用!在Microbit上运行它会导致二进制域返回全1,除非数字为0。因此10:48:01 as (错误地)显示为

代码语言:javascript
复制
 ****
*****

*****

它应该显示为

代码语言:javascript
复制
 * * 
*  * 
  *  
    *

假设am/pm led和add 30秒/ add 30分钟标记工作正常,这显然只是十进制数的二进制表示( makeBinary函数)的格式问题。我最初尝试使用'format‘来做这件事--但是microPython,至少在microBit上,显然不喜欢它。

当我在我的“真实”电脑上运行makeBinary时,它工作得很好。有人知道这里可能出了什么问题吗?或者有什么建议可以用其他简单的方法将十进制转换成二进制字符串,而不使用任何可能会混淆MicroBit的函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-26 21:14:14

microbit使用python 3作为micropython。这意味着两个整数的除法通常会返回一个浮点值,而不是一个整数。如果你明确想要整数除法,你应该使用// (它也适用于Python2)。总结一下:

代码语言:javascript
复制
          Py 2          Py 3 and microbit
35 / 10     3                3.5
35 // 10    3                3
35.0 / 10   3.5              3.5

因为小时数是以浮点型的形式出现的,所以它混淆了make_binary()函数,该函数需要一个整数。

代码语言:javascript
复制
        quotient = number // 2

..。

代码语言:javascript
复制
        seconds = (running_time()//1000)%60
        minutes = ((running_time()+timeAdvance)//60000)%60
        hours = ((running_time()+timeAdvance)//3600000)%24

应该解决除法的第一个问题。

如果您在计算机上安装并使用python3,您可能会发现更容易调试。

现在,python已经有了一个bin()函数,它接受一个整数并以字符串的形式返回一个二进制表达式

代码语言:javascript
复制
>>> bin(58)
'0b111010'

你的代码应该使用它,而不是写你自己的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39163555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档