2017-03-29 2 views
0

그래서 1000 자리 숫자에서 13 개의 인접 숫자를 찾는 프로그램을 만들려고합니다. 가장 큰 제품을 가지고 있습니다. 이것은 오일러 프로젝트에 대한 문제와 나는 오류 메시지에 실행 계속 :목록의 항목을 파싱하고 제품을 찾을 때 오류가 발생했습니다. 오류 : 'list'유형의 non-int로 시퀀스를 곱할 수 없습니다.

import operator 
from functools import reduce 
allDigits = 73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158 

d = [int(d) for d in str(allDigits)] 

digits = d[:13] 

products = [] 

del d[:13] 


while len(d) > 0: 

    tempProd = 1 

    for i in digits: 

     tempProd *= i 

    products.append(tempProd) 

    nextDigit = d[:1] 

    del digits[:1] 
    digits.append(nextDigit) 

    del d[:1] 

products.sort() 

print(products) 

내가으로 실행하고 :이 게시물에 대한 1000 자리 숫자를 shortend하지만 여기

TypeError: can't multiply sequence by non-int of type 'list' 

코드입니다 라인의 문제는 말한다 여기서

tempProd *= i 

이 정말 목록을해야 값도 나를 혼란, 난 creati로 aswell NumPy와 제품 기능을 사용하여 시도 같은 문제로 실행 다음과 같습니다 내 자신의 기능을 NG :

어떤 도움을 많이하면 문제 메신저 여기에 해결하기 위해 노력에 대한 자세한 정보를 찾을 수 있습니다 apreciated 될
def prod(x): 
    return reduce(operator.mul, int(x), 1) 

: https://projecteuler.net/problem=8

+1

을하는 것입니다? *해야한다*? 왜 당신은 아직 모르는거야? 이것은 가장 기본적인 디버깅 도구 중 하나 인 간단한 print 문입니다. 그들을 인쇄하고 가지고있는 것을 보아라. 런타임 시스템은 당신이 물을 수있는 최고 권위입니다! :-) – Prune

답변

4

문제를 이러한 두 개의 라인은 :

nextDigit = d[:1] # returns a list 
digits.append(nextDigit) 

개발 [: 1 다음에 숫자리스트에 추가하는리스트를 반환하므로는리스트 값에 의해 I 승산되는 for 루프에서 읽을 때. 이 문제를 해결하는

한 가지 방법은 "값도이 목록해야한다"단순히

nextDigit = d[:1][0]