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

时间:2014-01-14 20:33:21

标签: python

我有这个功能:

def binary_numbers(a):
    for x in range(1, a):
        return bin(x)

我想在此命令中打印从0到my_input的每个二进制数。

print binary_numbers(my_input)

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

0b0
0b1
0b10
0b11
0b100
0b101

然而,当我用5来称呼它时,我得到了:

>>> print binary_numbers(5)
'0b1'

谁能解释我为什么?

2 个答案:

答案 0 :(得分: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)
    
  2. 构建一个包含理解的列表并将其返回

    def binary_numbers(a):
        return [bin(x) for x in range(1, a)]
    
  3. 构建一个列表,其中包含map函数

    def binary_numbers(a):
        return map(bin, range(1, a))
    
  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
    

答案 1 :(得分:0)

关于你被卡住的实际上获得 "my_input"的可能性很小:


您有两种选择,具体取决于您较大的应用程序。

在您需要时提出要求:

def binary_numbers(a):
    for x in range(1, a):
        yield bin(x)

a = int(raw_input('My Input: '))
print list(binary_numbers(a))

或者将其作为命令行参数传递:> python binary_number.py 5

import sys
def binary_numbers(a):
    for x in range(1, a):
        yield bin(x)

a = int(sys.argv[1])
print list(binary_numbers(a))

您还有其他选择,例如从文件中读取,但这些是交互式选项。

注意:我也将您的回报更改为收益并打印了函数调用的列表表示。