在Python中将整数转换为二进制

时间:2017-05-29 12:47:59

标签: python python-3.x loops parameters arguments

我有一个非常具体的问题,关于如何通过python将denary整数转换为二进制,而只使用mod(%)和divide(/)函数。

到目前为止,我已成功创建了实际的函数并循环了自己,但该函数似乎永远循环并添加了一个0和1的错误,尽管成功转换。

例如,输入4,输出[0,0,1,0,1]。正如您所看到的,它已成功获取[0,0,1],其中二进制为4,但在末尾添加0和1。

我认为这与我引用和传递参数的方式有关,但很乐意接受一些帮助。

num = int(input("Enter the Number"))
def func(num)
    if num == 1:
        alist.append(1)
        return num

    while num != 1:
        modnum = int(num%2)
        num = int(num/2)

        if modnum == 0:
            alist.append(0)
            print(alist)


        elif modnum == 1:
            alist.append(1)
            print(alist)
        func(num)



alist = []
func(num)
print(alist)
print (alist[::-1])

5 个答案:

答案 0 :(得分:3)

  • 删除了递归。
  • 条件应为num != 0
  • 删除了多余的modnum支票。

假设这些问题我们可以写

def func(num):
    if num == 0:
        return [num]

    binary_digits = []    
    while num != 0:
        modnum = int(num % 2)
        num = int(num / 2)
        binary_digits.append(modnum)
    return list(reversed(binary_digits))


num = int(input("Enter the Number"))
binary_digits = func(num)
print(binary_digits)

示例:

>>> func(100)
[1, 1, 0, 0, 1, 0, 0]

答案 1 :(得分:1)

num = int(input("Enter the Number"))
def func(num):
    while num != 0:
        modnum = int(num%2)
        num = int(num/2)
        alist.append(modnum)


alist = []
func(num)
print(alist)
print (alist[::-1])

您不需要if添加正确的数字,只需使用变量modnum即可。您还必须再次执行此while - 循环。最后的函数调用func(num)为您提供了这些随机数。

答案 2 :(得分:0)

您可以使用while循环来完成您要执行的操作。你可以尝试这样的事情:

num = int(input("Enter the Number"))
def func(num):
    #this while loop breaks when num == 1
    while num != 1:
        modnum = int(num%2)
        num = int(num/2)

        if modnum == 0:
            alist.append(0)
            print(alist)


        elif modnum == 1:
            alist.append(1)
            print(alist)
    #when is breaks, append 1 to your list
    alist.append(1)

alist = []
func(num)
print(alist)
print (alist[::-1])

当您输入 0 作为输入时,这将进入无限循环。但那是你要修理

答案 3 :(得分:0)

试试这个:

def func(num):

if num <= 1:
    alist.append(num)
    return 
while num != 1:
    modnum = int(num%2)
    num = int(num/2)

    if modnum == 0:
        alist.append(0)
        print(alist)


    elif modnum == 1:
        alist.append(1)
    func(num)

答案 4 :(得分:0)

您可以通过执行

快速实现此功能
def func(num):
    binary_digits = list("{0:b}".format(num))
    return binary_digits