2014-10-18 5 views
1

Это мой первый опыт использования python, и у меня возникли проблемы с его печатью, как я хочу. Я хотел бы, чтобы результат был рядом. Может быть, потому, что я устал, но я не могу понять это.Печать двух функций бок о бок

Мой код:

def cToF(): 
    c = 0 
    while c <= 100: 
     print(c * 9/5 + 32) 
     c += 1 
def fToC(): 
    f = 32 
    while f <= 212: 
     print((f - 32)/1.8) 
     f += 1 






print (cToF(),fToC()) 

ВЫВОД:

all of the numbers from cToF() 
all of the numbers from fToC() 

Как я хотел бы, выход:

all of the numbers from cToF() all of the numbers from fToC() 
+1

Чтобы сделать ваш вывод более полезным, я предлагаю, чтобы каждая из ваших функций печатала _two_ числа, температуру, от которой он конвертируется, а также температуру, в которую он конвертирует. Но даже если вы этого не сделаете, вам нужно проявлять особую осторожность, если вы хотите, чтобы результат был бок о бок, потому что 'cToF()' печатает 100 строк, но 'fToC()' печатает 180 строк. –

ответ

2

В настоящее время функция работает и печатает CTOF все это значения, то функция fToC запускает и печатает все ее значения. Вам нужно изменить способ генерации значений, чтобы их можно было печатать рядом друг с другом.

# generate f values 
def cToF(low=0, high=100): 
    for c in range(low, high + 1): 
     yield c * 9/5 + 32 

# generate c values 
def fToC(low=32, high=212): 
    for f in range(low, high + 1): 
     yield (f - 32) * 5/9 

# iterate over pairs of f and c values 
# will stop once cToF is exhausted since it generates fewer values than fToC 
for f, c in zip(cToF(), fToC()): 
    print('{}\t\t{}'.format(f, c)) 
# or keep iterating until the longer fToC generator is exhausted 
from itertools import zip_longest 

for f, c in zip_longest(cToF(), fToC()): 
    print('{}\t\t{}'.format(f, c)) # will print None, c once cToF is exhausted 

Если вы используете Python 2, заменить xrange для диапазона и izip_longest для zip_longest.

+0

Кажется, это правильно напечатано, но 'fToC()' перестает печатать, когда попадает '55.55555555555556' –

+0

Это потому, что 'zip' усекает до кратчайшего итерабельного. 'cToF' генерирует 100 значений, а' fToC' будет генерировать 180 значений. Вы можете использовать ['itertools.zip_longest'] (https://docs.python.org/3/library/itertools.html#itertools.zip_longest) вместо' zip', чтобы получить самый длинный результат. – davidism

+0

О, хорошо классно, питон потрясающий, есть так много полезных функций, которые вы можете использовать: D –

0

Если вы хотите напечатать как;

cToF first Element fToC first element 
cToF second Element fToC second element 
... 

Вы можете присоединиться к 2-го списка, чтобы распечатать его.

Пример кода, который вы можете использовать;

import pprint 
def cToF(): 
    c = 0 
    ret_list = [] 
    while c <= 100: 
     ret_list.append(c * 9/5 + 32) 
     c += 1 
    return ret_list 

def fToC(): 
    f = 32 
    ret_list = [] 
    while f <= 212: 
     ret_list.append((f - 32)/1.8) 
     f += 1 
    return ret_list 

def join_list(first_list, second_list): 
    length_of_first_list = len(first_list) 
    for i, val in enumerate(second_list): 
     second_list[i] = (" - "if (length_of_first_list-1) < i else first_list[i], val) 
    return second_list 

pp = pprint.PrettyPrinter(indent=4) 
pp.pprint(join_list(cToF(), fToC())) 
Смежные вопросы