for循环内的return语句,范围不起作用

时间:2019-01-31 10:02:51

标签: python-3.x for-loop return user-defined-functions

我正在尝试解决基于python的问题,

`Given an integer,print the following values for each integer  from 1 to n :

Decimal
Octal
Hexadecimal (capitalized)
Binary`

我做了什么:

def print_format(number):
    for i in range(number+1):
        decimal=str(i)
        binary=str(bin(i))
        octa=str(oct(i))
        hexagonal=str(hex(i))
    return (decimal+' '+octa[2:]+' '+hexagonal[2:].upper()+' '+binary[2:])

print_format(5)

'5 5 5 101'

代码仅返回最后一组值。但是,我期望的是,

0 0 0 0 1 1 1 1 2 2 2 10 3 3 3 11 4 4 4 100 5 5 5 101

print语句相同的部分代码可以正常工作。

def print_format(number):
    for i in range(number+1):
        decimal=str(i)
        binary=str(bin(i))
        octa=str(oct(i))
        hexagonal=str(hex(i))
        print (decimal+' '+octa[2:]+' '+hexagonal[2:].upper()+' '+binary[2:])

任何人都可以解释使用return语句时我做错了什么吗?

2 个答案:

答案 0 :(得分:2)

在您当前的尝试中,您正在循环进行输入,而不执行任何操作。 Return仅在最后一次迭代后看到局部变量并返回它们。您想要的是一个生成器:

def print_format(number):
    for i in range(number+1):
        decimal=str(i)
        binary=str(bin(i))
        octa=str(oct(i))
        hexagonal=str(hex(i))
        yield (decimal+' '+octa[2:]+' '+hexagonal[2:].upper()+' '+binary[2:])

mygen = print_format(5)

for i in mygen:
    print(i)

这应该打印您想要的输出。

答案 1 :(得分:1)

只需将所有字符串保存在用\n分割的变量中并返回它即可。

def print_format(number):
    result = ''
    for i in range(number+1):
        decimal=str(i)
        binary=str(bin(i))
        octa=str(oct(i))
        hexagonal=str(hex(i))
        result += decimal+' '+octa[2:]+' '+hexagonal[2:].upper()+' '+binary[2:] + '\n'
    return result

print(print_format(5))