【发布时间】:2022-11-02 08:40:52
【问题描述】:
我在尝试在不使用索引的情况下以x.y.z 的形式增加最右边的数字时遇到问题。在此之前,我从未使用过小数点超过 1 个的浮点数,并且不知道如何开始。我想我需要将每个单独的值转换为整数,然后使用字符串输出它们。
最终产品需要看起来像这样:
1.7.9 => 1.7.10
【问题讨论】:
标签: python
我在尝试在不使用索引的情况下以x.y.z 的形式增加最右边的数字时遇到问题。在此之前,我从未使用过小数点超过 1 个的浮点数,并且不知道如何开始。我想我需要将每个单独的值转换为整数,然后使用字符串输出它们。
最终产品需要看起来像这样:
1.7.9 => 1.7.10
【问题讨论】:
标签: python
没有“小数点多于 1 位的浮点数”之类的东西。浮点数是实数。您正在寻找的东西可以通过以下方式完成:
>>> version = "1.7.9"
>>> parts = version.split(".")
>>> parts
['1', '7', '9']
>>> parts[2] = str(int(parts[2]) + 1)
>>> parts
['1', '7', '10']
>>> ".".join(parts)
'1.7.10'
【讨论】:
distutils.version.StrictVersion 或distutils.version.LooseVersion 来避免重写轮子。
distutils 已被弃用。那好吧...
您将很难使用浮点数来执行此操作(浮点数中不能有 2 个小数位)...我建议您将 x.y.z 单独跟踪为整数,然后您可以单独递增它们:
x = 1
y = 7
z = 9
print(f"{x}.{y}.{z}")
# "1.7.9"
z += 1
print(f"{x}.{y}.{z}")
# "1.7.10"
【讨论】:
首先,float 中不能有两位小数,解决问题的最简单方法就是使用str 的索引。
s = "1.7.9"
print(''.join(s[:-1]+str(int(s[-1])+1)))
但是由于您不想使用索引,因此可以改用以下代码。但是使用这段代码就像你用锤子压扁一只苍蝇。所以不建议这样做,这只是因为你要求一种方法来做到这一点。请记住,即使在那些函数内部,它们也使用索引来提供输出。
s = "1.7.9"
t = '.'.join([str(int(x)+1 if x in s.rpartition(".") else int(x)) for x in s.split(".")])
print(t)
【讨论】:
你可以试试这个;
a = '1.7.9'
output = a[:-1]+ str(int(a.split('.')[-1])+1)
print(output) # 1.7.10
【讨论】:
您还可以使用对象来存储 x、y 和 z:
class xyz:
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
def __str__(self):
return f"{self.x}.{self.y}.{self.z}"
def __iadd__(self, value):
self.z += value
return self
obj = xyz(1, 7, 9)
print(obj) # 1.7.9
obj += 1
print(obj) # 1.7.10
【讨论】:
__iadd__。然后你可以简单地写obj += 1。