在Python中将数字从基数10转换为基数3时,我对int()的工作原理有点困惑。
此代码将打印出用户指定范围内转换后的基数3。
Value=0
Number=int(input("Please Input A Number "))
for i in range(0,Number):
Value=int(i,base=3)
print(Value)
我有TypeError:int()无法将带有显式库的非字符串转换为错误。
我想要实现的一个例子。 基础3中的实施例32是1012 也许我对int(x,base = y)实际对数字的影响感到困惑。
答案 0 :(得分:0)
数字的内部表示是无基础的。您只能将具有给定基数的字符串转换为数字:
>>> int("21", 3)
7
>>> bin(int("21", 3))
'0b111'
>>> hex(int("21", 3))
'0x7'
答案 1 :(得分:0)
我认为您的问题来自i的数据类型。根据Python 2.7和3.6中的文档,当提供基数时,您希望转换的值必须是字符串。
"如果x不是数字或者给定了base,则x必须是字符串,字节或bytearray实例,表示基数为整数的文字。"
因此,为了使代码正常工作,必须将i的值转换为字符串。
int((str(i)), 3)
答案 2 :(得分:0)
您正在尝试将数字从Base 10转换为Base 3,这不是int()
所做的。来自文档:
class int(x,base = 10)
返回一个由数字或字符串x构成的整数对象,或 如果没有给出参数,则返回0.
它不会转换为其他碱基,它会从指定的碱基转换为整数。
如果要将数字从Base 10转换为Base 3,可以使用以下here。为了便于阅读,我略微调整了它,因此它只转换为Base 3。
def baseThree(num, numerals="012"):
return ((num == 0) and numerals[0]) or (baseThree(num // 3, numerals).lstrip(numerals[0]) + numerals[num % 3])
print(baseThree(32))
输出:
1012
针对您的具体问题进行了调整:
num = int(input("Please Input A Number "))
for i in range(0, num):
print(baseThree(i))
使用num = 5
输出:
Please Input A Number 5
0
1
2
10
11