【问题标题】:How to increment a number with the form x.y.z如何使用 x.y.z 形式增加数字
【发布时间】:2022-11-02 08:40:52
【问题描述】:

我在尝试在不使用索引的情况下以x.y.z 的形式增加最右边的数字时遇到问题。在此之前,我从未使用过小数点超过 1 个的浮点数,并且不知道如何开始。我想我需要将每个单独的值转换为整数,然后使用字符串输出它们。

最终产品需要看起来像这样:

1.7.9 => 1.7.10

【问题讨论】:

    标签: python


    【解决方案1】:

    没有“小数点多于 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.StrictVersiondistutils.version.LooseVersion 来避免重写轮子。
    • @flakes 我不知道这些课程,谢谢,但看起来distutils 已被弃用。那好吧...
    • 哇哦。我没有意识到弃用。我想知道bumpversion是否公开导出任何方法?
    • 我经常使用setuptools_scm。它适用于 git repos 和我的普通 Python 构建管道。
    【解决方案2】:

    您将很难使用浮点数来执行此操作(浮点数中不能有 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"
    

    【讨论】:

      【解决方案3】:

      首先,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)
      

      【讨论】:

        【解决方案4】:

        你可以试试这个;

        a = '1.7.9'
        output = a[:-1]+ str(int(a.split('.')[-1])+1)
        print(output) # 1.7.10
        

        【讨论】:

          【解决方案5】:

          您还可以使用对象来存储 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
          猜你喜欢
          • 1970-01-01
          • 2014-12-29
          • 2019-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-22
          • 2015-10-21
          • 2021-08-04
          相关资源
          最近更新 更多