数字1没有定义? (ISBN计算器 - Python)

时间:2014-04-29 08:52:13

标签: python python-3.x calculator isbn

mainmenu = input("Welcome to my ISBN calculator, please select an option\n\
1. Load ISBN Calculator\n\
2. Exit Program\n\
") 


(mainmenu) 

if mainmenu == ("2"):
    print ("The ISBN Calculator will now close, thank you for using!")
    time.sleep(1.5) 
    exit()


elif mainmenu == ("1"):
    ISBN = input(" Please enter the 10 digit number exactly\n\
") 


    Digit1 = int(ISBN[0])*11
    Digit2 = int(ISBN[1])*10
    Digit3 = int(ISBN[2])*9
    Digit4 = int(ISBN[3])*8
    Digit5 = int(ISBN[4])*7
    Digit6 = int(ISBN[5])*6
    Digit7 = int(ISBN[6])*5
    Digit8 = int(ISBN[7])*4
    Digit9 = int(ISBN[8])*3
    Digit10 = int(ISBN[9])*2

sum=(Digit1+Digit2+Digit3+Digit4+Digit5+Digit6+Digit7+Digit8+Digit9+Digit10)

num=sum%11
Digit11=11-num 
if Digit11==10:
    Digit11='X'
    ISBNNumber=str(ISBN)+str(Digit11) 
    print('The ISBN number is -->    ' + ISBNNumber)

这是我的代码,当我尝试输入我的10位数字时,它总是会出现数字1的错误,没有任何帮助吗?

4 个答案:

答案 0 :(得分:1)

为什么行:

(mainmenu)

在你的if语句中删除():

if mainmenu == "1":
    ...
elif mainmenu == "2":
    ...
else:
    print("Invalid menu option")
    exit()

答案 1 :(得分:0)

使用Python 2执行该代码时会出现问题。请改用Python 3。

在Python 2中,input 评估您提供的输入,因此如果您输入1,则mainmenu1(数字) )而不是"1"(字符串),因此您的if - 检查都失败,您的代码到达sum=...部分而没有输入任何ISBN号。

答案 2 :(得分:0)

这将是有效的。缩进很重要。

mainmenu = input("Welcome to my ISBN calculator, please select an option\n\
1. Load ISBN Calculator\n\
2. Exit Program\n\
")

if mainmenu == "2":
    print ("The ISBN Calculator will now close, thank you for using!")
    time.sleep(1.5)
    exit()


elif mainmenu == "1":
    ISBN = input(" Please enter the 10 digit number exactly\n")
    Digit1 = int(ISBN[0])*11
    Digit2 = int(ISBN[1])*10
    Digit3 = int(ISBN[2])*9
    Digit4 = int(ISBN[3])*8
    Digit5 = int(ISBN[4])*7
    Digit6 = int(ISBN[5])*6
    Digit7 = int(ISBN[6])*5
    Digit8 = int(ISBN[7])*4
    Digit9 = int(ISBN[8])*3
    Digit10 = int(ISBN[9])*2

    sum=(Digit1+Digit2+Digit3+Digit4+Digit5+Digit6+Digit7+Digit8+Digit9+Digit10)

    num=sum%11
    Digit11=11-num
    if Digit11==10:
        Digit11='X'
        ISBNNumber=str(ISBN)+str(Digit11)
        print('The ISBN number is -->    ' + ISBNNumber)

请注意。这段代码只是工作代码,不是一个好的实现。

答案 3 :(得分:0)

如上所述,您的" ISBN"与标准有很大不同,标准有10或13位数,包括校验位。

ISBN-10计算的干净实施将是:

from string import digits

checkTemplate = digits + "X"

def isbn(isbnBody):
    """append check digit to a isbn given as string without check digit"""
    assert len(isbnBody) == 9
    s = sum([int(isbnChar)*multiplier for isbnChar, multiplier in zip(isbnBody, range(1,10))])
    checkDigit = checkTemplate[s % 11]
    return isbnBody + checkDigit