2012-03-14 7 views
0

私はPython上のISBN入力のチェックデジットを計算しようとしています。イムは、問題を抱えてどこPython ISBN program

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

このリストには文字列が含まれます。何かがあれば、彼はmap(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

これは答えではありません。特に、特定の質問には答えず、少なくとも1つのエラーが含まれています。 – Marcin

+0

どのようなエラーが含まれていますか? – gcbirzan

+0

私はあなたにそれを理解するためにそれを残す。 – Marcin