-1
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

4 回答 4

1

为什么行:

(mainmenu)

?

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

if mainmenu == "1":
    ...
elif mainmenu == "2":
    ...
else:
    print("Invalid menu option")
    exit()
于 2014-04-29T08:57:44.977 回答
0

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

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

于 2014-04-29T09:03:20.847 回答
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)

笔记。这段代码只是工作代码,不是一个好的实现。

于 2014-04-29T09:04:12.710 回答
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
于 2014-04-29T20:52:55.097 回答