2017-05-29 86 views
2

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

到目前为止,我已经成功地创建了实际的函数并循环了自身,但函数似乎永远循环并增加了一个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]) 
+3

递归*和*循环快速实现这一点?似乎你需要选择一种方式或另一种方式。 –

+0

你能解释一下吗?我知道我在循环中使用递归,但在这种情况下,它是否重要?我很新,所以任何帮助都会很乐意。 – Nawlidge

+0

为什么不使用'list(“{0:b}”.format(num))'来获取列表? –

回答

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] 
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

试试这个:

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) 
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 -loop。在末尾func(num)的函数调用给你这些随机数。

0

您可以通过执行

def func(num): 
    binary_digits = list("{0:b}".format(num)) 
    return binary_digits 
相关问题