私はCに精通しており、Pythonで実験を始めました。私の質問はsys.argv
コマンド。私はそれがコマンドラインインタープリターに使用されていることを読みましたが、単純なプログラムを実行しようとすると、期待した結果が得られません。
コード:
import sys
a = sys.argv[1]
b = sys.argv[2]
print a, b
print a+b
入力:
python mySum.py 100 200
出力:
100 200
100200
2つの引数を追加すると、2つの値が加算される代わりに連結されます。値は文字列として取られているようです。
それらを数値として解釈するにはどうすればよいですか?
Int()を使用して引数を整数に変換できます
import sys
a = int(sys.argv[1]) b = int(sys.argv[2])
print a, b
print a+b
入力:python mySum.py 100 200
出力:
100 200
300
ユーザー入力も検証する必要があります。
import sys
def is_intstring(s):
try:
int(s)
return True
except ValueError:
return False
for arg in sys.argv[1:]:
if not is_intstring(arg):
sys.exit("All arguments must be integers. Exit.")
numbers = [int(arg) for arg in sys.argv[1:]]
sum = sum(numbers)
print "The sum of arguments is %s" % sum
実際、あなたは自分で問題を発見しました。_sys.argv
_は文字列の配列です。
int()
を使用して、文字列を整数に変換できます。この場合の例:a = int(sys.argv[1])
_sys.argv
_アイテムは常にstrings
です。 int(a)
でint
にキャストする必要があります。
OptParse などのCLI引数を処理するためにサードパーティのライブラリを使用することもできます。
Pythonでは、文字列は暗黙的に整数に変換されません。試してみる
num1 = int(sys.argv[1])
This would represent the numerical value of the number, not its string representation.
コマンドライン引数を含む比較の実行に注意してください。これは、reallyPython 2's policy for異なるタイプのオブジェクトを比較する( 'int' <'list' <'string' <'Tuple') here 。In Python 3、異なるオブジェクトを比較するタイプはTypeErrorにつながります。
オブジェクト比較の混乱の例については、セクション6.1.1のint()
呼び出しを削除してみてください。 Pythonチュートリアルフィボナッチコード の場合、whileループ条件が「int」<「string」になるため、無限ループになります。 (これはPerlでは発生しません、btw)。
Python 3。