1

コマンド ラインで数値を指定すると (たとえば 92 とします)、2 は完全に無視されて 9 のみが使用されます。ただし、arg[1] を使用すると、9 ではなく 2 が使用されます。 import sys

for arg in sys.argv:
    print arg

print ""    
print "-----"
print ""    

try:
    argNumber = int(arg[0])
except ValueError:
    argNumber = 0
    print "This is wrong"

for i in range(argNumber, 0, -1):
    print i

また、何らかの理由で、ValueError 以外の行に「これは間違っています」という行を追加できません。それは私にインデントエラーを与えますか?

4

5 に答える 5

5

問題は、 int を呼び出していることですarg[0]。さて、argすべての引数を調べたときに最初のループから残ったものは、sys.argvそのループの最後の要素です。したがって、でスライスすると[0]、実際には、最初の引数ではなく、最後の引数から最初の文字を取得しています。

あなたの修正は、sys.argv[1]代わりに単にそこで使用することです。

于 2012-10-23T09:25:24.323 に答える
3

ループ変数 を再利用しているため、文字列全体ではなく のarg最初の文字にアクセスしています。sys.argv[1]試す:

try:
    argNumber = int(sys.argv[1])
except ValueError:
    argNumber = 0

あなたのスニペットに「これは間違っています」という行が表示されないので、それについてコメントすることはできません。

最後に、現在のところ、すべての行の前に 4 つのスペースを配置することが唯一の方法です。コード フェンシングのスタイル (GitHub など) がサポートされていればいいのですが、そうではありません。:-(

于 2012-10-23T09:25:42.773 に答える
2

ループの実行後、arg には最後に渡された引数の値が文字列として含まれます。

あなたの特定のケースでは、arg = '92'. だからあなたがするとき、あなたはarg[0]あなたを手に入れてあなた'9'arg[1]与えます'2'

sys.argv[1]最初の引数が必要な場合に使用します。

于 2012-10-23T09:25:53.720 に答える
1

これarg[0]は、 が に割り当てられた文字列の最初の要素であるためargです。コードでは、これが最後のコマンド ライン引数でした。

int(arg)問題を解決するために使用します。

于 2012-10-23T09:25:28.530 に答える
1

このループの後

for arg in sys.argv:
    print arg

arg最後のコマンド ライン引数です。これは文字列なので、eg を使用するarg[0]と、その文字列の最初の文字が取得されます。

于 2012-10-23T09:26:40.510 に答える