Пользовательский список ввода, затем добавление чисел для вычисления контрольной цифры ISBN

1
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" перед каждым элементом списка, но обнаружил, что это немного утомительно. Я попытался поставить его в начале перед основной скобкой, но это не сработало.

Есть ли способ улучшить этот код.

Теги:
string
input

2 ответа

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])
  • 0
    Я попробовал это, и это работает. Это определенно выглядит намного аккуратнее. Спасибо. Не могли бы вы поделиться временем и объяснить, что именно происходит в следующих строках: nums = [int (num) для num в num1] oddTotal = sum (nums [:: 2]) (Что означают :: означать и 2 ") evenTotal = sum (nums [1 :: 2]) (аналогично здесь)
  • 0
    Вторая строка - это так называемое понимание списка, которое является просто кратким обозначением цикла for , см., Например, здесь . Синтаксис нарезки списка ( [::2] ) дает хорошие объяснения в ответах на этот вопрос на StackOverflow: stackoverflow.com/questions/509211/… .
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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню