Напишите программу, которая предлагает пользователю ввести положительное целое число 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
Не переводите результаты input() в int, и ваш код будет работать нормально.
Пожалуйста, обновите свой вопрос с полной трассировкой ошибок.
Вы не можете «конвертировать» двоичное число (которым является int) в другое основание. Что вы можете сделать, так это преобразовать int в str как представление числа в определенной базе.
Помогают ли вообще ответы на этот вопрос?
@Brian int() должен преобразовать первый параметр в базовое число второго параметра.
Нет, функция int() преобразует первый параметр (который уже находится в базе второго параметра) в int. Таков общий шаблон функций преобразования: они возвращают значение, тесно связанное с именем функции.
Кредиты 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))
Что вы ожидаете от вызова int с двумя целочисленными аргументами?