2014-09-03 7 views
-3

다음 코드에서 map() 함수로 오류가 발생하는 이유는 무엇입니까? x 목록에서 음수를 변환 할 수없는 이유는 무엇입니까? 출력은 "1 -> 2 -> 3"과 같아야합니다. -999을 입력 할 때마다 목록이 종료됩니다.Python map() function

Traceback (most recent call last): 
    File "c2.py", line 3, in <module> 
    x=map(int,x) 
ValueError: invalid literal for int() with base 10: '-' 

코드 : : 나는 같은 오류를 얻고있다

while(1): 
    x=list(raw_input("Input a number\n(type -999 to end);")) 
    x=map(int,x) 
    if x<0: 
     break 
    pass 
    print x 
del x[len(x)] 
for i in range(0,(len(x))): 
    print "%d-->" %(x[i]), 
+0

'INT (x)의 '참으로 변환합니다'x'있어 정수로,'map'은 필요 없습니다; 'x'가리스트라면 그렇지 않습니다. 그래서 두번째 라인에서'list' 콜을 제거해야합니다. – Kevin

+1

입력에 어떤 형식이 필요합니까? ''1 2 3 4 -999 ''를 한 줄에 입력하거나 별도의 입력으로 사용할 수 있습니까? 'list ("- 999") == [ '-', '9', '9', '9']'에주의하십시오. – jonrsharpe

+0

'raw_input'은 문자열을 반환하기 때문에'list (raw_input (...))'는 그 문자열을 원래 문자열의 문자를 포함하는리스트로 나눕니다. – chepner

답변

0

지도 관련이없는 다른 버그를 해결하지

x = map(int,raw_input().split()) 
+0

자, 이제 x는 OP의 'ValueError'를 제거하는 정수리스트 일 것입니다. 그러나'x <0'은 항상'False'로 평가되기 때문에 무한 루프가됩니다. 또는 그는'TypeError : unorderable types : list() Kevin

+0

그래, 문제의 일부분 만 해결합니다. Lazy me = D – Inox

0

시도의 문제는 지도 목록을 반환합니다.

IDLE에서 체크 아웃 :

>>> map(int, ["123", "456", 7.3]) 
[123, 456, 7] 
>>> 

그래서 x<0는 이해되지 않는다, 당신은 최소 입력으로 목록을 소요 (x)를 < 0 뭔가 뭔가를 원하는 것입니다.

각 항목을 개별적으로 분리하여 처리해야하는 경우입니다. 입력 행을 가져 와서 공백을 검사하거나 (아래에 설명 된대로 split() 참조) 각 정수를 구문 분석합니다.

분할 및 맵핑을 올바르게 사용한 경우에도 자동으로 동일한 행의 -999와 함께 처리됩니다. 그리고 파싱되지 않는 것은 실제로 무엇이 잘못되었는지를 알 수있는 충분한 피드백을주지 못합니다.

사용자 입력을 구문 분석하는 것은 종종 낮은 수준 및 문자 지향적이어야하며 잘못된 입력을 진단 할 수 없습니다. 때때로 인생은 지루합니다.

(또한, 왜 다음 목록 비어를 인쇄하려고?)

1

당신을 감사합니다 ... 그것을 :)

x=[] 
    while(1): 
     s=raw_input("Input a number\n(type -999 to end);") 
     s=int(s) 
     x.append(s) 
     if s<0: 
      break 
     pass 
    print "\n%d" %(x[0]), 
    for i in range(1,(len(x))): 
     print "-->%d" %(x[i]), 
    print "\n\nNumber of items = %d" %(len(x)-1) 
+0

앞으로는 대답을하지 마십시오. 바처럼 뭔가를 원래 게시물에 편집하십시오. 그렇지 않으면 여러분의 질문에 계속 답할 것입니다. –

+0

@JonJayObermark http://meta.stackexchange.com/a/216722/248731 참조 - 답변은 답변이어야하며 다른 사용자가 OP에 대해 더 개선 할 수 있다고 생각하면 시도해보십시오. – jonrsharpe

+0

죄송합니다. 그건 기괴한 예절이지만, 그것이 지역 규칙이라고 생각합니다. (나는 항상 여기에서 한 제안을보고 있으며, 개인적으로 감사한다.) 이것이 답이라면, 적어도 답은 편집 할 필요가있다. 실제 질문, 또는 제목. –