2009-08-31 4 views
2

아주 기본적인 프로그램이라는 것을 알고 있지만 범위를 벗어난 목록 오류가 발생합니다.명령 줄에서 오는 두 숫자의 합

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

도 전에 : 인쇄 전, "\ n"다른 if len (sys.argv)> = 3 – kurczak

+2

DONT는 변수 이름으로'sum'을 사용합니다. 'sum'은 파이썬 함수입니다. –

+1

kurczak : 예외를 잡으십시오. 어쨌든, 여기서 범위를 벗어나는 유일한 목록은 프로그램에 두 개의 인수를 전달하지 않는다는 것입니다. – u0b34a0f6ae

답변

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

그리고 당신은 당신의 변수 명명에주의해야한다 : 여기에 (스크립트를 호출하는 동안) 및 디스플레이 합 (파이썬을 사용하여) 명령 줄 인수로 두 숫자를 취할 수있는 프로그램입니다. sum은 그림자가 내장되어 있으므로 그림자를 내장 함수 나 전역 적으로 정의 된 이름으로 지정하지 않는 것이 좋습니다.

5

이 작업을 수행해야한다 : 정수를 인쇄 할 때 STR 필요()가 없다

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

. 그러나 a와 b를 정수로 추가하려면 int()를 사용해야합니다.

+0

조각 인덱싱이 잘못되었습니다. 슬라이싱 규칙 때문에 a, b = sys.argv [1 : 3] – David

+0

'a, b = sys.argv [1 : 2] '가 ValueError가됩니다. – SilentGhost

+0

여기서 중요한 문제는 문자열 대 int가 아니라는 것입니다. OP의 원래 오류 ("범위를 벗어난 목록")는 프로그램에 인수를 전달하지 않을 때 발생합니다. – codeape

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] 중 하나에서 비롯됩니다.

실제로 명령 줄에서 프로그램에 뭔가를 전달했는지 확인하십시오. 당신의 오류가"범위를 벗어리스트 인덱스가"이면

+0

22 초 만에 나를 이길. 그래,이게 진짜 문제라고 생각해. –

0

는 다음 문제는 목록 충분히 항목이 없다는 것입니다. 어떤 목록? 사용하는 유일한 목록은 sys.argv입니다. 따라서 그것을 채우기 위해 명령 줄에 더 많은 항목을 전달해야합니다.

또는 len(sys.argv)으로 인수 목록의 길이를 확인하고 sys.argv이 아닌 경우 값을 가져 오기 위해 대화식으로 묻습니다 (예 : raw_input() 사용).

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는 떠 있습니다.

두 번째 방법은 아마도 더 파이썬 적이지만, 첫 번째 방법은이 경우 조금 더 빠릅니다.

>>>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 
+0

왜 map을 사용하는 것이 더 짧을 때''sum (sys.argv [1 :])에서 arg에 대한 int (arg)를 써라. ' – u0b34a0f6ae

+1

@ kaiser.se : David의 답에서 비효율적 인 것은'sum (i for i) (some_sequence)'대신에'some_sequence' ('some_sequence')'... 더 짧다면'sum (map (int, sys.argv [1 :]))'' –

+0

@john 네 말이 맞다. 바보. 스 니펫을 업데이트했습니다. – David

0

숫자를 부동 소수점 숫자로 합치려면 다음 스 니펫에서와 같이 "int"대신 "float"을 사용하십시오.

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

모두에게 감사드립니다.나는 범위 (1,51)의 난에 대한 대답

을 가지고 : 내가 % 5 == 0 경우 : 점점 인수가 확인 인쇄 전,