[英]python subtracting multiple decimal places
是否有可能在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。 但是想知道是否有一些我不知道或不考虑的方法? 谢谢
这是我写的一个小小的脚本,它应该很容易在你的代码中实现:
#!/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,然后将其读入版本号。
有几种方法可以做到这一点,但这就是我这样做的方式。 同时将其保存在一个函数中,以便您可以在不同的时间段多次调用它。
基于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)
version = "8.0.18"
index = version.rindex(".") + 1
version = version[:index] + str(int(version[index:])-1)
只需使用rindex查找您的上一期。 然后,将之后的所有内容转换为数字,减去一个,将其转换回字符串,然后就完成了。
如果您想要除最后版本号之外的任何值,这将变得更加复杂。 你必须从每次返回的位置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:]
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.