2012-10-20 28 views
0

這是我應該做的事:列表理解平方賠率

鑑於變量nums,它的值是一個整數列表,編寫賦值給變量square_odds平方的列表中的賦值語句列表中的奇數編號爲nums

您必須使用列表理解。

這是我到目前爲止,我知道範圍部分是錯誤的,但它應該是什麼樣子?

nums = [2 ** square_odds for square_odds in range(nums) if square_odds != x%2] 

我覺得還有其他地方是錯的,但我不確定。

我改成了

nums = [square_odds**2 for square_odds in range(100) if square_odds%2 != 0] 

我收到消息

錯誤:你沒有分配到square_odds。

+2

這裏'x'結尾是什麼?這就是你如何在開始時進行數字劃分?似乎你首先需要一些'數學'。 –

+0

你在哪裏準確使用它? –

+2

你完全誤解了作業。 'nums'是一個數字列表,'square_odds'應該是'nums'中所有奇數的平方列表。因此,將num分配給num或迭代range(nums)是沒有意義的 - 您需要直接遍歷nums。 – l4mpi

回答

1
  • 要測試的數是奇數還是沒有,你需要採取其模量與2並測試它是否其0。 所以,如果num % 2 != 0,那麼你numodd

  • 坊給定數,你做: - number ** 22 ** number

  • 您還可以在range功能3rd的說法,即表示step-value。您可以使用該(range(1, last_num, 2))來獲取odd號碼。這樣你就不需要modulus運營商。

您可以執行上述更改以獲得您的列表理解工作。

鑑於你的問題,其中nums已經是數字的列表,你需要使用剛剛nums而非range(nums)這樣的: -

nums = [square_odds**2 for square_odds in nums if square_odds%2 != 0] 
0
nums = [square_odds**2 for square_odds in range(nums) if square_odds%2 != 0] 
2

而且,由於NUMS已經是一個列表不使用範圍(數量)。範圍返回給定開始和停止值的列表。通過您的列表NUMS以這種方式迭代(列表理解的一部分):

[SQUARING OPERATION HERE for num in nums MODULO TEST HERE] 

,因爲這是我的功課不會這一切寫出來的。

0

這種解決方案呢?

square_odds=[i*i for i in filter(lambda x:x&1,nums)]