傻瓜小白菜 发表于 2019-2-7 16:25:04

我的天!!!为什么老是没有defined

背景:函数的课后作业,尝试定义一个函数使之模仿bin的十进制转二进制作业
问题:明明定义了一个变量等于一个列表,return这个列表,返回了一个地址,等我想要访问这个列表时,它说这个变量没有defined。。。。。。line1到底是怎么回事????
代码如下:
def bin(x):                        
    y = x
    a = x // 2
    b = y % 2
    z = []
    while a >= 1:
      x = a
      y = b
      a = x // 2
      b = y % 2
      z.append(b)      
    z = reversed(z)
    return z
shell:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
    z
NameError: name 'z' is not defined

枫还 发表于 2019-2-7 16:32:31

你只是定义了函数,没有运行,而且定义在函数内的临时变量外面是访问不了的,下面应该加一行z = bin(5)就有值了

傻瓜小白菜 发表于 2019-2-7 16:42:50

枫还 发表于 2019-2-7 16:32
你只是定义了函数,没有运行,而且定义在函数内的临时变量外面是访问不了的,下面应该加一行z = bin(5)就有 ...

运行......是什么(捂脸)
还有z为什么要等于bin(5)

heidern0612 发表于 2019-2-7 16:48:04

你在函数外部调用z,当然显示没定义,因为z是属于函数bin(x)的。

就像别人的东西,你硬说是大家的,当然不行。

解决办法就是把这个函数实例化,再调用这个函数即可。

枫还 发表于 2019-2-7 17:02:30

傻瓜小白菜 发表于 2019-2-7 16:42
运行......是什么(捂脸)
还有z为什么要等于bin(5)

运行就是调用函数,你只是告诉python有这么一个函数,但是没有使用它, z = reversed(z)这一行是错误的,你想做的应该是z.reversed()这样,将列表顺序颠倒,bin(5)只是一个比喻,bin()括号里面填数字就行,就是在定义了一个bin之后,用z = bin(4)去调用它(数字不关键)此时外面的z就是用来接收bin()这个函数的返回值的

枫还 发表于 2019-2-7 17:27:21

还有你第一次的b没有添加,这会丢失数据!数组可以用字符串来代替,最后用个int强制转换就可以得到101这种数据了

傻瓜小白菜 发表于 2019-2-7 17:34:46

heidern0612 发表于 2019-2-7 16:48
你在函数外部调用z,当然显示没定义,因为z是属于函数bin(x)的。

就像别人的东西,你硬说是大家的,当然 ...

并不知道什么是实例化的我,翻了翻书,决定把它变成全局变量

傻瓜小白菜 发表于 2019-2-7 17:50:17

枫还 发表于 2019-2-7 17:27
还有你第一次的b没有添加,这会丢失数据!数组可以用字符串来代替,最后用个int强制转换就可以得到101这种 ...

对哦!
不过为啥要取整数,用来代替地板除?

枫还 发表于 2019-2-7 18:09:39

傻瓜小白菜 发表于 2019-2-7 17:50
对哦!
不过为啥要取整数,用来代替地板除?

emm,只是为了方便表示成类似 101010 这样的二进制形式
页: [1]
查看完整版本: 我的天!!!为什么老是没有defined