сумма двух чисел, поступающих из командной строки - PullRequest
1 голос
/ 31 августа 2009

Я знаю, что это очень простая программа, но я получаю ошибку списка вне диапазона. Вот программа для получения двух чисел в качестве аргументов командной строки (при вызове скрипта) и отображения суммы (с использованием python):

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

Ответы [ 7 ]

5 голосов
/ 31 августа 2009

Вы должны сделать это:

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

Нет необходимости в str () при печати целого числа. Но вы должны использовать int (), если хотите добавить a и b как целые числа.

3 голосов
/ 31 августа 2009

Предполагая, что ваши входные данные являются целыми числами:

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.

Второй метод, вероятно, более питонический, но первый в этом случае немного быстрее.

>>>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 голосов
/ 31 августа 2009

Ошибка 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].

Убедитесь, что вы действительно что-то передаете программе из командной строки.

0 голосов
/ 19 ноября 2009

Спасибо всем. Я получил ответ

для i в диапазоне (1,51): если я% 5 == 0: печатать я, "\ n" еще: print i,

0 голосов
/ 31 августа 2009

Если вы хотите суммировать числа как числа с плавающей запятой, используйте «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"

Остерегайтесь того, что числа с плавающей запятой отличаются от действительных чисел, так что вы можете получить, казалось бы, "странные" результаты, о которых имеется множество документации в Интернете.

0 голосов
/ 31 августа 2009

Если ваша ошибка "индекс списка вне диапазона" , то проблема в том, что в вашем списке недостаточно элементов. Какой список? Единственный используемый вами список - это sys.argv, поэтому для его заполнения необходимо передать больше элементов в командной строке.

В качестве альтернативы, проверьте длину списка аргументов с помощью len(sys.argv) и в интерактивном режиме (например, с помощью raw_input()) запросите значения, если они не находятся в sys.argv.

0 голосов
/ 31 августа 2009
su = int(a) + int(b)
print("sum is %d" % su)

И вы должны быть осторожны с именами переменных. sum скрывает встроенное, это не очень хорошая практика (то есть не называйте переменные как встроенные функции или любые глобально определенные имена).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...