我正在練習列表解析和嵌套列表解析。作爲我的練習的一部分,我寫出了等價的循環。這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