2012-11-14 3 views
1

입력 :전체 색인을 얻지 못하는 이유는 무엇입니까? (파이썬 목록)

def part3 (x): 
    for i in range (len(x)): 
     while i <= len(x): 
      print (x[i]) 
      return x[i+1] 


x=[5,2,3] 
x.sort() 
print(x[0],x[1], x[2]) 
print(part3(x)) 

출력 :

2 3 5 
2 
3 

내 질문 : 왜 3 후 5 얻지 않는다?!?! 함수가 x [2]에 가면 안됩니까?!?!!

+0

: 당신은 당신이 열거를 시도 할 수 있습니다 인덱스를 알 필요가 있다면

def part3 (x): for val in x: print val return x[-1] 

을 while 루프에서'i'를 증가시키지 않습니다. – inspectorG4dget

+0

이 코드는 정말 이상하게 읽습니다. 왜 당신은 값을 반복하지만 그 값을 인덱스로 사용합니까? –

+0

죄송합니다. 해결했습니다. – user1730110

답변

2

return 문이 있기 때문에 루프의 첫 번째 반복에서 함수가 반환됩니다. 그래서 당신은 할 때

print(part3(x)) 

먼저 print(x[i]) (여기서 i = 0이 첫 번째 반복을하기 때문에) 당신의 while -loop 내에서 실행 된 후 기능 (x[i+1])의 반환 값은 위의 원본을 인쇄 문에 의해 인쇄 . 당신이 x.sort()를 호출 한 후

, x 그렇게 x[0]2x[0+1] = x[1] 당신의 출력을 설명 3,이다, [2, 3, 4] 될 것입니다.

이 코드를 사용하여 달성하고자하는 것이 확실치 않으므로 수정 방법에 대한 제안을하기가 어렵습니다. 당신은 당신이 그것을 waayy 더 복잡 당신이 단순히 필요하지 마십시오

for i in x: 
    print(i) 

통지를 할 수있는,이어야보다 만들고있어 x의 내용을 인쇄하고 싶었다면 여기에 return 문이있어서 여분이 필요하지 않습니다. print; 즉

print(part3(x)) 

당신은 함수 자체에 인쇄를하고 있기 때문에 단지

part3(x) 

이 될 것입니다.

1

루프가 잘못되었습니다. 요점은 x의 각 요소를 인쇄하는 것이라고 가정합니다.

당신이 원하는 :

def part3(x): 
    for element in x: 
     print(element) 

지금주의 :

  1. 당신은 내부 while 루프를 필요로하지 않는 for 루프.
  2. 루프에서 빠져 나가서 함수를 종료하기 때문에 아무 것도 반환하지 않으려합니다.
  3. 파이썬에서는 인덱스 변수를 사용하지 않고 배열을 직접 반복 할 수 있습니다.
+0

WOW I feel dumb . 감사:) – user1730110

0

내부 인쇄의 결과로 '2'가 표시되고 'return x [i + 1]'결과로 '3'이 표시되고 '5'bcoz가 표시되지 않습니다. while 루프와 함수.

당신이 필요로하는 모든이 모든 값을 인쇄하고 당신이 시도 할 수있는 마지막 일 반환하는 경우 :

def part3 (x): 
    for i, val in enumerate(x): 
     print i, val 
    return x[-1] 
관련 문제