isPrime工作,但在列表上映射时UnBoundLocalError

ISPRIME在仅调用NBR时起作用,但在迭代时不工作
列表,为什么?添加x = 1使它起作用,但是为什么我必须添加
它?
有什么干净的方法吗?
def isprime(nbr):
对于X范围内(2,NBR + 1):
如果nbr%x == 0:
休息
如果x == nbr:
返回true
别的:
返回false
Trackback(最近的最新电话):
文件" ",第1行,在
[范围(11)中的y的iSprime(y)]
文件" c:c:\ python25 \ progs \ blandat \ mymath.py",第9行,在Isprime中
如果x == nbr:
unboundlocalerror:分配前引用的本地变量'x'
Trackback(最近的最新电话):
文件" ",第1行,
地图(ISPRIME,范围(100))
文件" c:c:\ python25 \ progs \ blandat \ mymath.py",第9行,在Isprime中
如果x == nbr:
unboundlocalerror:分配前引用的本地变量'x'
错误的
真的
添加x = 1使其正常工作:
def isprime(nbr):
x = 1
对于X范围内(2,NBR + 1):
如果nbr%x == 0:
休息
如果x == nbr:
返回true
别的:
返回false
[错误,真实,真实,真实,错误,真实,错误,真实,false,false,
错误的]

# 回答1


Defn Noob写道:
Trackback(最近的最新电话):
文件" ",第1行,在
[范围(11)中的y的iSprime(y)]
文件" c:c:\ python25 \ progs \ blandat \ mymath.py",第9行,在Isprime中
如果x == nbr:
unboundlocalerror:分配前引用的本地变量'x'
Trackback(最近的最新电话):
文件" ",第1行,
地图(ISPRIME,范围(100))
文件" c:c:\ python25 \ progs \ blandat \ mymath.py",第9行,在Isprime中
如果x == nbr:
unboundlocalerror:分配前引用的本地变量'x'
错误的
真的
添加x = 1使其正常工作:
def isprime(nbr):
x = 1
对于X范围内(2,NBR + 1):
如果nbr%x == 0:
休息
如果x == nbr:
返回true
别的:
返回false
[错误,真实,真实,真实,错误,真实,错误,真实,false,false,
错误的]
-http://mail.python.org/mailman/listinfo/python-list
=====================================
是的 - "分配前引用的本地变量'x"是正确的.
您说:对于x范围...但是x在初始化之前才存在.
要保存循环,请初始化x = 2(最小值)和循环执行
通过一个.
在一个直接的" C"程序中
(对于(x = 1,x =(nbr+1),x ++)等...)
X初始化并强行增加.
似乎Python不会自动初始化,而是自动增量.
steve nodeby@@hughes.net
# 回答2


> Defn Noob写道:
Trackback(最新通话上次):文件" ",第1行, [range(11)中的y in y iSprime(y)]文件" c:\ python25 \ progs \ blandat \ mymath. py",第9行,在iSprime中,如果x == nbr:unboundlocalerror:locullabalerror:localliable'x'在分配跟踪之前引用的本地变量'x'(最新呼叫上次):文件" ",第1行, map( Isprime,范围(100))文件" c:\ python25 \ progs \ blandat \ mymath.py",第9行,在isprime中,如果x == nbr:unboundlocalerror:unboundlocalerror:分配前引用的本地变量'x'
错误的
正确添加x = 1 s它工作:def isprime(nbr):x = 1 for x in范围(2,nbr + 1):如果nbr%x == 0:休息x == nbr:返回true else:return false:返回false
[false,true,true,true,false,true,false,true,false,false,fals] -http://mail.python.org/mailman/listinfo/python-list ========================= ===========================对于x范围...但是x不存在,直到初始化.
要保存循环,请初始化x = 2(最小值)和循环执行
通过一行.
(对于(x = 1,x =(nbr+1),x ++)等...)
X初始化并强行增加.
似乎Python不会自动初始化,而是自动增量.
我认为更好的解释是,在您的原始功能中,仅x
在for循环运行时存在.一旦执行击中
休息声明,x不再存在.当您尝试引用它时
在下一行中,Python没有称为X的变量,所以它抱怨X
尚未初始化.
一种更惯用的方法来写它...
def isprime(nbr):
如果nbr <= 1:
返回false
对于xrange(2,nbr+1)中的x:
如果不是nbr%x:
返回x == nbr
干杯,
DREA
# 回答3


