Nano Hash - криптовалюты, майнинг, программирование

Цифра 1 не определена? (Калькулятор ISBN — Python)

mainmenu = input("Welcome to my ISBN calculator, please select an option\n\
1. Load ISBN Calculator\n\
2. Exit Program\n\
") 


(mainmenu) 

if mainmenu == ("2"):
    print ("The ISBN Calculator will now close, thank you for using!")
    time.sleep(1.5) 
    exit()


elif mainmenu == ("1"):
    ISBN = input(" Please enter the 10 digit number exactly\n\
") 


    Digit1 = int(ISBN[0])*11
    Digit2 = int(ISBN[1])*10
    Digit3 = int(ISBN[2])*9
    Digit4 = int(ISBN[3])*8
    Digit5 = int(ISBN[4])*7
    Digit6 = int(ISBN[5])*6
    Digit7 = int(ISBN[6])*5
    Digit8 = int(ISBN[7])*4
    Digit9 = int(ISBN[8])*3
    Digit10 = int(ISBN[9])*2

sum=(Digit1+Digit2+Digit3+Digit4+Digit5+Digit6+Digit7+Digit8+Digit9+Digit10)

num=sum%11
Digit11=11-num 
if Digit11==10:
    Digit11='X'
    ISBNNumber=str(ISBN)+str(Digit11) 
    print('The ISBN number is -->    ' + ISBNNumber)

Это мой код, и он всегда выдает ошибку «Цифра 1 не определена» всякий раз, когда я пытаюсь ввести свой 10-значный номер, какая-нибудь помощь?


  • Не могу воспроизвести. При этом ничего не печатает. Можете ли вы предоставить действительный номер ISBN для лучшего тестирования? 29.04.2014
  • Хотя в коде есть место для улучшения, используемая формула также неверна — первая цифра умножается на 1, вторая — на 2 и т. д. 29.04.2014
  • возможный дубликат решатель контрольной цифры ISBN, отзывы пользователей 30.04.2014

Ответы:


1

Это будет работа. Отступ важен.

mainmenu = input("Welcome to my ISBN calculator, please select an option\n\
1. Load ISBN Calculator\n\
2. Exit Program\n\
")

if mainmenu == "2":
    print ("The ISBN Calculator will now close, thank you for using!")
    time.sleep(1.5)
    exit()


elif mainmenu == "1":
    ISBN = input(" Please enter the 10 digit number exactly\n")
    Digit1 = int(ISBN[0])*11
    Digit2 = int(ISBN[1])*10
    Digit3 = int(ISBN[2])*9
    Digit4 = int(ISBN[3])*8
    Digit5 = int(ISBN[4])*7
    Digit6 = int(ISBN[5])*6
    Digit7 = int(ISBN[6])*5
    Digit8 = int(ISBN[7])*4
    Digit9 = int(ISBN[8])*3
    Digit10 = int(ISBN[9])*2

    sum=(Digit1+Digit2+Digit3+Digit4+Digit5+Digit6+Digit7+Digit8+Digit9+Digit10)

    num=sum%11
    Digit11=11-num
    if Digit11==10:
        Digit11='X'
        ISBNNumber=str(ISBN)+str(Digit11)
        print('The ISBN number is -->    ' + ISBNNumber)

Примечание. Этот код является просто рабочим кодом, а не хорошей реализацией.

29.04.2014
  • Я использовал его, но всякий раз, когда я набираю новый номер, ничего не появляется ... спасибо, я очень новичок в этом 29.04.2014
  • @user3584526 user3584526 Какой ISBN ввели? Мой тестовый ISBN был 8979143400, и он работает. 29.04.2014

  • 2

    Почему строка:

    (mainmenu)
    

    ?

    В ваших операторах if удалите ():

    if mainmenu == "1":
        ...
    elif mainmenu == "2":
        ...
    else:
        print("Invalid menu option")
        exit()
    
    29.04.2014
  • Это ничего не должно изменить. 29.04.2014
  • Спасибо, но цифра 1 все еще не определена: P 29.04.2014

  • 3

    Проблема возникает, когда вы выполняете этот код с помощью Python 2. Вместо этого используйте Python 3.

    В Python 2 input оценивает введенные вами данные, поэтому, если вы вводите 1, то mainmenu будет 1 (число), а не "1" (строка), таким образом, обе ваши if-проверки не пройдут, и ваша код поступает в часть sum=... без ввода номера ISBN.

    29.04.2014
  • @user3584526 user3584526 Ты на 100% уверен, что да? Введите python (без запуска какой-либо программы, т.е. в интерактивном режиме) и посмотрите, что он напечатает сверху. 29.04.2014
  • Как вы начинаете свой сценарий? Возможно, ваша IDE по умолчанию использует другую версию. По крайней мере, это единственный способ воспроизвести проблему. Добавьте import sys; print(sys.version) в свой код. Кроме того, print(repr(mainmenu)) чтобы увидеть, является ли это строкой или числом. 29.04.2014

  • 4

    Как отмечалось выше, ваш «ISBN» сильно отличается от стандартного, который имеет 10 или 13 цифр, включая контрольную цифру.

    Чистой реализацией для расчета ISBN-10 будет:

    from string import digits
    
    checkTemplate = digits + "X"
    
    def isbn(isbnBody):
        """append check digit to a isbn given as string without check digit"""
        assert len(isbnBody) == 9
        s = sum([int(isbnChar)*multiplier for isbnChar, multiplier in zip(isbnBody, range(1,10))])
        checkDigit = checkTemplate[s % 11]
        return isbnBody + checkDigit
    
    29.04.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..