使用int()转换基数

时间:2018-02-08 17:11:37

标签: python

在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)实际对数字的影响感到困惑。

3 个答案:

答案 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