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”,但发现这有点乏味。我尝试将其放在主括号的开头,但是没有用。
有没有一种方法可以改进此代码。
答案 0 :(得分:1)
您可以将sum
与map
和字符串切片一起使用:
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])