2016-12-19 1 views
1

내 코드를 기능을 최소화하는 것은 정말 간단하다 : 그것은 나에게 정확한 결과를 제공파이썬 : 루프를 통해

import numpy 

def f(x): 
    return x**2 +1 

f_min=10 

for x in numpy.arange(-1,10,0.1): 
    if f(x)<f_min : 
     f_min=f(x) 
     x_min=x 
    else: 
     print (x_min) 

(X -> 0)뿐만 아니라 한 번 만 번 많이. 왜 그런데 어떻게 그렇게 할 수 없습니까?

+0

네 else 절은 모든 반복마다 첫 번째 반복 이후 루프에서 실행되기 때문에 yes입니다. 그것을 들여 쓰지 않음. @ JimFasarakis-Hilliard가 말한대로 –

+1

이 말했다. for 루프에서 인쇄를 중지하십시오. 최소 반복 횟수를 업데이트하지 않을 때마다 최소값이 인쇄됩니다. 'else : print (x_min)' – piRSquared

+1

@ JimFasarakis-Hilliard를 제거하거나'else'를 제거하고'print'를 0 들여 쓰기 레벨에 놓으십시오. 여기에'for' 루프에 대한 모호한'else' 기능을 사용할 필요가 없습니다 : –

답변

1

당신이 말했기 때문에.

문 읽기 귀하의 경우 :-) :

if I have a new minimum, record the value and position; 
otherwise, print the existing minimum. 

때마다 당신은 새로운 최소 찾을 수없는, 당신은 인쇄 할 수 있습니다. 이 함수는 범위에서 초기 단계부터 최소값을 가지므로 많은 양의 출력을 얻습니다.

전역 최소 인쇄를 한 번만 수행하려면 한 번만 수행하십시오. 루프 외부로 이동하십시오. 이 문제를 해결하려면

for x in numpy.arange(-1,10,0.1): 
    if f(x)<f_min : 
     f_min=f(x) 
     x_min=x 

print (x_min) 
1

, for 루프에서 인쇄 문을 이동 :

import numpy 

def f(x): 
    return x**2 +1 

f_min=10 

for x in numpy.arange(-1,10,0.1): 
    if f(x)<f_min : 
     f_min=f(x) 
     x_min=x 

print (x_min) 

을 이렇게 왜? 음, 전에 for 루프에서 print 문을 사용할 때마다 for 루프가 끝날 때마다 if 문이 true가 아닌 경우 인쇄 된 것이므로 인쇄 된 내용이 많습니다. 이제는 for 루프 밖으로 이동하면 한 번만 인쇄 할 수 있으며 프로그램은 예상대로 작동합니다.

+0

감사합니다! 불행히도 당신이 비록 두 사람 모두 똑같다고 말했을지라도 하나의 답을 정확하게 표시 할 수 있습니다. – user7248647

+0

문제는 아니지만, 우리는 동시에 대답했습니다. – heather

관련 문제