2013-04-21 155 views
0

我似乎無法確定python的模數函數是否正常工作,我嘗試了各種數字,似乎無法得到正確的分割。Modulo沒有正確處理

ISBN號碼

print """ 
Welcome to the ISBN checker, 

To use this program you will enter a 10 digit number to be converted to an International Standard Book Number 

""" 

ISBNNo = raw_input("please enter a ten digit number of choice") 


counter = 11 #Set the counter to 11 as we multiply by 11 first 
acc = 0 #Set the accumulator to 0 

開始循環,由decrimenting計數器 乘以每個字符串中的數字,我們需要把數字作爲一個字符串通過獲得每個位置

for i in ISBNNo: 
    print str(i) + " * " + str(counter) 
    acc = acc + (int(i) * counter) #cast value a integer and multiply by counter 
    counter -= 1 #decrement counter 
print "Total = " + str(acc)     

國防部11(除以餘數

acc = acc % 11 
print "Mod by 11 = " + str(acc) 

把它從11

acc = 11 - acc 
print "subtract the remainder from 9 = " + str(acc) 

用繩子串連

ISBNNo = ISBNNo + str(acc) 
print "ISBN Number including check digit is: " + ISBNNo 
+2

可以比你更具體的比你沒有得到「正確的劃分」嗎?結果是什麼?你期待什麼? – vossad01 2013-04-21 17:18:19

+0

我期待它除以11,然後減去餘數,例如11。 89將離開我們8和最終數字10從11 – userwill 2013-04-21 17:25:32

回答

0

您的代碼大多是正確的,除了一些問題:

1)你試圖計算校驗和(最後一位數字),如果ISBN 。這意味着,你應該只需要9位考慮:

ISBNNo = raw_input("please enter a ten digit number of choice") 
assert len(ISBNNo) == 10, "ten digit ISBN number is expected" 
# ... 
for i in ISBNNo[0:9]: # iterate only over positions 0..9 
    # ... 

2)也應該有一個特殊的情況下,在這裏:

ISBNNo = ISBNNo + str(acc) 
print "ISBN Number including check digit is: " + ISBNNo 

你做模11,所以ACC可以等於至10 ISBN任務即「X」應作爲這種情況下的最後一個「數字」,它可以被寫成:

ISBNNo = ISBNNo + (str(acc) if acc < 10 else 'X') 

這裏是固定的代碼,與實施例number from Wikipediahttp://ideone.com/DaWl6y


在迴應評論

>>> 255 // 11    # Floor division (rounded down) 
23 
>>> 255 - (255//11)*11  # Remainder (manually) 
2 
>>> 255 % 11    # Remainder (operator %) 
2 

(注:我使用的是//它代表地板師。在Python 2中,您可以簡單地使用/,因爲您將整數分開。在Python 3中,/總是正確的劃分,並且//是地板劃分。)

+0

被帶走時你有什麼理由教他斷言?即使對於虛擬代碼,使用斷言作爲檢查事物的手段仍然不好。 – CppLearner 2013-04-21 18:37:28

+0

斷言很簡單。我認爲這裏沒問題;簡短的驗證總比沒有好。 – Kos 2013-04-22 06:02:45

+0

我重新運行程序,我剛纔確保它使用整個輸入,因爲它停在3,因爲它沒有格式化爲一個字符串,但國防部仍然不工作,這是奇怪的,因爲它加起來罰款鱈魚http: //ideone.com/SfRNeq http://s21.postimg.org/fwfzi9x9j/printscreen.png – userwill 2013-04-28 08:39:34