Рубрики
Без рубрики

Python Programming Challenge – проверяйте номер ISBN-10

Улучшите свои навыки программирования Python с помощью этой забавной задачей – проверяйте номер ISBN 10, используя оператор Modulo Python.

Автор оригинала: Robin Andrews.

ISBN числа или Международные стандартные номера книги являются коммерческими числовыми идентификаторами книги, которые используются для однозначного идентификации публикации. Есть два типа ISBN числа – ISBN-10 и ISBN-13.

Валидация – очень важная тема в компьютерном программировании, которое имеет много приложений. В этой статье мы рассмотрим вызов проверки, что ISBN 10 номер действителен.

Правило заключается в том, что для числа ISBN 10, чтобы быть действительным, мы умножаем первую цифру по 10 , второй по 9 , третий по 8 И т.д. до 10-й цифры 1 Отказ Если результат делится на 11 Тогда код действителен (по крайней мере, численно – не может быть книги с определенным численным действительным кодом ..)

Проверка 10 номеров ISBN

Посмотрите на этот пример:

ISBN-10 номер: 0553418025.

(10 * 0) + (9 * 5) + (8 * 5) + (7 * 3) + (6 * 4) + (5 * 1) + (4 * 8) + (3 * 0) + (2 * 2) + (1 *

176%

С 176% мы знаем, что 176 многократный 11 Таким образом, номер ISBN-10 действителен.

Одна дополнительная деталь заключается в том, что последний символ номеров ISBN 10 может быть Х Отказ При проверке достоверности кода это Х интерпретируется как имея значение 10 Отказ

Оператор модуля в Python

Ключ здесь делимость на 11 Отказ Мы можем проверить это свойство в Python, используя Оператор модуля (%) Отказ Если вы не знакомы с помощью оператора * Modulo, сейчас самое хорошее время, чтобы узнать об этом. Он имеет много важных применений в программировании.

Оператор по модулю Дает остаток на разделении целого числа.

E.G 10% так как

10 * 3 + 1

В качестве примера его полезности, чтобы проверить, является ли номер даже нечетным, мы можем сделать следующее:

for i in range(21):
    print(f"{i} is {'even' if i % 2 == 0 else 'odd'}")

(Там есть пара удобных ярлыков Python.

Если вы хотите Мастер модуль Оператор , проверьте этот полный урок с листами и практическими примерами, включая решения для Python Code.

  • Урок эксплуатации модуля и рабочий лист £ 12,00 купить сейчас

Функция Python для проверки номеров ISBN 10

Пройдите сейчас при заполнении функции ниже или проверки номеров ISBN 10. Как обычно, некоторые я включил некоторые базисные тесты в виде утверждений, чтобы вы могли быть понятно о том, какой вывод ожидается для данного ввода. В этой первой версии не беспокойтесь о Х За последнюю проблему цифры – мы придем к этому немного.

def validate_isbn10(code_string):
    pass


isbn = "123"
assert validate_isbn10(isbn) is False
isbn = "0136091814"
assert validate_isbn10(isbn) is True
isbn = "1616550416"
assert validate_isbn10(isbn) is False
isbn = "0553418025"
assert validate_isbn10(isbn) is True
isbn = "3859574859"
assert validate_isbn10(isbn) is False

Если вы чувствуете, что вам нужно немного больше структуры, вот версия заглушки с комментариями, чтобы помочь вам

def validate_isbn10(code_string):
    # Make sure string argument is 10 chars long.

    # Initialise result to 0
    result = 0

    # Iterate through code_string

        # for each character, multiply by a different decreasing number: 10 - x


    print(result)  # For debugging if required

    # Return whether the isbn is valid as a Boolean

Вы можете увидеть мое решение, нажав ниже.

def validate_isbn10(code_string):
    # Make sure string argument is 10 chars long.
    if len(code_string) != 10:
        return False

    # Initialise result to 0
    result = 0

    # Iterate through code_string
    for x in range(10):
        # for each character, multiply by a different decreasing number: 10 - x
        result = result + int(code_string[x]) * (10 - x)

    print(result)  # For debugging if required

    # Return whether the isbn is valid
    if result % 11 == 0:
        return True
    else:
        return False

    # If you prefer and understand why it is equivalent
    # return result % 11 == 0

Это нормально для базового решения. Тем не менее, есть комната для улучшения. Во-первых, нам нужно справиться с этим, где Х Для последней цифры, но также есть некоторые другие детали, такие как зачистки пробелы и тире, так что ISBN-10, как 1-55404-295-X пройдет как действительное, как это то, как они часто появляются.

Python Улучшенное решение для проверки номера ISBN-10

Ниже приведена версия, содержит несколько улучшений на основном решении выше. Вам решать, хотите ли вы попытаться выполнить улучшенную версию самостоятельно или просто посмотреть на версию ниже для одного из способов этого можно сделать.

def validate_isbn10(code_string):
    # Strip spaces and dashes
    code_string = code_string.replace("-", "").replace(" ", "")
    # Make sure string argument is valid
    if len(code_string) != 10:
        return False
    if not code_string[0:8].isdigit() or not (code_string[9].isdigit() or code_string[9].lower() == "x"):
        return False

    # Initialise result to 0
    result = 0

    # Iterate through code_string
    for i in range(9):
        # for each character, multiply by a different decreasing number: 10 - x
        result = result + int(code_string[i]) * (10 - i)

    # Handle last character
    if code_string[9].lower() == "x":
        result += 10
    else:
        result += int(code_string[9])

    print(result)  # For debugging if required

    # Return whether the isbn is valid
    if result % 11 == 0:
        return True
    else:
        return False

    # If you prefer and understand why it is equivalent
    # return result % 11 == 0


isbn = "123"
assert validate_isbn10(isbn) is False
isbn = "abc"
assert validate_isbn10(isbn) is False
isbn = "0136091814"
assert validate_isbn10(isbn) is True
isbn = "1616550416"
assert validate_isbn10(isbn) is False
isbn = "0553418025"
assert validate_isbn10(isbn) is True
isbn = "3859574859"
assert validate_isbn10(isbn) is False
isbn = "1-55404-295-X"
assert validate_isbn10(isbn) is True

В этой статье мы рассмотрели задачу написания функции Python для проверки номера ISBN-10. Я надеюсь, что вы нашли это интересно. Пожалуйста, не стесняйтесь комментировать ниже, чтобы поделиться, как у вас есть.

Счастливые вычисления.