Python語法十分便捷,經過幾個簡單例子瞭解其趣味python
一、Fizz.Buzz問題爲:算法
打印數字1到100, 3的倍數打印「Fizz」, 5的倍數打印「Buzz」, 既是3又是5的倍數的打印「FizzBuzz」函數
代碼能夠爲:spa
print(" ".join(["fizz"[ x % 3 * 4:] + "buzz"[x % 5 * 4:] or str(x) for x in range(1,101)]))
其中join可將括號內的列表元素之間加上「 」3d
而"fizz"[ x % 3 * 4:]的意思爲,若是冒號左邊的答案大於等於字符長度(「fizz」「buzz」長度爲4)則不輸出,若是%三、%5不爲0,*4後將等於4,則不輸出code
其實質其實就是列表的切片動做,[x:y:a]意爲從x到y以a爲間隔拷貝元素,那麼若是索引長度大於字符長度,那麼天然,沒法切片複製,更沒法加入列表並輸出了blog
二、一行輸出特定字符拼成的心形:索引
print('\n'.join([''.join([('LoveAngel'[(x-y) % len('LoveAngel')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))
其中‘loveangel’字段修改後便可顯示不一樣的字符組成it
三、輸出99乘法表io
print('\n'.join(' '.join('%s*%s=%-2s'%(y,x,x*y) for y in range(1,x+1)) for x in range(1,10)))
四、快排算法:
qsort = lambda arr: len(arr) > 1 and qsort(list(filter(lambda x: x <= arr[0], arr[1:]))) + arr[0:1] + qsort(list(filter(lambda x: x > arr[0], arr[1:]))) or arr
五、八皇后問題
[__import__('sys').stdout.write('\n'.join('.' * i + 'Q' + '.' * (8-i-1) for i in vec) + "\n========\n") for vec in __import__('itertools').permutations(range(8)) if 8 == len(set(vec[i]+i for i in range(8))) == len(set(vec[i]-i for i in range(8)))]
六、100之內素數(2ways)
print(' '.join([str(item) for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(2, 101))])) print(' '.join([str(item) for item in filter(lambda x: all(map(lambda p: x % p != 0, range(2, x))), range(2, 101))]))
其中,lambda爲匿名函數,
而filter(過濾器),filter()函數包括兩個參數,分別是function和list。該函數根據function參數返回的結果是否爲真來過濾list參數中的項,若真則保留,不然被過濾,最後返回一個新列表,以下例所示:
>>>test=[1,2,3]
>>>real=filter(lambda x:x>2, test)
>>>print(real)
>>>[3]
而map函數,map()的兩個參數一個是函數名,另外一個是列表或元組,即將後面參數進行函數處理>>>map(lambda x:x**x, test) >>>[1,4,9]