女生和32岁大厂程序员交往半年多,最近纠结要不要分手,原因直接给我看懵了:“他不行”…
刚看到个贴子,说一女生和32岁的大厂程序员谈了半年,现在纠结要不要分手,理由竟然是“他🌟生活不行”,属实把我看愣了。
网友们的回复我也瞄了下,有的说女孩现实、有的说男生可怜。但在我看来,这事本质上是
需求不匹配
,就像你点外卖想吃麻辣烫,结果对方给你送了清汤面,再好的人你也吃不下去。
感情里这种“核心诉求”是很难靠忍的,越忍越别扭。
换个角度想,女生提出这个问题,本质上也不是挑事,而是困惑:其他都挺好,但有个关键点对不上。
亲密关系不是职场,没法靠忍耐换来价值;两个人的节奏、需求、身体沟通如果始终不对拍,早晚要爆雷。
不过话说回来,遇到问题不代表一定要立刻分手,先沟通、先尝试调整也没啥不好。感情不像写代码,不是一报错就删库重建。
【备注:文末可领最新资料】
我为大家打造了一份RPA教程, 完全免费: songshuhezi.com/rpa.html 🔥 虎哥私藏精品 🔥 虎哥作为一名老码农,整理了全网最全 《python高级架构师资料合集》 ,总量高达 650GB
面试题:验证IP地址
直接上题哈,就是那个很常见的算法题:验证一个字符串是不是合法 IP 地址,用 Python 写。 给你一个字符串
queryIP
,你要判断它到底是:
- 合法 IPv4
- 合法 IPv6
- 还是压根就不是 IP
"IPv4"
/
"IPv6"
/
"Neither"
这三个里的一个。这个就是 LeetCode 上那道“验证IP地址”。
看着像简单字符串判断,其实细节还挺多的,所以这题特别考“耐心”。
先聊聊 IPv4 怎么判断
IPv4 长这样:
a.b.c.d
,中间 3 个点,4 段数字。
每一段有几个规则:
- 必须都是数字,不能有字母
- 长度 1~3 位
- 不能有前导 0(除非这个数就是 0 本身)
- 数值范围 0~255
-
合法的:
"192.168.0.1"、"0.0.0.0"、"255.255.255.255" -
不合法的:
"01.1.1.1"(前导 0)、"256.1.1.1"(超过 255)、"1..1.1"(空段)、"1.a.1.1"(有字母)
-
先用
split('.')切成 4 段,不是 4 段直接失败 - 每一段挨个检查刚才那几个条件
def is_ipv4(ip: str) -> bool:
parts = ip.split('.')
if len(parts) != 4:
returnFalse
for part in parts:
# 不能为空
ifnot part:
returnFalse
# 必须全是数字
ifnot part.isdigit():
returnFalse
# 不能有前导 0(但单个 0 允许)
if len(part) > 1and part[0] == '0':
returnFalse
# 范围 0~255
num = int(part)
if num < 0or num > 255:
returnFalse
returnTrue
再看 IPv6 怎么判断
IPv6 是 16 进制的,格式类似:
x:x:x:x:x:x:x:x
,一共 8 段,用冒号分隔。
每段的规则:
- 每段长度 1~4
-
只能出现字符
0-9、a-f、A-F -
不能有空段(这题
不
考虑压缩写法
::,LeetCode 那题规定是完整形式)
-
合法:
"2001:0db8:85a3:0000:0000:8a2e:0370:7334" -
也合法:
"2001:db8:85a3:0:0:8A2E:370:7334"(大小写都可以,前导 0 随便) -
不合法:
"2001:db8:85a3::8A2E:370:7334"(有 ::,本题不认)、"2001:db8:85a3:8A2E:370:7334"(只有 7 段)、"GGGG:..."(超出 16 进制范围)
-
split(':')看是不是 8 段 - 每段长度 1~4
- 然后逐字符判断是不是在合法字符集合里
def is_ipv6(ip: str) -> bool:
parts = ip.split(':')
if len(parts) != 8:
returnFalse
hex_chars = "0123456789abcdefABCDEF"
for part in parts:
# 不能为空,长度不能超过 4
if len(part) == 0or len(part) > 4:
returnFalse
# 每个字符必须是合法 16 进制
for ch in part:
if ch notin hex_chars:
returnFalse
returnTrue
整合一下主函数
最终的主函数就很清爽了:-
如果里面有点
.,先尝试按 IPv4 校验 -
如果里面有冒号
:,按 IPv6 校验 -
两个都不通过,就返回
"Neither"
.
或
:
就直接判断类型,比如
"1.1.1."
也有点,但显然不是 IPv4,所以一定要调用上面两个校验函数。
完整 Python 代码可以这样写:
class Solution:
def validIPAddress(self, queryIP: str) -> str:
if self.is_ipv4(queryIP):
return"IPv4"
if self.is_ipv6(queryIP):
return"IPv6"
return"Neither"
def is_ipv4(self, ip: str) -> bool:
parts = ip.split('.')
if len(parts) != 4:
returnFalse
for part in parts:
ifnot part:
returnFalse
ifnot part.isdigit():
returnFalse
# 不能有前导 0
if len(part) > 1and part[0] == '0':
returnFalse
try:
num = int(part)
except ValueError:
returnFalse
if num < 0or num > 255:
returnFalse
returnTrue
def is_ipv6(self, ip: str) -> bool:
parts = ip.split(':')
if len(parts) != 8:
returnFalse
hex_chars = "0123456789abcdefABCDEF"
for part in parts:
if len(part) == 0or len(part) > 4:
returnFalse
for ch in part:
if ch notin hex_chars:
returnFalse
returnTrue
你自己本地可以简单测几下:
s = Solution()
print(s.validIPAddress("192.168.0.1")) # IPv4
print(s.validIPAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334")) # IPv6
print(s.validIPAddress("256.256.256.256")) # Neither
print(s.validIPAddress("1e1.4.5.6")) # Neither
整体来说,这题没什么高深算法,主要就是
字符串拆分 + 规则判断
,但非常考细节。写的时候多想一句:“这个 case 会不会出 bug”,基本就能 AC。
-END
-
我为大家打造了一份RPA教程, 完全免费: songshuhezi.com/rpa.html 🔥 虎哥私藏精品 🔥 虎哥作为一名老码农,整理了全网最全 《python高级架构师资料合集》 ,总量高达 650GB