Оператор возврата внутри для цикла с диапазоном не работает - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь поработать над проблемой, основанной на 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 голосов
/ 31 января 2019

В вашей текущей попытке вы просматриваете вход без каких-либо действий.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)

Это должно напечатать желаемый вывод.

0 голосов
/ 31 января 2019

Просто сохраните все строки в переменной, разделяющейся с помощью \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))
...