通过Python实现数字范围省略

-2 投票
2 回答
38 浏览
提问于 2025-04-12 20:54

我想用Python写一个代码,来处理数字范围的简化,就像下面的图片所示。

数字范围(比如页码范围)通常会被简化,比如42–43可以写成42–3,123–128可以写成123–8。这种处理方式叫做数字范围简化,也可以称为数字缩写,或者更随意地说是“丢掉数字”。

我想知道怎么通过Python编程来实现这个功能。

在这里输入图片描述

最小可重现示例:

输入:

3–10                    
12–18
71–72
96–117
100–104
1100–1113
101–108
808–833
1103–1104
321–328
498–532
1013–1019
1087–1089
1496–1500
11564–11615
12991–13001

2 个回答

1

你可以把每个输入当作字符串来读取,然后把输入分成两个部分,看看它们之间的差距。可以这样做:

my_input = input("Enter range: ")

my_input = [int(x) for x in my_input.split("-")]

my_input = f"{my_input[0]}-{my_input[1] if int(my_input[1] / 10) != int(my_input[0] / 10) else my_input[1] % 10}"

print(my_input)

在这个代码片段中,我把文本(比如 "122-129")用 '-' 分开,然后把它转换成一个整数数组(变成 [122, 129])。接着,我把这两个数字都除以 10,再次转换成整数,因为转换成整数后,小数部分会被去掉(就像用 Math.floor() 一样)。如果得到的结果是一样的,那我就可以通过对第二个数字取模 10 来缩短它(这就是把这个数字除以 10 后剩下的部分,比如 129 % 10 = 9)。

2

注意到输出总是以 left-right' 的形式出现,其中 right'right 去掉了共同前缀的部分。

首先,把输入分开:

left, right = input_string.split("-")

然后修改 right

def get_shortened_right(left: str, right: str) -> str:
  for i in range(min(len(left), len(right)):
    if left[i] != right[i]:
      break  # stop if not common prefix
  return right[i:]

接下来,你就可以很容易地按照需要的格式构建输出:

final_result = f"{left}-{new_right}"

撰写回答