版本号比大小
(每道题开头都有同一段:parse_ver 把「1.4.0」变成能比大小的元组,satisfies(版本, 约束) 判一个版本满不满足「>=1.4,<2」这种约束,split_req 把「httpkit>=1.4」切成名字和约束;REPO 是上面那个小仓库。)
版本号不能按字符串比("1.10" 会小于 "1.9")。用 parse_ver 比一比:
def parse_ver(s):
return tuple(int(x) for x in s.split("."))
def satisfies(ver, spec):
v = parse_ver(ver)
for part in spec.split(","):
part = part.strip()
if not part:
continue
for op in (">=", "<=", "==", "!=", ">", "<"):
if part.startswith(op):
w = parse_ver(part[len(op):])
break
ok = {">=": v >= w, "<=": v <= w, "==": v == w, "!=": v != w, ">": v > w, "<": v < w}[op]
if not ok:
return False
return True
def split_req(line):
i = 0
while i < len(line) and (line[i].isalnum() or line[i] in "_-"):
i += 1
return line[:i], line[i:].replace(" ", "")
print(str("1.10.0" > "1.9.0") + "/" + str(parse_ver("1.10.0") > parse_ver("1.9.0")) + "/" + str(satisfies("1.9.0", ">=1.4,<2")) + "/" + str(satisfies("2.0.0", ">=1.4,<2")))
全部评论