函数返回每个二进制数直到某个值

Zah*_*and 0 python

我有这个功能:

def binary_numbers(a):
    for x in range(1, a):
        return bin(x)
Run Code Online (Sandbox Code Playgroud)

我希望这个打印从0 my_input到此命令的每个二进制数.

print binary_numbers(my_input)
Run Code Online (Sandbox Code Playgroud)

所以,如果我写5作为参数,我希望它打印

0b0
0b1
0b10
0b11
0b100
0b101
Run Code Online (Sandbox Code Playgroud)

但是,当我用5调用它时,我得到的是:

>>> print binary_numbers(5)
'0b1'
Run Code Online (Sandbox Code Playgroud)

谁能解释我为什么?

the*_*eye 5

问题是,你的函数在处理完第一个数字后立即返回(因为控件到达return语句)

解决这个问题的四种方法

  1. 立即打印

    def binary_numbers(a):
        for x in range(1, a):
            return bin(x)    # Dont return here, instead print bin(x)
    
    binary_numbers(5)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 构造一个具有理解力的列表并将其返回

    def binary_numbers(a):
        return [bin(x) for x in range(1, a)]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用这样的map函数构造一个列表

    def binary_numbers(a):
        return map(bin, range(1, a))
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用这样的yield关键字创建一个生成器

    def binary_numbers(a):
        for x in range(1, a):
            yield bin(x)
    for current_binary_number in binary_numbers(5):
        print current_binary_number
    
    Run Code Online (Sandbox Code Playgroud)