从命令行获取两个数字的和
我知道这个程序很简单,但我遇到了一个“列表超出范围”的错误。下面是一个程序,它可以接收两个数字作为命令行参数(在运行脚本时输入),然后显示它们的和(使用Python编写):
import sys
a= sys.argv[1]
b= sys.argv[2]
sum=str( a+b)
print " sum is", sum
7 个回答
3
假设你的输入是整数:
import sys
summ = sum(map(int,sys.argv[1:])
print "sum is ", summ
或者
import sys
summ = sum(int(i) for i in sys.argv[1:])
print "sum is ", summ
如果不是,那就把int改成float。
第二种方法可能更符合Python的风格,但在这个情况下,第一种方法稍微快一点。
>>>import timeit
>>>t1 = timeit.Timer("sum(map(int,['3','5','7','9']))")
>>>t2 = timeit.Timer("sum(int(i) for i in ['3','5','7','9'])")
>>>print t1.timeit()
3.0187220573425293
>>>print t2.timeit()
3.4699549674987793
3
错误信息 list index out of range
的意思是你在尝试访问一个列表中不存在的项目,也就是超出了列表的范围。
举个例子:
>>> mylist = ['hello', 'world']
>>> print mylist[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
在你的情况下,这个错误可能是因为 sys.argv[1]
或者 sys.argv[2]
出现了问题。
确保你在命令行中实际传递了一些东西给程序。
5
你应该这样做:
import sys
a, b = sys.argv[1:2]
summ = int(a) + int(b)
print "sum is", summ
在打印一个整数的时候,其实不需要用到str()这个函数。不过,如果你想把a和b当作整数来相加,就应该使用int()这个函数。