用户输入列表,然后添加数字以计算ISBN校验位

时间:2018-10-14 17:28:42

标签: python string input

print("""Hi, and welcome to \"GENERATE A CHECK DIGIT \" """)

num1 =input("Enter a 12 digit ISBN number and I will output your check digit:  ")
oddTotal=int(num1[0])+int(num1[2])+int(num1[4])+int(num1[6])+int(num1[8])+int(num1[10])
evenTotal=int(num1[1])+int(num1[3])+int(num1[5])+int(num1[7])+int(num1[9])+int(num1[11])
Total=oddTotal+(evenTotal*3)
checkDigit=10-(Total%10)

print("For the given ISBN: "  + str(num1)+ " The Check digit should be: " + str(checkDigit))
print("Complete ISBN 13 CODE = " +str(num1)+str(checkDigit))

我的问题:我在每个列表项之前都添加了“ int”,但发现这有点乏味。我尝试将其放在主括号的开头,但是没有用。

有没有一种方法可以改进此代码。

2 个答案:

答案 0 :(得分:1)

您可以将summap和字符串切片一起使用:

num1 = input("Enter a 12 digit ISBN number and I will output your check digit:  ")
oddTotal = sum(map(int, num1[::2]))
evenTotal = sum(map(int, num1[1::2]))

字符串切片的语法类似于列表切片的语法,即格式为start:end:step

答案 1 :(得分:0)

您可以使用列表推导将字符串num1的所有元素转换为整数,然后使用列表切片来计算两个和:

num1 = input("Enter a 12 digit ISBN number and I will output your check digit:  ")
nums = [int(num) for num in num1]
oddTotal = sum(nums[::2])
evenTotal= sum(nums[1::2])