Я работаю над этим проектом, в котором я должен проверить, действителен ли номер кредитной карты. В этом случае мне нужна только 8-значная кредитная карта (я знаю, что это не реальность). Вот вопросИспользование петель в python для настройки номера кредитной карты
Последняя цифра номера кредитной карты - контрольная цифра, которая защищает от ошибок транскрипции, таких как ошибка в одной цифре или переключение двух цифр. Следующий метод используется для проверки фактических номера кредитных карт, но для простоты мы будем описывать его для чисел с 8 цифр вместо 16:
• Начиная с самой правой цифры, образуют сумму всех остальных цифры , Например, если номер кредитной карты
4358 9795
, то вы составите сумму5 + 7 + 8 + 3 = 23.
• Двойные каждый из цифр, которые не были включены в предыдущем шаге. Добавьте все цифры полученных чисел. Например, с приведенным выше номером , удвоение цифр, начиная с следующего за последним,
yields 18 18 10 8
. Добавление всех цифр в эти значения дает1 + 8 + 1 + 8 + 1 + 0 + 8 = 27
.• Добавьте суммы двух предыдущих шагов. Если последняя цифра результата равна 0, номер действителен. В нашем случае 23 + 27 = 50, поэтому число действительно.
Напишите программу, которая реализует этот алгоритм. Пользователь должен указать 8-значный номер, и вы должны распечатать, действительно ли это число или нет. Если это недействительно, вы должны напечатать значение контрольной цифры, которая сделает ее действительной.
Мне нужно использовать циклы, чтобы сделать сумму. Однако я не знаю, как использовать для этого циклы.
Вот мой код
# Credit Card Number Check. The last digit of a credit card number is the check digit,
# which protects against transcription errors such as an error in a single digit or
# switching two digits. The following method is used to verify actual credit card
# numbers but, for simplicity, we will describe it for numbers with 8 digits instead
# of 16:
# Starting from the rightmost digit, form the sum of every other digit. For
# example, if the credit card number is 43589795, then you form the sum
# 5 + 7 + 8 + 3 = 23.
# Double each of the digits that were not included in the preceding step. Add # all
# digits of the resulting numbers. For example, with the number given above,
# doubling the digits, starting with the next-to-last one, yields 18 18 10 8. Adding
# all digits in these values yields 1 + 8 + 1 + 8 + 1 + 0 + 8 = 27.
# Add the sums of the two preceding steps. If the last digit of the result is 0, the
# number is valid. In our case, 23 + 27 = 50, so the number is valid.
# Write a program that implements this algorithm. The user should supply an 8-digit
# number, and you should print out whether the number is valid or not. If it is not
# valid, you should print out the value of the check digit that would make the number
# valid.
card_number = int(input("8-digit credit card number: "))
rights = 0
for i in card_number[1::2]:
rights += int(i)
lefts = 0
for i in card_number[::2]:
lefts += int(i)*2%10+int(i)*2/10
print card_number, (rights +lefts)/10
if remaining == 0:
print("Card number is valid")
else:
print("Card number is invalid")
if digit_7 - remaining < 0:
checkDigit = int(digit_7 + (10 - remaining))
print("Check digit should have been:", checkDigit)
else:
checkDigit = int(digit_7 - remaining)
print("Check digit should have been:", checkDigit)
Какова ваши ошибки? – wgwz
Ошибок нет, мне нужно использовать циклы для этой программы и не знаю, как это сделать. Эта программа работает, но она не учитывает сумму альтернативных номеров и их удвоений. Последняя цифра общей суммы должна быть равна o. Контрольная цифра равна 4. – GopherTech
Что вы думаете? Неясно, к чему конкретно вы пытаетесь получить помощь. Пожалуйста, отредактируйте/обновите свой вопрос, чтобы задать конкретный вопрос. –