1

rpmパッケージを介して実行するスクリプトを作成し、パッケージのリリースバージョンをコマンドラインで指定された2つの引数 --fromVersion および --toVersion と比較しようとしています。

この方法でスクリプトを実行します。

python packageSearch.py --package --fromVersion 5.5.0 --toVersion 7.0.0

コマンドライン引数を文字列に変換しようとしても、次のようになります。

if ( float(package['version']) >= float(options.fromVersion) and package['version'] <= options.toVersion ): 

ValueError: invalid literal for float(): 7.0.21

私はstackoverflowとgoogleを検索しましたが、intとfloatを比較する良い例が見つからなかったこと、またはユーザーがfloatを入力した場合、floatとfloatを比較する必要があることに驚きました。

私も変換せずに試してみましたが、動作しますが、比較は間違っています。

このステートメントでpythonが無効な構文を言っているのはなぜですか:

version3 = 5.5.5
File "<stdin>", line 1
version3 = 5.5.5
               ^
SyntaxError: invalid syntax

しかし、次のことを試してみると:

version3 = 5.5

期待通りに問題なく動作します。ここで何が起こっているのか、変数に5.5.5を割り当てることができないのはなぜですか、また、整数または浮動小数点数である可能性のある値を別の浮動小数点数と比較する最良の方法は何ですか? float()で浮動小数点数に変換しないためです動作するようです。

4

3 に答える 3

2

float の代わりにタプルにバージョンを格納すると、よく比較されます。

assert (1,2,0) < (1,3,0)
assert (0,10) < (0,10,1)
assert (0,10) < (1,0)
assert (0,9) < (0,11)

ただし、このアプローチにはいくつかの落とし穴がある可能性があります。

assert (1,2) == (1,2,0) # Boom!
于 2013-11-06T10:28:00.353 に答える