python减去多个小数位

时间:2017-10-05 21:37:34

标签: python

是否有可能在python中以某种方式减去使用多个小数位,如版本号。

例如,

8.0.18试图找到以前版本的8.0.17

任何减去1得到8.0.17的方式或方法?

我正在考虑使用正则表达式并取出18并减去1然后使自己成为8.0中的变量。并添加17回到它:),像这样

version_found = "8.0.18"
version = re.search('^\d.\d\d.(\d\d)$', version_found).group(1)
prev_version = int(version) - 1

所以prev_version最终会变成17,然后我可以转换回字符串并将其转换为8.0。 但是想知道是否有某些方法我不知道或不考虑?感谢

5 个答案:

答案 0 :(得分:3)

这是我写的一个小小的脚本,在你的代码中应该很容易实现:

#!/usr/bin/env python3.6

version = "8.0.18"
version = version.split(".")
if int(version[-1]) > 0:
    version[-1] = str(int(version[-1]) - 1)
    version = '.'.join(version)
    print(version)
else:
    print("Error, version number ended in a zero!")

这可以通过将字符串拆分为每个句点的列表来生成["8", "0", "18"]。然后通过访问索引-1获取列表中的最后一个元素。然后我们从该索引的值中减去1并将其分配回相同的索引。最后,将列表连接到一个字符串中,每个元素之间有句点,然后打印结果。

答案 1 :(得分:0)

我认为执行此操作的最佳方法是计算字符串中的句点数,并在您希望减去的特定时段拆分文本。然后你必须将字符串转换为整数,从该整数中减1,然后将其读取为版本号。

有几种方法可以做到这一点,但这就是我这样做的方式。同时将它保存在一个函数中,这样你就可以在不同的时间段多次调用它。

答案 2 :(得分:0)

基于Steampunkery

version = "6.4.2"
nums = version.split(".")

skip = 0 # skip from right, e.g. to go directly to 6.3.2, skip=1

for ind in range(skip,len(nums)):
    curr_num = nums[-1-ind]
    if int(curr_num) > 0:
        nums[-1-ind] = str(int(curr_num) - 1)
        break
    else:
        nums[-1-ind] = "x"

oldversion = '.'.join(nums)
print(oldversion)    

示例输出:

8.2.0 --> 8.1.x
8.2.1 --> 8.2.0
8.0.0 --> 7.x.x
0.0.0 --> x.x.x
8.2.0 --> 8.1.0  (with skip=1)

答案 3 :(得分:0)

version = "8.0.18"
index = version.rindex(".") + 1
version = version[:index] + str(int(version[index:])-1)

只需使用rindex查找上一期。 然后,将之后的所有内容转换为数字,减去一个,将其转换回字符串,然后就完成了。

如果您想要除最后版本号之外的任何值,这会变得更加复杂。您必须从每次返回的位置开始索引。例如,在"之后的第二个"之后改变值。 (即第一个)小数位,它变得更加丑陋:

start_index = version.rindex(".")
for _ in range(1,1):
    end_index = start_index
    start_index = version.rindex(".", end=end_index)

version = version[:start_index+1] + 
    str(int(version[start_index+1:end_index])) + 
    version[end_index:]

答案 4 :(得分:0)

lst = version.split('.')            # make a list from individual parts

last_part = lst.pop()               # returns the last element, deleting it from the list
last_part = int(last_part) - 1      # converts to an integer and decrements it
last_part = str(last_part)          # and converts back to string

lst.append(last_part)               # appends it back (now decremented)

version = '.'.join(lst)             # convert lst back to string with period as delimiter