2013-02-20 3 views
0

은 그래서 = 0, 및 지점을 계산, numbersList라는 목록 변수 번호 = 20를 만든 = 나는이 시도 (20)로 이동 목록의 수를 계산하려면 0목록의 계수 요소? 좋아

numbersList = range(1, 11) 
number = 20 
count = 0 
spot = 0. 

:

while spot <= len(numbersList): 
    if(number % int(numbersList[spot]) == 0): 
     count = count + 1 
    spot = spot + 1 
print count 

그러나 목록 색인이 범위를 벗어 났음을 계속 말합니다. 도와주세요!

+0

'when' 키워드가 나에게 새롭다. – Hyperboreus

+0

언제'할까요? – Tim

+0

죄송합니다, 동안 ... @Tim – user2006236

답변

1

플로트로 목록에 색인을 생성 할 수 없으며 spot = 0. float입니다. 그 가짜 기간을 제거하십시오!

+0

이것은 질문자가 가지고있는'IndexError'보다는'TypeError'를 제공합니다. – Tim

+0

좋은 관찰이지만 이것이 유일한 문제라고 생각하지 않습니다. 이 날 TypeError 및 IndexError 않습니다. 적어도 파이썬 3.3에서는. – Octipi

+0

그래, 그 질문을 게시하여 도입 된 오류라고 생각합니다. 블렌더가 실수를 지적했다. fencepost 오류가 발생했다. :) –

2

루프가 while 루프의 마지막 반복에서 너무 많이 벗어납니다. <<=을 변경하고 그것을 작동합니다 :

while spot < len(numbersList): 

을 또는 단지 for 루프 사용

for i in numbersList: 
    if number % i == 0: 
     count += 1 
+0

감사합니다. – user2006236

1

첫 번째 줄은 구문 에러

>>> when spot <= len(numbersList): 
    File "<stdin>", line 1 
    when spot <= len(numbersList): 

난 당신이 사용하는 말은 의심이입니다 while

하지만 쉽게 루프 이것은 또한

count = sum(number % spot == 0 for spot in numbersList) 
+0

수정 된 생성기 표현과 같은 간결한 코드에 대해 Python을 정말 좋아합니다. 좋은 예! – Arcturus

0

내가 고전 지도-감소 선호 합계 발전기 식을 전달하여보다 간단하게 쓸 수

for spot in numbersList: 
    if number % spot == 0: 
     count += 1 
print count 

위해를 사용하는

reduce(lambda x,y: x+y, [ number%spot for spot in numbersList ]) 
+0

내가 본 것처럼, 그것은 요청 된 카운트와 다른 나머지의 합을 계산한다; 이것은 "number % spot"을 "int (number % spot == 0)"으로 대체하여 복구 할 수 있습니다. – guidot