2013-06-28 4 views
0
x = False 
divisors = [2,3,4,5,6,7,8,9,10] 
for i in range (10,10000,10): 
    if [x for x in divisors if i % x == 0]: 
     print(i) 
     break 

이 프로그램이 10을 인쇄하는 이유에 대한 몇 가지 지침을 얻을 수 있습니까? 그것은 인쇄해야합니다 .. 2520파이썬 목록 이해 (오일러 프로젝트 5)

나는 지금이 문제에 너무 많은 시간을 보냈다. 나는 목록의 이해력, 작동 방식, 리턴 값을 정말로 이해하지 못한다고 생각한다. 분열의는 float를 얻을 경우 문장이 거짓 얻을 것이다 경우

내가 .. 기대했다

내가 캐스팅을 사용해야합니까?

그 범위 (10,10000,10)에서 10, 20, 30, 40, ..., 10000의 목록을 제공합니까?

답변

4

다음로 변경합니다 :

divisors = [2,3,4,5,6,7,8,9,10] 
for i in range (10,10000,10): 
    if all(i % x == 0 for x in divisors): 
     print(i) 
     break 

(10)의 모든 다중 5, 2로 나누어 때문에 현재 버전의 지능형리스트는 항상 거기에 지난 3 개 값에 포함, 10 비어 있지 않은 목록은 Boolean 컨텍스트에서 true로 평가되므로 첫 번째 반복에서 if 블록을 입력합니다.

내장 함수 all()은 반복 가능을 받아들이고 모든 요소가 참일 경우에만 (또는 부울 상황에서 true로 평가 될 경우) True을 반환합니다. 따라서 i모두 값으로 균등하게 나눌 수 있는지를 결정할 때 적합합니다. divisors.

+0

정말 고마워요. 2520과 모든 것을 인쇄합니다. 예, if 논리에 논리를 적용하는 법을 알지 못했습니다. 파이썬에 관한 최신 책을 꼭 읽어야합니다. – DrOnline

3

그것을 분해합시다. 시작하려면

x = False 

코드를 어지럽게 만들지 마십시오. 그것을 사용하지 마십시오. 다음은 :

for i in range (10,10000,10): 

프로젝트를 보지 않고 괜찮, 당신이 원하는 있다면, 즉 9990.에서 끝날 것 때문에 범위는(), 모든 값 적은보다 정지 값을 산출 알고 있어야 - 단지 그것을 알고 있어야합니다. 마지막으로

:

로 읽어
if [x for x in divisors if i % x == 0]: 

후, "난에 균등하게 분할하는 divisors의 모든 번호의 목록을 작성" "나는 방금 만든 목록이 비어, 다음이 아닌 경우 ..." . 따라서 i == 10 일 때 해당 목록은 [2, 5, 10]으로 계산됩니다. 이는 빈 목록이 아니므로 Trueif 블록 실행으로 평가됩니다.

+0

포인터 주셔서 감사합니다. 프로그래밍에는 수 백만 가지가 있으며,이 시점에서 모두 나에게 공백입니다. 그래서 배울 수있는 모든 사람은 거대한 도움이됩니다. 그것을 많이 고맙게 생각합니다. 이봐, 최대 한계가없는 for 루프는 어떻게 만들 수 있습니까? 10000을 최대 정수 값을위한 일부 함수로 바꿉니다. – DrOnline

+1

['itertools.count()'] (http://docs.python.org/2/library/itertools.html#itertools.count) , 'for count (10, 10)'의 경우 '10'에서 시작하여 '10'단계를 무한히 실행하는 루프를 제공합니다 (또는 중단, 반환 또는 예외가 발생할 때까지). –

+0

빙고. 내 눈이 좋아 보이는 데, 컨버전스 시간에 아무런 영향을 미치지 않는 것 같습니다. – DrOnline