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)?
def bin1(x):
t = []
while x:
r = x % 2
x = x // 2
t.append(r)
return t
print(bin1(3))
直接返回列表就行了吧 本帖最后由 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))
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为什么就不会出现问题呢?谢谢您的解答,感谢~~! 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]