Python技术迷

外包天天晚上王者在线,却说没精力加班,怎么办?

刚刷到个贴子,说外包同事天天晚上王者排位火力全开,一提加班就说没精力,这事真让人哭笑不得。
作为程序员,我觉得问题关键不是他打不打游戏,而是他有没有把交付做好。职场里讲的是 价值 ,而不是你下班怎么玩。网友们有人吐槽这是摆烂,也有人说管不着别人。我部分同意:如果他影响了团队进度,那就不是“个人自由”,而是连累别人。 换个角度想,打王者可能是他缓解压力的方式,但加班是团队需要时的责任。就像代码里单个模块bug没修复,系统迟早挂掉。要么他就别接活,要么就把活干到位,别拿“没精力”当挡箭牌。 总的来说,职场靠的是结果导向,甭管下班你是打王者还是打太极,只要能按时交付,高效可靠,那才是真正的职业素养。 【备注:文末可领最新资料】

面试题: 验证IP地址

昨晚十一点多,我在公司楼下吹风,手机一震,我们组小李又来问:“哥,判断一个字符串到底是IPv4还是IPv6,有没有简单点儿的写法?”我嘟囔着还以为是八卦,结果一看是面试题,算了顺手聊聊思路,顺便把代码贴给你们,省得半夜翻文档。 给你一个字符串,比如“172.16.254.1”或者“2001:0db8:85a3:0000:0000:8A2E:0370:7334”,要判断它是“IPv4”、“IPv6”,还是“Neither”。这里我们按 严格格式 来:IPv4要四段十进制、每段0~255、不能有前导零(单独一个“0”除外);IPv6要八段、每段1到4位十六进制(0-9a-fA-F),不考虑“::”省略写法,面试里多数也是这么要求,省得扯一堆边界。 就是两个判定器:先看有没有点还是冒号。点就按IPv4规则切四段,一段一段校验;冒号就按IPv6切八段,每段看长度和字符合法性。其它情况直接“Neither”。注意空串、结尾多一个分隔符、段里有“+”“-”之类,都要一票否决。就这么直白。
def validIPAddress(queryIP: str) -> str:
    if queryIP.count(".") == 3and":"notin queryIP:
        return"IPv4"if _is_ipv4(queryIP) else"Neither"
    if queryIP.count(":") == 7and"."notin queryIP:
        return"IPv6"if _is_ipv6(queryIP) else"Neither"
    return"Neither"

def _is_ipv4(s: str) -> bool:
    parts = s.split(".")
    if len(parts) != 4:
        returnFalse
    for p in parts:
        # 不能有空段
        ifnot p:
            returnFalse
        # 只能是数字
        ifnot p.isdigit():
            returnFalse
        # 前导零不行,除非就是"0"
        if len(p) > 1and p[0] == "0":
            returnFalse
        # 数值范围
        try:
            v = int(p)
        except ValueError:
            returnFalse
        if v < 0or v > 255:
            returnFalse
    returnTrue

def _is_ipv6(s: str) -> bool:
    parts = s.split(":")
    if len(parts) != 8:
        returnFalse
    hexdigits = set("0123456789abcdefABCDEF")
    for p in parts:
        # 每段1~4位
        if len(p) == 0or len(p) > 4:
            returnFalse
        # 只能是十六进制字符
        ifnot all(ch in hexdigits for ch in p):
            returnFalse
    returnTrue

# 小测一下
tests = [
    "172.16.254.1",               # IPv4
    "172.16.254.01",             # 前导零 -> Neither
    "256.0.0.1",                 # 超范围 -> Neither
    "1e1.4.5.6",                 # 非纯数字 -> Neither
    "2001:0db8:85a3:0000:0000:8A2E:0370:7334",  # IPv6
    "2001:db8:85a3::8A2E:0370:7334",            # 有::省略 -> Neither(本实现不支持)
    "02001:0db8:85a3:0000:0000:8A2E:0370:7334", # IPv6段前导零合法,但这段5位 -> Neither
    "",                           # 空 -> Neither
]
for t in tests:
    print(t, "=>", validIPAddress(t))
我昨儿在便利店排队的时候想了下,面试里最爱卡三件事:第一,IPv4的“00”“01”这种,肉眼看着像,规则说不行;第二,IPv6别偷偷把“::”也实现了,除非题目明确要求,否则越写越乱;第三,分隔符边界,比如末尾一个点“1.1.1.”, split 会给你空串,记得拦掉。还有个小细节,IPv4段里“+1”“-0”这种, isdigit() 直接否,省心。 整活就是线性:按字符数扫描一遍, O(n) ,常数也小。空间除了分割出来的列表,没额外花里胡哨。 -END -
我为大家打造了一份RPA教程, 完全免费: songshuhezi.com/rpa.html 🔥 虎哥私藏精品 🔥 虎哥作为一名老码农,整理了全网最全 《python高级架构师资料合集》 ,总量高达 650GB , 点击下方公众号回复关键字 python 全部 免费领