我正在练习列表解析和嵌套列表解析。作为我的练习的一部分,我写出了等价的循环。这for循环我不能正确,我相信这是因为我试图在函数调用中分配一个值而不是一个变量。我收到的错误是:For循环,SyntaxError:不能分配给函数调用
File "<stdin>", line 4
SyntaxError: can't assign to function call
我已经为这个循环编写的代码是:
import math
def squared_primes():
list = []
for x in range(1,1000000):
for q in range(2,math.sqrt(x)+1):
if all(x % q != 0):
list.append(x**2)
print(list)
该函数试图创建完美的正方形,其根源是范围为1质数列表到1000000.
有人可以帮助我理解我的循环的语法究竟在哪里崩溃?另外,我可以做这个嵌套列表理解吗?显然,我的列表理解正在破裂,因为我无法让我的for循环语法正确...
解决方案:感谢用户@Evan,我能够修复变量和语法问题,并了解如何修复this thread中的'all()'声明。
此代码将正确地从1,1000返回平方素数的列表:
def squared_primes():
list1 = []
for x in range(1,1000):
if all(x%q !=0 for q in range(2,int(math.sqrt(x)+1))):
list1.append(x**2)
print(list1)
你的意思是将float作为第二个参数传递给range()内建的吗? – Evan
@Evan不,我的意思是传递一个整数。我尝试把int(q)放在范围内......但它仍然不会运行。虽然也许我应该留下它,因为它看起来不像是错误。尽管如此,我会再试一次。 – Hanzy
另外,我假设你已经在你的代码中缩进了squared_primes()函数,但是在这里发布时忘了添加额外的四个空格。我可以在没有函数调用错误的情况下运行你的代码,但如果我删除了缩进,我显然会得到缺少缩进的语法错误。我用int()类型化math.sqrt(x)+1表达式以再次测试以避免类型错误。 – Evan