每当我通过命令行给出一个数字时,让我们说92,它只需要9,完全忽略2.然而,如果我使用arg [1]它将使用2而不是9。 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之外添加打印“This is wrong”行。它给了我一个缩进错误?
答案 0 :(得分:5)
问题是你在arg[0]
上调用int。现在,arg
是从初始循环中遗留下来的,当你遍历sys.argv
中的所有参数时 - 它是该循环中的最后一个元素。因此,当您使用[0]
对其进行切片时,您实际上是从最后一个参数获取第一个字符,而不是 - 如您所愿 - 第一个参数。
您的修复只是在那里使用sys.argv[1]
。
答案 1 :(得分:3)
您正在重复使用循环变量arg
,因此您正在访问sys.argv[1]
的第一个字符,而不是整个字符串。尝试:
try:
argNumber = int(sys.argv[1])
except ValueError:
argNumber = 0
我在你的代码片段中没有看到“这是错误的”这一行,所以我无法对此发表评论。
最后,在每行前面放置4个空格是现在唯一的方法。如果他们支持某种代码防护风格(如GitHub)会很好,但他们不支持。 : - (
答案 2 :(得分:2)
循环运行后,arg包含传递的最后一个参数的值,为字符串。
在您的具体情况下,arg = '92'
。所以,当您执行arg[0]
时,您会获得'9'
而arg[1]
会为您提供'2'
如果您需要第一个参数,请使用sys.argv[1]
。
答案 3 :(得分:1)
那是因为arg[0]
是分配给arg
的字符串的第一个元素。在您的代码中,这是最后一个命令行参数。
使用int(arg)
解决问题。
答案 4 :(得分:1)
此循环后
for arg in sys.argv:
print arg
arg
是最后一个命令行参数。这是一个字符串,所以使用例如arg[0]
获取该字符串中的第一个字符。