Python用字符串做二进制乘法和Python调用内置进制转换我踩的坑

注意本文加法的思想来源于 https://blog.csdn.net/qiubingcsdn/article/details/82263114
其余为我自己做的

  • 字符串str的末位是实际上计算的首位,所以第一步是翻转字符串

首先弄清楚python的字符串列表有2种取值顺序:
从左到右索引默认0开始的

s = 'ilovepython'

s[0]的结果是i

然后从右到左索引默认-1开始的

s = 'ilovepython'

s[-1]的结果是n

str=‘1000’
应该从末尾的0开始计算,为了方便首先翻转。Python可以巧妙用元组的特性。

a = a[::-1]
  • 乘法可以看作每层相与之后的加法,调用加法的时候注意理清楚逻辑

    首先倒序的目的只是为了逻辑上的最低位为str[0],只存在于函数的计算过程中,这样算出来的结果也是与我们直接看到的相反。因此判断是否要把这个字符串倒序只需要分为:
    需要这个字符串来直接进行加减计算的/字符串直接相加而成的→倒序
    这个字符串作为函数的参数/调用函数的结果→正序

  • 注意变量的位置到底在哪层循环里面,局部变量容易被误清零

    还有一个问题,for中的range也是一个数列,数字数列。
    因此for i in range(1,5)相当于 for i in [1, 2, 3, 4]
    for i in range(5)也相当于 for i in [1, 2, 3, 4]


    一些细节上的小问题。建议遇到问题先谷歌翻译试图自行理解,比直接搜CSDN要快得多。

  • int()不能使用显式base转换非字符串
    int() can’t convert non-string with explicit base

  • b_sum = int(b[index])
    ValueError: invalid literal for int() with base 10: 'b'
    

    int()的基数为10的文字无效:
    invalid literal for int() with base 10:
    意思是这里的b[index]中的index出现了十进制无法识别的东西

    int("12345",2)
    

    报的也是这个错误,因为这里的意思是,把【二进制数】12345强行转换成十进制,但是2345显然不是二进制数,所以这里是错误的。

  • 输入的类型不能被强制转换为整型,比如输入了一个浮点型
    oct() takes exactly one argument

  • str对象不能直接强制爱转换成整数
    ‘str’ object cannot be interpreted as an integer

  • 字符串不可直接下标更改值,只有列表可以。
    TypeError: ‘str’ object doesn’t support item deletio


我遇到的错误前情 :
八进制和十六进制只输入11110000之类的0和1是没问题的。但是出现了别的数字就不行。

出现问题的原因:
oct(x)
hex(x)
里面的参数x是十进制数字
但是函数的返回值是带有 “0o” "0x"的字符串
使用前需要先转换成十进制数字!

int(a, 8) 是说明a是一个八进制数,需要被转换成十进制!这个时候,为了区分十进制和八进制,a必须要有前缀"0o"
千万不要偷懒觉得八进制不会像十六进制一样出现无法识别的ABC就直接输入了。
比如:

>>a = input("请输入第一个八进制数: ")
10
>>p = beBin(int(a))

因为输入八进制的10,实际上a=9,但是直接输入的时候,a=10
后面计算全部出错!

源代码

def addBinary(a, b):
    if len(a) < len(b):  # 以长的二进制字符串为遍历起点
        temp = a
        a = b
        b = temp
    a = a[::-1]  # 倒序二进制字符串
    b = b[::-1]
    extra = 0  # 进位
    new_binary = ""
    for index, num in enumerate(a):  # 遍历
        if index > len(b) - 1
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值