2012-03-14 3 views
0

파이썬에서 ISBN 입력의 체크 숫자를 계산하려고합니다. 지금까지 나는Python ISBN 프로그램

def ISBN(): 
     numlist = [] 
     request = raw_input("Please enter the 10 digit number: ") 
     if len(request) == 10: 
      **numlist == request 
      print numlist** 
     if len(request) != 10: 
      print "Invalid Input" 
      ISBN() 

    ISBN() 

굵은 비트가 메신저 데 문제가, 내가 목록 (numlist)에 개별 번호로 10 자리 입력을 분할 한 후 (11)에 의해 구분 된 각각의 숫자를 곱 것 캔트된다 ...이 그 다음으로 10을 곱한 다음 9 등을 더합니다. 프로그램의 다음 부분에 대해이 새 곱셈 된 숫자를 함께 목록에 추가해야합니다. 그런 다음 mod (%) 함수를 사용하여 나머지는 11에서 숫자를 뺍니다, ISBN을 계산하는 방법에 대한 내 코딩이나 잘못된 진술에 대한 도움을 주시면 대단히 감사하겠습니다. 감사합니다.

답변

1

이 코드는 당신의 방법에 당신을 얻을해야합니다 : 당신이 그들을 반복하는 경우, 각 요소는 단일 문자열로 반환되도록

listofnums = [int(digit) for digit in '1234567890'] 
multipliers = reversed(range(2,12)) 
multipliednums = [a*b for a,b in zip(listofnums, multipliers)] 

문자열이 반복 가능한입니다.

int은 (유효한) 문자열에서 int를 작성합니다.

표기법 [a*b for a,b in zip(listofnums, multipliers)]은 목록 이해로, 시퀀스를 새 목록에 매핑하기위한 편리한 구문입니다.

나머지는 repl에서 탐색하십시오. reversed은 생성기를 반환합니다. "in"이 무엇인지보고 싶다면 tuple 또는 list을 사용하여 평가해야합니다. 명백한 이유로 무한한 발전기에 위험 할 수 있습니다.

+0

완벽! 대단히 감사합니다. 이것은 내가 볼 수있는 것에서 완벽하게 작동합니다. –

+0

사실, 지금 내가 입력 한 "multipliednums"는 항상 [11, 20, 27, 32, 35, 36, 35, 32, 27, 0]으로 돌아와서 새로운 코딩과 관련된 문제를 발견했습니다. –

+1

이 문제를 해결했지만 고맙습니다. –

0

나는 list()이 (가) 당신이 찾고있는 것입니다. 여기

numlist=list(request)

내가 코드를 작성하는 것이 방법이다. 코드를 올바르게 해석하기를 바랍니다.

def ISBN(): 
    request = raw_input("Please enter the 10 digit number: ") 
    if len(request) == 10: 
     numlist = list(request) 
     print numlist 
    else: 
     print "Invalid Input" 

ISBN() 
+0

해당 목록에만 문자열이 있습니다. 지도가 필요하다면 (int, numlist) – gcbirzan

-1
import itertools 

if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0: 
    print "no good" 
+0

이것은 답변이 아닙니다. 특히 특정 질문에 대답하지 않으며 적어도 하나 이상의 오류가 있습니다. – Marcin

+0

어떤 오류가 있습니까? – gcbirzan

+0

나는 그걸 알아 내려고한다. – Marcin