【python的練習題】:1-100奇數求和(涉及匿名函數filter lambda 的使用)


題目一:
#首先 代碼實現1-100奇數求和
#其次 用一行代碼實現
total=0
for i in range(1,101):
if i%2==1:
total=total+i
print('total:',total)

上面的基礎寫法,ok. 注意點:奇數的判斷條件是:i%2==1
# 姿勢一:filter+lambda
print(sum(list(filter(lambda x: x%2==1, range(1, 101)))))
#姿勢二:if
print(sum([x for x in range(1, 101) if x%2==1]))
print(x for x in range(1,101) if x%2==1) #打印出來其實是一個內存地址
# 姿勢三:so easy
print(sum(range(1, 101, 2)))

print(range(1,101,2))# d打印結果就是:print(range(1,101,2))
print(list(range(1,101,2)))#打印結果[1,3,5.7.9,……]

============================================================

延伸閱讀:lambda的介紹、filter的介紹

語法格式

lambda argument1,argument2,...argumentN :expression using arguments

1、lambda是一個表達式,而不是一個語句。

因為這一點,lambda可以出現在python語法不允許def出現的地方---例如,在一個列表常量中或者函數調用的參數中,此外,作為一個表達式,lambda返回一個值一個值(一個新的函數),可以選擇性地值給一個變量名。相反,def語句總是得在頭部將一個新的函數賦值給一個變量名,而不是將這個函數作為結果返回。

2、lambda 的主體是一個單個的表達式,而不是一個代碼塊。

lambda是一個為編寫簡單的函數設計的,而def用來處理更大的任務。

Example:

>>>f=lambda x,y,z: x+y+z

>>>f(2,3,4)

參照:https://www.cnblogs.com/MrFiona/p/5958916.html

>>> add = lambda x,y : x+y
>>> add(5,6)
>>> (lambda x,y:x+y)(5,6)

 filter(function, sequence):對sequence中的item依次執行function(item),將執行結果為True的item組成一個List/String/Tuple(取決於sequence的類型)返回:

filter(lambda x: x%2==1, range(1, 101)) 按照lambda表達式的奇數判斷條件,返回所有奇數,but直接print(filter(……))的一個內存地址,需要轉換為list(),才能print 所有的奇數

參照:https://www.cnblogs.com/longdouhzt/archive/2012/05/19/2508844.html  

  • range(101)可以產生一個0到100的整數序列。
  • range(1, 100)可以產生一個1到99的整數序列。
  • range(1, 100, 2)可以產生一個1到99的奇數序列,其中的2是步長 
  • 如果明確的知道循環執行的次數或者要對一個容器進行迭代(后面會講到),那么我們推薦使用for-in循環
  • 如果不知道具體循環次數的,推薦使用while循環。while循環通過一個能夠產生或轉換出bool值的表達式來控制循環,表達式的值為True循環繼續,表達式的值為False循環結束。

參考答案: https://gitee.com/UncleYong/exercise/blob/master/sumOfOddNumber.py                 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM