Int () не может преобразовать нестроку с явной базой — почему?

Напишите программу, которая предлагает пользователю ввести положительное целое число n и преобразует это целое число в каждое основание b от 2 до 16 (используя цикл for). Я на полпути (все еще нужно преобразовать числа в буквы для оснований 10+).

При запуске программы выскакивает ошибка. Я думал, что int() принимает целые числа в качестве параметров?

n = int(input("Enter a positive number: "))

while n < 0:
    n = int(input("Please input a positive number: "))

for x in range(2, 17): #x being the iteration of base numbers
    baseConvert = int(n, x)
    textString = "{} = {} in base {}".format(n, baseConvert, x)
    print(textString)

Traceback (most recent call last):
  File "/tmp/sessions/fdb8f9ea1d4915eb/main.py", line 8, in <module>
    baseConvert = int(n, base)
TypeError: int() can't convert non-string with explicit base

Что вы ожидаете от вызова int с двумя целочисленными аргументами?

Brian 16.02.2023 17:48

Не переводите результаты input() в int, и ваш код будет работать нормально.

MattDMo 16.02.2023 17:48

Пожалуйста, обновите свой вопрос с полной трассировкой ошибок.

quamrana 16.02.2023 17:49

Вы не можете «конвертировать» двоичное число (которым является int) в другое основание. Что вы можете сделать, так это преобразовать int в str как представление числа в определенной базе.

quamrana 16.02.2023 17:53

Помогают ли вообще ответы на этот вопрос?

quamrana 16.02.2023 17:54

@Brian int() должен преобразовать первый параметр в базовое число второго параметра.

Anna Swann 16.02.2023 17:55

Нет, функция int() преобразует первый параметр (который уже находится в базе второго параметра) в int. Таков общий шаблон функций преобразования: они возвращают значение, тесно связанное с именем функции.

quamrana 16.02.2023 17:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кредиты https://stackoverflow.com/a/53675480/4954993


BS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def to_base(number, base):
    res = ""                     #Starts with empty string
    while number and base>1:     #While number is not zero, it means there are still digits to be calculed.
        res+=BS[number%base]     #Uses the remainder of number divided by base as the index for getting the respective char from constant BS. Attaches the char to the right of string res.
        number//= base           #Divides number by base and store result as int in var number.
    return res[::-1] or "0"      #Returns reversed string, or zero if empty.

n=-1
while n < 0:
    n = int(input("Please input a positive number: "))
for i in range(2,17):
    print("Base", i, "Number", to_base(n,i))

Другие вопросы по теме