簡體   English   中英

即使定義了變量,也會出現 NameError

[英]Getting NameError even though variable is defined

我試圖找到將b的所有元素均分的所有數字。

這是我的代碼:

a = [2, 4]
b = [16, 32, 96]
maxOfb = max(b)
factorOfb = []
for i in range(1, int(maxOfb/2)):
    if all(j % i == 0 for j in b):
        factorOfb.append(j)
print(factorOfb)

當我執行它時,它給出了這個錯誤:

NameError: name 'j' is not defined

請注意,錯誤是由以下行引起的:

factorOfb.append(j)

而不是if all(j % i == 0 for j in b)

這是因為j在生成器的本地 scope中。 因此,一旦生成列表, j也將不可用於程序的其他部分,直到j被顯式定義為全局變量(我不知道是否可以在生成器表達式中執行此操作)

正如@Tomerikoo所說,您想要 append 的元素是i而不是j 您應該可以使用 append i ,因為它位於 function 的 scope 中。

建議:要解決問題,您還可以找到GCD(或 HCF) ,然后將 GCD 分解以得到答案。

但是,既然你問了,如果你真的想 append j你可以試試下面的:


a = [2, 4]
b = [16, 32, 96]
maxOfb = max(b)
ls = []
for i in range(1, int(maxOfb/2)):
    if all([j % i == 0 or ls.append(j) for j in b]):
        pass

print(ls)

解釋: ls.append() function 返回NoneType object。 NoneType object 的NoneTypeFalse 因此,使用or運算符然后調用append() function 將同時 append 將元素添加到列表中,並且也不會偏離所需的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM