鱼C论坛

 找回密码
 立即注册
查看: 2222|回复: 2

[技术交流] 关于17讲课后作业十进制转二进制的思考,仅个人想法,勿喷

[复制链接]
发表于 2020-3-3 23:36:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def bin(x):
    i = 1
    Bin = 0
    while x:
        a = x % 2
        b = x // 2
        Bin = a * (10 ** (i-1)) + Bin
        i += 1
        x = b
    return str(Bin)
我的代码是这样的,最终得出的是字符串,但是无法解决输入数字为小数或者负数时的转换问题

虽然如此,但是小甲鱼给出的参考答案是将余数先用append()正向排列成元组,再用pop()反向取出,然后用字符串拼接的方法拼在一起,最终结果是字符串

小甲鱼的方法在输入数字为0时会返回空字符串,并且也无法计算负数,因此个人认为我的代码在这一丢丢小细节上要稍微地好一点点

等待大神给出一个能同时解决正、负数和零的进制转换函数!如果能解决小数的情况就更棒了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-4 00:39:37 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-4 00:52 编辑

        负数是可以处理的,有现成的 BIF bin() 可做参考,但是,浮点数就不是那么简单了,因为涉及到 IEEE 编码规范,编码相当的复杂,如果有兴趣可以在网上搜一下。
def bin2(x):
    f , result = False , ''
    if x < 0:
        f , x = True , - x
    while x:
        result , x = result + str(x % 2) , x // 2
    if not len(result):
        result = '0'
    result = '0b' + result[:: -1]
    if f:
        result = '-' + result
    return result

while True:
    x = input('请输入一个数:') . strip()
    if len(x):
        print(bin2(int(x)) , '\n')
    else:
        break
        bin() 是 Python BIF,我们自己写函数起名的时候必须避免和 BIF 的名称发生冲突。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 08:43:52 | 显示全部楼层
jackz007 发表于 2020-3-4 00:39
负数是可以处理的,有现成的 BIF bin() 可做参考,但是,浮点数就不是那么简单了,因为涉及到 IEEE ...

感谢大佬回复,受教受教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 21:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表