来自命令行的两个数字的总和

时间:2009-08-31 08:03:31

标签: python

我知道这是一个非常基本的程序,但我收到的列表错误超出范围。这是程序将两个数字作为命令行参数(在调用脚本时)和显示总和(使用python):

import sys
a= sys.argv[1]
b= sys.argv[2]
sum=str( a+b)
print " sum is", sum    

7 个答案:

答案 0 :(得分:5)

你应该这样做:

import sys
a, b = sys.argv[1:2]
summ = int(a) + int(b)
print "sum is", summ

打印整数时不需要str()。但是如果要将a和b添加为整数,则应使用int()。

答案 1 :(得分: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]

确保从命令行实际传递给程序。

答案 2 :(得分: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。

第二种方法可能更加pythonic,但第一种方法在这种情况下要快一点。

>>>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 :(得分:0)

su = int(a) + int(b)
print("sum is %d" % su)

你应该小心你的变量命名。 sum影响内置函数,这样做不是一个好习惯(也就是说,不要将变量命名为内置函数或任何全局定义的名称)。

答案 4 :(得分:0)

如果您的错误“列表索引超出范围”,则问题是您的列表没有足够的项目。哪个清单?您使用的唯一列表是 sys.argv ,因此要填充它,您需要在命令行上传递更多项目。

或者,使用len(sys.argv)检查参数列表的长度,并以交互方式提示(例如,使用raw_input())获取值,如果它们不在sys.argv中。

答案 5 :(得分:0)

如果您希望将数字相加为浮点数,请使用“float”而不是“int”,如下面的代码段所示。

import sys
try:
   a, b = sys.argv[1:3]
   print "sum is ", float(a) + float(b)
except ValueError:
   print "please give me two numbers to sum"

请注意浮点数与实数不同,这样您就可以获得看似“奇怪”​​的结果,网上有大量文档。

答案 6 :(得分:0)

感谢每一个人。我得到了答案

for i in range(1,51):     如果我%5 == 0:         打印我,“\ n”     其他:         打印我,