diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cb5b410 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide +.clang-format \ No newline at end of file diff --git a/src/bin_search.py b/src/bin_search.py index 713abfc..1d677f0 100644 --- a/src/bin_search.py +++ b/src/bin_search.py @@ -1,6 +1,8 @@ def binSearch(xs: list[int], x: int): left, right = 0, len(xs) - 1 - while left < right: + if not isinstance(x, int): + raise TypeError(f'X must be int, but {type(x)}') + while left <= right: mid = (left + right) // 2 if xs[mid] == x: return mid diff --git a/src/checksum.py b/src/checksum.py index 74b4fb0..35bfeb6 100644 --- a/src/checksum.py +++ b/src/checksum.py @@ -1,14 +1,28 @@ def modulo11Checksum(ISBNNumber: str): - digits = [int(char) for char in ISBNNumber if char.isdigit()] - - checkDigit = digits[-1] - + if ISBNNumber[-1] == 'x' or ISBNNumber[-1] == 'X': + digits += [10] total = 0 - for i in range(len(digits) - 1): - weight = 10 + if len(digits) != 10: + print("incorrect input, should be 10 numbers") + return False + for i in range(10): + weight = 10 - i digit = digits[i] total += digit * weight + if total % 11 == 0: + print("correct") + return True + else: + print("incorrect") + return False + +isbnnum = input('input your number: ') +while isbnnum != '-1': + modulo11Checksum(isbnnum) + isbnnum = input('input your number: ') + + + + - checksum = total + checkDigit - return checksum % 11 == 0 diff --git a/test/test_checksum.py b/test/test_checksum.py index f64a64c..d41e053 100644 --- a/test/test_checksum.py +++ b/test/test_checksum.py @@ -2,8 +2,12 @@ def test_good(): - assert modulo11Checksum("2-266-11156-8") + assert modulo11Checksum("2-266-11156-6") def test_bad(): assert not modulo11Checksum("2-266-11156-3") + +def test_with_x(): + assert modulo11Checksum("156-881-111-x") +