小树林探索者 发表于 2022-2-15 20:49:37

2进制转16进制

本帖最后由 小树林探索者 于 2022-2-15 21:04 编辑

def b0(s):
    while len(s)%4!=0:
      s="0"+s
    return s

def zh(s):
    t=0;m='0123456789ABCDEF'
    for i in s:
      t=t*2+int(i)
    return m

s=input()
rst=''
s=b0(s)   
for i in range(0,len(s),4):
    rst=rst+zh(i)
print("2进制",s,"的16进制是",rst)


    for i in s:
TypeError: 'int' object is not iterable

请问这段代码有什么错误?

isdkz 发表于 2022-2-15 21:06:10

因为你第16行给zh()传入的参数是i,而i是一个整数,整数是不可迭代的,

你在zh()函数里面对传入的参数进行了迭代,所以就报错了,

你可以用str(i)把它转成字符串,字符串是可以迭代的

isdkz 发表于 2022-2-15 21:14:20

我刚才调试了一下你的代码,知道你的思路了,至于报错的原因我前面说了,就不再说了,

你想实现你的想法就改一下第16行就好,s从i开始取四个字符,就是s
def b0(s):
    while len(s)%4!=0:
      s="0"+s
    return s

def zh(s):
    t=0;m='0123456789ABCDEF'
    for i in s:
      t=t*2+int(i)
    return m

s=input()
rst=''
s=b0(s)   
for i in range(0,len(s),4):
    rst=rst+zh(s)                   #这一行我把i改成了s
print("2进制",s,"的16进制是",rst)
页: [1]
查看完整版本: 2进制转16进制