python最新版本號是多少 版本號大小比較

2021-10-11 07:30:23 字數 3766 閱讀 6715

=start=

緣由:在逛部落格的時候發現一篇好玩的文章「 bash比較版本號 」,想起來之前有過類似的想法,但一直沒有去實現,現在好了,有現成的版本可用了^_^

原文給出了用bash程式設計實現的版本比較**,後來我又找到了python實現的版本,以後再看看有沒有用php或c語言實現的版本,沒有的話可以參照著自己實現一下,就當是做個練習了。

乙個選擇是sort命令(gnu coreutils >= 7):

$ sort --version

sort (gnucoreutils) 8.21

licensegplv3+: gnugplversion 3 or later .

this is freesoftware: youarefreeto changeand redistributeit.

thereis nowarranty, to theextentpermittedbylaw.

writtenbymikehaerteland pauleggert.

$ sort --help

-v, --version-sortnaturalsortof (version) numberswithintext

$ printf '2.4.5\n2.8\n2.4.5.1\n' | sort -v

2.4.5

2.4.5.1

2.8另乙個更通用的選擇是 bash程式設計實現 (不依賴任何外部工具):

#!/bin/bash

vercomp () ; i

dover1[i]=0

done

for ((i=0; i

doif [[ -z $ ]]

then

# fill empty fields in ver2 with zeros

ver2[i]=0

fiif ((10#$ > 10#$))

then

return 1

fiif ((10#$ < 10#$))

then

return 2

fidone

return 0

testvercomp () {

vercomp $1 $2

case $? in

0) op='=';;

1) op='>';;

2) op='

esac

if [[ $op != $3 ]]

then

echo "fail: expected '$3', actual '$op', arg1 '$1', arg2 '$2'"

else

echo "pass: '$1 $op $2'"

fi# run tests

# argument table format:

# testarg1 testarg2 expected_relationship

echo "the following tests should pass"

while read -r test

dotestvercomp $test

done << eof

11=2.12.2<

3.0.4.103.0.4.2>

4.084.08.01<

3.2.1.9.8144 3.2>

3.23.2.1.9.8144 <

1.22.1<

2.11.2>

5.6.75.6.7=

1.01.11.1.1=

1.1.11.01.1=

11.0=

1.01=

1.0.2.01.0.2=

1..01.0=

1.01..0=

eofecho "the following test should fail (test the tester)"

testvercomp 1 1 '>'

用python實現的版本:

#!/usr/bin/env python

# coding=utf-8

importre

defmycmp(version1, version2):

defnormalize(v):

return [int(x) for x in re.sub(r'(\.0+)*$','', v).split(".")]

return cmp(normalize(version1), normalize(version2))

assert mycmp("1", "1") == 0

assert mycmp("2.1", "2.2") < 0

assert mycmp("3.0.4.10", "3.0.4.2") > 0

assert mycmp("4.08", "4.08.01") < 0

assert mycmp("3.2.1.9.8144", "3.2") > 0

assert mycmp("3.2", "3.2.1.9.8144") < 0

assert mycmp("1.2", "2.1") < 0

assert mycmp("2.1", "1.2") > 0

assert mycmp("5.6.7", "5.6.7") == 0

assert mycmp("1.01.1", "1.1.1") == 0

assert mycmp("1.1.1", "1.01.1") == 0

assert mycmp("1", "1.0") == 0

assert mycmp("1.0", "1") == 0

assert mycmp("1.0", "1.0.1") < 0

assert mycmp("1.0.1", "1.0") > 0

assert mycmp("1.0.2.0", "1.0.2") == 0

另乙個bash程式設計實現的版本(暫未測試):

#!/bin/bash

do_version_check() {

[ "$1" == "$2" ] && return 10

ver1front=`echo $1 | cut -d "." -f -1`

ver1back=`echo $1 | cut -d "." -f 2-`

ver2front=`echo $2 | cut -d "." -f -1`

ver2back=`echo $2 | cut -d "." -f 2-`

if [ "$ver1front" != "$1" ] || [ "$ver2front" != "$2" ]; then

[ "$ver1front" -gt "$ver2front" ] && return 11

[ "$ver1front" -lt "$ver2front" ] && return 9

[ "$ver1front" == "$1" ] || [ -z "$ver1back" ] && ver1back=0

[ "$ver2front" == "$2" ] || [ -z "$ver2back" ] && ver2back=0

do_version_check "$ver1back" "$ver2back"

return $?

else

[ "$1" -gt "$2" ] && return 11 || return 9

fido_version_check "$1" "$2"

情況比較簡單的時候可以用下面的命令試試:

$ echo '2.4.5

2.82.4.5.1

2.10.2' | sort -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 -g

=end=

cimoc 最新版 Cimoc最新版本

cimoc最新版本擁有超豐富的熱門漫畫資源,讓你在每乙個無聊的時間裡都可以自由閱讀好看的漫畫,每一本漫畫都擁有自己的標籤,讓使用者們可以通過這些標籤找到更多相似型別的漫畫,並且所有漫畫資源都可以讓你免費暢讀,看到好看的漫畫不要猶豫,直接點進去就能 cimoc最新版本 軟體特色 1.中漫 日漫 韓漫,...

mysql 最新版本 mysql最新版本是多少

mysql 8.0 正式版 8.0.11 已發布,官方表示 mysql 8 要比 mysql 5.7 快 2 倍,還帶來了大量的改進和更快的效能!注意 從 mysql 5.7 公升級到 mysql 8.0 僅支援通過使用 in place 方式進行公升級,並且不支援從 mysql 8.0 降級到 m...

Android最新版本號與API級別對應關係

平台版本 名稱版本號 api 級別 version code 發布時間 備註android 11 android 11 11.030r 2020 10 23 平台亮點 android 10 android 10 10.029q 2019 9 3 平台亮點 android 9 pie9.028p 20...