Sürüm numarası karşılaştırma
Python bunun daha zarif bir çözüm olmalı ... belki biriniz yardımcı olabilir:
cmp
-gibi bir işlevi sürüm sayılar için -1, 0 veya 1 dönen yazmak için, alt rasgele bir sayı için izin istiyorum.
Her alt bölüm, bir sayı olarak, 1.10 ^ bu nedenle yorumlanmış olması gerekiyordu . 1.1.
İstenilen çıkışı işlevi
mycmp('1.0', '1') == 0
mycmp('1.0.0', '1') == 0
mycmp('1', '1.0.0.1') == -1
mycmp('12.10', '11.0.0.0.0') == 1
...
Ve burada benim uygulama, gelişmeye açık
def mycmp(version1, version2):
parts1 = [int(x) for x in version1.split('.')]
parts2 = [int(x) for x in version2.split('.')]
# fill up the shorter version with zeros ...
lendiff = len(parts1) - len(parts2)
if lendiff > 0:
parts2.extend([0] * lendiff)
elif lendiff < 0:
parts1.extend([0] * (-lendiff))
for i, p in enumerate(parts1):
ret = cmp(p, parts2[i])
if ret: return ret
return 0
Python 2.4.5 btw kullanıyorum. (iş yerine de ... yüklü).
Burada küçük bir 'test paketi' kullanabilirsiniz
assert mycmp('1', '2') == -1
assert mycmp('2', '1') == 1
assert mycmp('1', '1') == 0
assert mycmp('1.0', '1') == 0
assert mycmp('1', '1.000') == 0
assert mycmp('12.01', '12.1') == 0
assert mycmp('13.0.1', '13.00.02') == -1
assert mycmp('1.1.1.1', '1.1.1.1') == 0
assert mycmp('1.1.1.2', '1.1.1.1') == 1
assert mycmp('1.1.3', '1.1.3.000') == 0
assert mycmp('3.1.1.0', '3.1.2.10') == -1
assert mycmp('1.1', '1.10') == -1
CEVAP
Nasıl Python kullanarak distutils.version.StrictVersion
hakkında?
>>> from distutils.version import StrictVersion
>>> StrictVersion('10.4.10') > StrictVersion('10.4.9')
True
cmp
fonksiyon için:
>>> cmp = lambda x, y: StrictVersion(x).__cmp__(y)
>>> cmp("10.4.10", "10.4.11")
-1
distutils.version.LooseVersion
daha yararlı olacak daha karmaşık sürüm numaralarını karşılaştırmak istiyorsanız, ancak, sadece aynı tür karşılaştırmak için emin olun.
>>> from distutils.version import LooseVersion, StrictVersion
>>> LooseVersion('1.4c3') > LooseVersion('1.3')
True
>>> LooseVersion('1.4c3') > StrictVersion('1.3') # different types
False
LooseVersion
en akıllı bir araç değildir, kolayca kandırılabilir:
>>> LooseVersion('1.4') > LooseVersion('1.4-rc1')
False
Bu cins ile başarı elde etmek, standart kütüphane ve kullanımı dışında adım gerekir distribute'nin ayrıştırma programı parse_version
.
>>> from pkg_resources import parse_version
>>> parse_version('1.4') > parse_version('1.4-rc2')
True
Eğer belirli bağlı olarak harf kullanımı, distutils
yerleşik araçlar yeterli olup olmadığını, ya da eğer 23 ** bir bağımlılık eklemek için garanti olup olmadığını karar gerekir.
java.lang.UnsupportedClassVersionError...
Nasıl benim iphone uygulama kendi sürü...
Ne'In arasındaki fark "sürüm...
Nasıl benim Subversion bulmak için ser...
Nasıl yazılım sürüm numarası js kullan...