从命令行获取两个数字的和

1 投票
7 回答
26901 浏览
提问于 2025-04-15 13:59

我知道这个程序很简单,但我遇到了一个“列表超出范围”的错误。下面是一个程序,它可以接收两个数字作为命令行参数(在运行脚本时输入),然后显示它们的和(使用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()这个函数。

撰写回答