在7月15日,11:26*am,defn noob Trackback(最近的最新电话):
*文件" ",第1行,在
* * [r范围(11)中的y的iSprime(y)]
*文件" c:\ python25 \ progs \ blandat \ mymath.py",第9行,在isprime中
* *如果x == nbr:
unboundlocalerror:分配前引用的本地变量'x'
Trackback(最近的最新电话):
*文件" ",第1行,在
* *地图(ISPRIME,范围(100))
*文件" c:\ python25 \ progs \ blandat \ mymath.py",第9行,在isprime中
* *如果x == nbr:
unboundlocalerror:分配之前引用的本地变量'x'>> isprime(10)
错误的
真的
添加x = 1使其正常工作:
def isprime(nbr):
* * x = 1
* *对于x范围(2,nbr + 1):
* * *如果nbr%x == 0:
* * * * * * 休息
* *如果x == nbr:
* * * *返回true
* * 别的:
* * * *返回false
[错误,真实,真实,真实,错误,真实,错误,真实,false,false,
错误的]
不,不是.您错误地报告了1是PRIME.
而不是制作假变量x,不应该
而是测试NBR+1大于2?或称呼它
范围(3,11)而不是范围(11)? x不是初始化的
因为如果nbr+1为<= 2,则for循环具有无效范围
甚至没有执行.
# 回答4


在7月15日,7:28*下午,Mensanator 不,不是.您错误地报告了1是PRIME.
而不是制作假变量x,不应该
而是测试NBR+1大于2?或称呼它
范围(3,11)而不是范围(11)? x不是初始化的
因为如果nbr+1为<= 2,则for循环具有无效范围
甚至没有执行.

def isprime(nbr):
对于X范围内(2,NBR + 1):
如果nbr%x == 0:
休息
如果x == nbr:
返回true
别的:
返回false
这适用于所有素数,如果 我不想包括1,如果
nbr <= 1返回false
您正在回答错误的问题.
无论如何,这是一个明显的:
def isprime(nbr):
如果nbr <2:
返回false
对于X范围内(2,NBR + 1):
如果nbr%x == 0:
返回nbr == x

# 回答5


在7月15日,12:28*pm上," Andreas Tawn" 我认为更好的解释是,在您的原始功能中,仅x
在for循环运行时存在.
for循环永远不会跑.
它从未达到中断声明,这是来自
[范围(11)中的y的iSprime(y)]
试图在范围内为X进行操作(2,1).
必须存在一些东西才能不存在.
正确的结合,但前提是错误的.
# 回答6


在7月15日,12:36*pm上,defn noob def isprime(nbr):
* *对于x范围(2,nbr + 1):
* * *如果nbr%x == 0:
* * * * * * 休息
* *如果x == nbr:
* * * *返回true
* * 别的:
* * * *返回false
这适用于所有素数,如果我不想包括1
nbr <= 1返回false
您正在回答错误的问题.
不,我还提到了具有无效范围的for循环,
这就是为什么您的原始失败的原因.
指出1不是Prime是一个奖励.
我想你对知道你不感兴趣
必须测试任何高于平方根的东西
号码.
# 回答7


Mensanator写道:
def isprime(nbr):对于x范围内(2,nbr + 1):如果nbr%x == 0:如果x == nbr:return true:return true:return forshies falsethis适用于所有素数,如果我不想包括1我只是做ifnbr <= 1返回falseyou正在回答错误的问题.

不,我还提到了具有无效范围的for循环,
这就是为什么您的原始失败的原因.
指出1不是Prime是一个奖励.
我想你对知道你不感兴趣
必须测试任何高于平方根的东西
号码.
-http://mail.python.org/mailman/listinfo/python-list
=========================
"不要...测试...比平方根高……"
我想知道什么时候会出现.
我也有一位好数学老师.
steve nodeby@@hughes.net

# 回答8


Andreas Tawn写道:
错误的.对于循环变量,循环退出后继续.这是
故意的. Mensanator给出了正确的解释(循环永远不会进入
对于nbr == 1).

标签: python

添加新评论