2017-10-05 45 views
1

是否有可能在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。 但想知道是否有某種方法我不知道或不考慮?謝謝

+3

應該如何減去'8.10.0'? – RomanPerekhrest

+0

[在Python中增加版本號]的可能重複(https://stackoverflow.com/questions/26868137/incrementing-version-numbers-in-python),哦,我的壞它是'遞減',但可能有關-_- – davedwards

+0

可能有用的圖書館[semantic_version](https://pypi.python.org/pypi/semantic_version) – davedwards

回答

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,並將其分配回相同的索引。最後,將列表加入一個字符串中,每個元素之間有句點,然後打印結果。

0

我認爲這樣做的最好方法是計算字符串中的句點數,然後在希望減少的特定時間段內分割文本。然後,您必須將字符串轉換爲整數,從該整數中減1,然後將其讀入版本號。

有幾種方法可以做到這一點,但多數民衆贊成我這樣做的方式。同時將它保存在一個函數中,以便在不同的時間點多次調用它。

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) 
+0

沒有冒犯,但這是一個非常艱難的閱讀。爲了便於閱讀,您可能需要將一些位分隔到不同的行上。 – Steampunkery

+0

@Steampunkery沒錯,但是我們想到了同樣的想法。沒有解決:**它應該如何減去8.10.0?**然而 –

+0

真的,它可能不會減去8.10.0,但你的答案確實完成了工作,只是檢查:) – Steampunkery

0
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:] 
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