मैं एक लिखना चाहते हैं cmp
की तरह समारोह जो दो संस्करण संख्याओं और रिटर्न तुलना -1
, 0
या 1
उनकी तुलना valuses पर आधारित है।
-1
यदि संस्करण A, B से पुराना है, तो वापस लौटें0
यदि संस्करण A और B समतुल्य हैं, तो वापस लौटें1
यदि संस्करण A, B से नया है, तो वापस लौटें
प्रत्येक उपधारा को एक संख्या के रूप में व्याख्या करना माना जाता है, इसलिए 1.10> 1.1।
वांछित फ़ंक्शन आउटपुट हैं
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
...
और यहाँ मेरा कार्यान्वयन है, सुधार के लिए खुला:
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
मैं अजगर 2.4.5 btw का उपयोग कर रहा हूँ। (मेरे काम करने की जगह पर स्थापित ...)।
यहां एक छोटा 'टेस्ट सूट' है जिसका आप उपयोग कर सकते हैं
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