質問
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 の計算方法に関する誤った記述をいただければ幸いです。ありがとう。
解決
このコードを使用すると、次の手順に進むことができます。
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
ジェネレーターを返します。何が「入っている」のかを確認したい場合は、次を使用する必要があります tuple
または list
その評価を強制します。これは、明らかな理由から、無限ジェネレーターにとっては危険である可能性があります。
他のヒント
私は信じている 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()
import itertools
if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
print "no good"
.