deffalling(n, k): """Compute the falling factorial of n to depth k. >>> falling(6, 3) # 6 * 5 * 4 120 >>> falling(4, 3) # 4 * 3 * 2 24 >>> falling(4, 1) # 4 4 >>> falling(4, 0) 1 """ "*** YOUR CODE HERE ***"
分析
很简单,先判断k为零的情况,然后用循环计算乘积。
解答
1 2 3 4 5 6 7 8 9 10
deffalling(n, k): if k == 0: return1 else: prod = 1 while k > 0: prod *= n n -= 1 k -= 1 return prod
Sum Digits
题目
写一个函数,接受非负整数为输入,对它的各个位数求和。(提示可能需要使用整除和模运算)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
defsum_digits(y): """Sum all the digits of y. >>> sum_digits(10) # 1 + 0 = 1 1 >>> sum_digits(4224) # 4 + 2 + 2 + 4 = 12 12 >>> sum_digits(1234567890) 45 >>> a = sum_digits(123) # make sure that you are using return rather than print >>> a 6 """ "*** YOUR CODE HERE ***"
分析
要把每一位数提取出来,n % 10可以得到个位数,n // 10可以得到其他位数,也很简单。
解答
1 2 3 4 5 6
defsum_digits(y): ans = 0 while y != 0: ans += y % 10 y //= 10 return ans
Double Eights
写一个函数,输入是一个数,判断它的数字里面有没有两个相邻的8。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
defdouble_eights(n): """Return true if n has two eights in a row. >>> double_eights(8) False >>> double_eights(88) True >>> double_eights(2882) True >>> double_eights(880088) True >>> double_eights(12345) False >>> double_eights(80808080) False """ "*** YOUR CODE HERE ***"
分析
就判断低两位是不是88,如果不是就整除10来右移,直到碰到88或位数不够2。
解答
1 2 3 4 5 6
defdouble_eights(n): while n >= 88: if n % 100 == 88: returnTrue n //= 10 returnFalse
这里while n >= 88也可以是while n >= 0,在判断的时候会更快,但可能会多计算两轮。