拉勾面試見這裏 代碼來源於這個代碼分享中評論 a, b, c = [int(x) for x in raw_input("3 numbers less than 10").split(', ')] [str(i).find(str(a)) > -1 and 'Fizz' or 'Fizz'[i % a * 4 : ] + 'Buzz'[i % b * 4 : ] + 'Whizz'[i % c * 5 : ] or i for i in range(1, 101)]面試
分析
- str(i).find(str(a)) > -1判斷i中是否包含第一個數。 若是不包含則str(i).find(str(a))返回-1,式子值爲False。False and 'Fizz' 值爲False 若是包含則返回非-1,式子值爲True。 True and 'Fizz'值爲Fizz
- 'Fizz'[i % a * 4 : ] + 'Buzz'[i % b * 4 : ] + 'Whizz'[i % c * 5 : ]判斷i是不是第一個,第二個,第三個數的倍數 若是i是第一個數的倍數則,i % a * 4 = 0。 'Fizz'[0 :]值爲Fizz 若是i不是第一個數的倍數則,i % a * 4 >= 4。 'Fizz'[i % a * 4 : ]爲一個空字符串, '' i是否是第二個第三個數的倍數同理
- i for i in range(1, 101),當前面兩個條件都不知足時直接輸出i
這裏明白Python中and和or的運算結果
a and b 若是a真,值爲b 若是a假,值爲a a or b 若是a真, 值爲a 若是a假, 值爲bless