Python技术迷

00后员工给我发“CNM”,是不是在骂人?

刚刷到个贴子,有网友发问说:自己是领导,收到00后员工发的“CNM”,结果员工解释说是“纯牛马”...让大家帮忙看看这是不是在骂人

Image

我觉得这事吧,从一个程序员角度看,其实蛮像我们在代码 review 里的“黑话文化”。有些话,看着像中性,背地里其实早就吐槽完一轮了。00后这代人,玩梗能力是一绝,嘴上说“纯牛马”,心里估计早把你。。。

网友们的回帖我也看了,大多都在讨论是不是故意骂人,但我觉得重点不在这。问题的核心是代际之间的沟通彻底断了。管理者不懂年轻人的表达方式,年轻人也懒得对你“兼容旧系统”,最终的 bug 就是误会越来越多。

从我的角度看,既然想带团队,就要了解团队。不是你要跟他们做朋友,但起码得明白他们说的话什么意思⚙️否则,沟通就是404。【备注:文末可领最新资料】

面试题:最多连胜的次数

那天在地铁上,我旁边那哥们打王者,输了一局就骂队友不配玩游戏,然后我突然想到一个事儿——如果让你写个函数去算他连续赢几把,最多连胜几局,你知道该怎么写吗?就那种,赢了算+1,输了就断了的那种。

其实这个需求蛮常见的,像做那种连续签到啊,连胜活动啊,逻辑都是一样的。输入一串“胜败记录”,输出最大连续“胜”的数量。我们用 Python 写个最通俗易懂的实现。

一段公交车上写的代码

我那天手机没电,在公交车上拿小本子写的伪代码,后来回到公司敲出来就变成下面这样:

defmax_consecutive_wins(results):
    max_win = 0
    current_win = 0

for r in results:
if r == "W":
            current_win += 1
            max_win = max(max_win, current_win)
else:
            current_win = 0

return max_win

这玩意儿干啥用的呢?就比如你传进去一个字符串 "WWLWWWLW",它就能告诉你里面最多连续几个 W,也就是赢的场次。我测了下,这个例子返回是 3,没错吧?前三场赢、然后输了、然后三连胜、再输一把——最大连胜就是后面那三连。

为什么我不用列表?因为...懒得折腾

其实也可以搞个 list 存每段 win 的长度,比如:

wins = []
cur = 0
for r in results:
if r == 'W':
        cur += 1
else:
if cur > 0:
            wins.append(cur)
            cur = 0
if cur > 0:
    wins.append(cur)

return max(wins) if wins else0

这个版本也行,但你有没有觉得有点罗嗦?后来我想想,其实根本不需要记住所有段,只要记录“当前段有多长”“历史最大有多长”就够了。

那时候搞个“连续签到领红包”的活动,逻辑是用户登录历史拉出来一串布尔值(True 表示签到成功,False 表示漏签),然后要算最多连续签到多少天。他一开始用什么 itertools.groupby,我看了脑壳疼,直接叫他换成计数器方式,代码瞬间简洁一半不说,还不容易出 bug。

assert max_consecutive_wins("LWLWLWL") == 1
assert max_consecutive_wins("WWWLWWW") == 3
assert max_consecutive_wins("LLLL") == 0
assert max_consecutive_wins("") == 0
assert max_consecutive_wins("WWWWWW") == 6

这些 case 要是你都没考虑过,那上线之后一踩雷你别怪谁。特别是空串和全输,全赢的场景,测试得过。

本来还想扯点动态规划的,但这题真不需要,思路清晰的逻辑判断就够了。回头小王问我这个怎么优化成 O(1) 空间,我就让他别卷了,赶紧下班。

行了我得走了,等下外卖到了,还得去前台拿披萨。你要是这题写明白了,记得教教你那个总爱写一堆 if-else 的同事。

-END-

我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领