鱼C论坛

 找回密码
 立即注册
查看: 1797|回复: 4

[已解决]017讲课后作业动手题求助

[复制链接]
发表于 2020-8-27 16:10:49 | 显示全部楼层 |阅读模式

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

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

x
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)?
最佳答案
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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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))
直接返回列表就行了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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为什么就不会出现问题呢?谢谢您的解答,感谢~~!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 03:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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