【问题标题】:Converting an Integer to Binary in Python在 Python 中将整数转换为二进制
【发布时间】:2017-10-29 18:54:09
【问题描述】:

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

到目前为止,我已经成功地创建了实际的函数并自行循环,但该函数似乎永远循环并添加了随机数的 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])

【问题讨论】:

  • 递归一个循环?似乎您需要选择一种方式或其他方式。
  • 你能解释一下吗?我知道我正在使用循环递归,但在这种情况下,这有关系吗?我很新,所以任何帮助将不胜感激。
  • 另外,为什么不直接使用list("{0:b}".format(num)) 来获取列表呢?
  • @SudheeshSinganamalla 我将如何利用它?

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


【解决方案1】:

你可以只使用一个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作为你的输入。但这是由你来解决的

【讨论】:

    【解决方案2】:

    试试这个:

    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)
    

    【讨论】:

      【解决方案3】:
      • 删除了递归。
      • 条件应该是num != 0
      • 使用divmod built-in function 获取商和余数。
      • 删除了多余的modnum 检查。

      假设这些问题我们可以写

      def func(num):
          if num == 0:
              return [num]
      
          binary_digits = []    
          while num != 0:
              num, modnum = divmod(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]
      

      【讨论】:

        【解决方案4】:
        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) 会为您提供这些随机数。

        【讨论】:

          【解决方案5】:

          您可以通过这样做来快速实现这一点

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

          【讨论】:

            猜你喜欢
            • 2012-05-11
            • 2017-08-18
            • 2013-01-13
            • 2012-04-10
            • 2016-07-08
            • 2021-11-03
            • 2015-09-21
            • 1970-01-01
            相关资源
            最近更新 更多