yang141210 发表于 2020-8-27 16:10:49

017讲课后作业动手题求助

2. 编写一个将十进制转换为二进制的函数,要求采用“除2取余”(补脑链接)的方式,结果与调用 bin() 一样返回字符串形式。

def bin1(x):
    t = []

    while x:
      r = x % 2
      x = x // 2
      tup = t.append(r)

    return tup


print(bin1(255))
问题:
1.这个程序输出的结果是none,为什么?
2.标红处tup显示的错误是局部变量tup在赋值之前被引用是什么意思(Local variable 'tup' might be referenced before assignment)?

chongchuigu 发表于 2020-8-27 16:23:02

def bin1(x):
    t = []

    while x:
      r = x % 2
      x = x // 2
      t.append(r)

    return t
print(bin1(3))

直接返回列表就行了吧

sunrise085 发表于 2020-8-27 16:33:44

本帖最后由 sunrise085 于 2020-10-24 22:49 编辑

1.这个程序输出的结果是none,为什么?
因为append函数是无返回值的,你一直是对列表t进行的操作,但是却返回tup。。。
2.标红处tup显示的错误是局部变量tup在赋值之前被引用是什么意思(Local variable 'tup' might be referenced before assignment)?
这个是因为当x为0的时候,不会进入while循环,那么tup就没有定义过,直接return tup 就会报错

你的程序中用的是255,看不出来顺序是反的,我改成25了
你的程序直接在函数中返回列表t即可。但是可能不是你想要的,因为顺序是反着的而且不是字符串
def bin1(x):
    t = []

    while x:
      r = x % 2
      x = x // 2
      t.append(r)

    return t


print(bin1(25))

要想把顺序正过来,就把append改为insert
def bin1(x):
    t = []

    while x:
      r = x % 2
      x = x // 2
      t.insert(0,r)
    return t

print(bin1(25))

要想直接返回字符串,那就不要用列表啦,直接用字符串操作
def bin1(x):
    tup=''
    while x:
      r = x % 2
      x = x // 2
      tup=str(r)+tup

    return tup

print(bin1(25))

yang141210 发表于 2020-8-28 10:33:41

sunrise085 发表于 2020-8-27 16:33
因为append函数是无返回值的,你一直是对列表t进行的操作,但是却返回tup。。。

这个是因为当x为0的时 ...

第2个问题解答我还是没明白,   
while x:
      r = x % 2
      x = x // 2
      tup=str(r)+tup

    return tup
这段程序的tup为什么就不会出现问题呢?谢谢您的解答,感谢~~!

sunrise085 发表于 2020-8-28 10:50:15

yang141210 发表于 2020-8-28 10:33
第2个问题解答我还是没明白,   
while x:
      r = x % 2


你看清楚,你的tup是什么,是append函数的返回值。append无返回值,所以tup就是None
这里的tup是字符串。。。我这里只是懒得多修改而已,就直接用你的这个变量了。
那就这样写吧,就没有tup的问题了
def bin1(x):
    t=''
    while x:
      r = x % 2
      x = x // 2
      t=str(r)+t

    return t

print(bin1(25))
页: [1]
查看完整版本: 017讲课后作业动手题求助