从 Codewars 中学到的一些 tricks

December 29, 2017

其实很久没有上Codewars做题了,上一次做题是上个暑假,那时候也是第一次了解到Codewars。所以下面的内容都是半年前整理的,但是对我来说很有继续扩展的必要,以后会继续做题。

C

1.如果是做与2的整数幂相关的乘除法,可以用移位操作。

2.C语言中被调用的函数的函数声明可以写在主调函数里。

3.C语言中,计算一个数字的数码个数,可以先用sprintf()把数字变成字符串(记得要用abs()变成绝对值)然后在用strlen()

4.当一个函数不允许用循环的时候,可以试试递归。(其实goto也行,当时我用的goto,太傻了)。

5.C语言中快速实现round()函数:(int)(number + 0.5);其中number为floatdouble
C语言中快速实现floor()函数:(int)number;其中number为floatdouble
C语言中快速实现ceil()函数:(int)number + 1; 其中number为floatdouble

Python

1.计算一个数字以二进制来表示中有多少个 1,可以用:

count = 0
while n:
    n &= n - 1
    count += 1
return count

2.max()函数可以用key=function参数,这样的话,max会把前面列表的每个元素当做参数传递给function(),然后比较返回值,最终返回返回值最大的。函数可以是lambda表达式。 参考代码:

def find_longest(xs: list) -> list:
    return max(xs, key=lambda x: len(str(x)))

此函数返回一个列表xs中最长的数码。 3.切片操作可以反转一个列表,通过[::-1]。

4.C中单个字符本身就是整型,而Python中需要用ord()函数将单个字符变成码值。
C中将字符大小写改变需要#include <ctype.h>, 用tolower()toupper()。而在Python中则是字符串类的两个方法:str.lower()/str.upper()

5.若判断x是否等于a或b或c或d或…,可以用:

if x in (a, b, c, d, ...):
    ...

6.Python3 中//是地板除,相当于C语言中两个整型进行/运算。

7.虽然没有switch语句,但是可以用列表或字典来变相实现,示例代码:

def likes(names: list) -> str:
    n = len(names)
    return {
        0: 'no one likes this',
        1: '{} likes this', 
        2: '{} and {} like this', 
        3: '{}, {} and {} like this', 
        4: '{}, {} and {others} others like this'
    }[min(4, n)].format(*names[:3], others=n-2)

8.不能用切片操作来直接更改list,比如更改列表最后一个元素list[-1:] = ..., 因为切片会返回一个新的list,所以对原来的list不会改动,只能用下标来改。