ValueError: invalid literal for int() with base 2: '1034'

infinity

Новичок
Пользователь
Янв 23, 2025
1
1
1
Приветствую, необходимо по определённому алгоритму видоизменить число, перевести его обратно в десятичную систему, но на этапе перевода числа в десятичную систему выдаётся ошибка "ValueError: invalid literal for int() with base 2: '1034'". Как можно исправить?

Python:
k = 0
j = 0
for N in range (1, 1000):
    n2=bin(N)[2:]
    while True:
        d= N % 10
        k = k+d
        if d!=0:
            break
    m = k % 2
    n3 = n2 + str(k)
    while True:
        d1 = int(n3) % 10
        j = j+d1
        if d1 !=0:
            break
    l = j % 2
    n4 = n3 + str(j)
    R = int(str(n4), 2)
    if R > 396:
        print (N)
        break
 
  • Мне нравится
Реакции: Dr. Mundo

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 676
479
83
перевести его обратно в десятичную систему,
перевести откуда?

есть функции bin(), oct(), int(), hex()
 

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
26
1
3
Ошибка "ValueError: invalid literal for int() with base 2: '1034'" возникает из-за того, что в переменной n4 оказывается число, содержащее цифры, не входящие в двоичную систему счисления (0 и 1). В твоем коде переменная k и j накапливают сумму цифр, которая затем добавляется к n2, но k и j могут содержать цифры больше 1, что делает n4 недопустимым двоичным числом.

Как исправить:​

Перед тем как конкатенировать k и j с n2, необходимо их преобразовать в двоичный вид.

Исправленный код:​

Python:
k = 0
j = 0
for N in range(1, 1000):
    n2 = bin(N)[2:]
    
    # Вычисляем k — сумма цифр N, пока не встретится ненулевая цифра
    k = sum(int(d) for d in str(N))  # Сумма всех цифр N
    m = k % 2
    n3 = n2 + bin(k)[2:]  # Преобразуем k в двоичный вид перед конкатенацией
    
    # Вычисляем j — сумма цифр n3, пока не встретится ненулевая цифра
    j = sum(int(d) for d in str(n3))  # Сумма всех цифр n3
    l = j % 2
    n4 = n3 + bin(j)[2:]  # Преобразуем j в двоичный вид перед конкатенацией
    
    # Преобразуем получившееся двоичное число обратно в десятичное
    R = int(n4, 2)
    
    if R > 396:
        print(N)
        break

В чем ошибка и почему исправленный код работает:​

  1. В оригинальном коде n3 = n2 + str(k), где k может содержать цифры больше 1 (например, 10, 11, 12 и т.д.), что делает строку n3 недопустимой для преобразования в int(n4, 2).
  2. Аналогично, n4 = n3 + str(j), а j тоже может быть больше 1.
  3. Решение: перед конкатенацией с n2 и n3 числа k и j переводятся в двоичный формат с помощью bin(k)[2:] и bin(j)[2:], гарантируя, что строка остается валидной для двоичного перевода.
Теперь код должен работать корректно без ошибки ValueError.
 

Форум IT Специалистов