我有这个功能:
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'
谁能解释我为什么?
答案 0 :(得分:5)
问题在于,您的函数在处理完第一个数字后立即返回(因为控件到达return
语句)
解决此问题的四种方法
立即打印
def binary_numbers(a):
for x in range(1, a):
return bin(x) # Dont return here, instead print bin(x)
binary_numbers(5)
构建一个包含理解的列表并将其返回
def binary_numbers(a):
return [bin(x) for x in range(1, a)]
构建一个列表,其中包含map
函数
def binary_numbers(a):
return map(bin, range(1, a))
使用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))
您还有其他选择,例如从文件中读取,但这些是交互式选项。
注意:我也将您的回报更改为收益并打印了函数调用的列表表示。