0

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()

太字のビットは問題が発生している場所です。10桁の入力をリスト内の個々の数値(numlist)に分割してから、分離された個々の数値に11を掛け、次に10を掛け、次に9を掛けることができないようです...プログラムの次の部分では、これらの新しい乗算された数値をリストに追加する必要があります。次に、mod(%)関数を使用して余りを取得し、11から数値を減算します。またはISBNの計算方法に関する誤った記述をいただければ幸いです。ありがとうございました。

4

3 に答える 3

1

このコードはあなたをあなたの道に連れて行くはずです:

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

文字列は反復可能であるため、文字列を反復すると、各要素は1文字の文字列として返されます。

int(有効な)文字列からintを構築します。

表記[a*b for a,b in zip(listofnums, multipliers)]はリスト内包表記であり、シーケンスを新しいリストにマッピングするための便利な構文です。

残りについては、あなたの担当者でそれらを探索してください。ジェネレーターを返すことに注意してくださいreversed。ジェネレーターの「中に」あるものを確認したい場合は、その評価を使用するtuplelist、強制する必要があります。これは、明らかな理由から、無限のジェネレーターにとって危険な場合があります。

于 2012-03-14T17:55:18.463 に答える
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()
于 2012-03-14T17:52:08.463 に答える
-1
import itertools

if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
    print "no good"
于 2012-03-14T17:59:18.713 に答える