是否有可能在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。 但是想知道是否有某些方法我不知道或不考虑?感谢
答案 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