繁体   English   中英

python减去多个小数位

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM