2016-01-04 5 views
0

У меня есть функция ниже, которая проходит через два списка и распечатывает выбор овощей, а затем фруктов.Назначение функции вывода печати на строковую переменную

def Selection(): 
    print("VEGETABLES FOR THE WEEK:\n") 
    for veg in veg_selection: 
     print(veg.upper()) 
    print("\n") 
    print("FRUITS FOR THE WEEK:\n") 
    for fruit in fruit_selection: 
     print(fruit.upper()) 

Так что результат может выглядеть следующим образом:

VEGETABLES FOR THE WEEK: 

BROCOLLI 
PEAS 
CARROTS 
SWEET CORN 
WHITE ONIONS 


FRUITS FOR THE WEEK: 

GRAPEFRUIT 
CHERRIES 
ORANGE 
COCONUT 
RASPBERRIES 

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

ответ

5

Одним из решений было бы сохранить все строки, связанные с ним, в контейнер и join после них. Котировочные документы:

string.join(words[, sep]) Включить список или кортеж слов с промежуточными вхождениями sep. Значение по умолчанию для sep является одиночным символом пробела. Всегда верно, что string.join(string.split(s, sep), sep) равно s.

Так образец код будет выглядеть следующим образом:

import os 

def selection(): 
    strings = [] 
    strings.append("VEGETABLES FOR THE WEEK:\n") 
    for veg in veg_selection: 
     strings.append(veg.upper()) 
    strings.append("\n") 
    strings.append("FRUITS FOR THE WEEK:\n") 
    for fruit in fruit_selection: 
     strings.append(fruit.upper()) 
    return os.linesep.join(strings) 

s = selection() # s now contains output string, and nothing is printed 
print(s) # print whole string at once 

os.linesep является кросс-Os константы с правильным характером новой строки.

Строка, используемая для разделения (или, скорее, завершения) строк на текущей платформе . Это может быть один символ, например «\ n» для POSIX или несколько символов, например «\ r \ n» для Windows. Do not использовать os.linesep как ограничитель строки при записи файлов, открытых в текстовом режиме (по умолчанию); вместо этого используйте один «\ n» на всех платформах.

Кроме того, вопрос, связанный с полуопределением: Good way to append to a string.

+0

Большое спасибо, отличная помощь –

1

Возможно, самый простой способ сделать это - просто добавить дополнительный шаг, добавив текст в переменную, где вам нужно. См. Ниже:

def Selection(): 
    output_text = "VEGETABLES FOR THE WEEK:\n" 
    print("VEGETABLES FOR THE WEEK:\n") 
    for veg in veg_selection: 
     output_text += veg 
     print(veg.upper()) 
    output_text += "\n" 
    print("\n") 
    output_text += "FRUITS FOR THE WEEK" 
    print("FRUITS FOR THE WEEK:\n") 
    for fruit in fruit_selection: 
     output_text += fruit 
     print(fruit.upper()) 

Вы можете изменить свой код для вывода строки output_text в конце, а не для печати каждой строки.

1

Вы можете просто сцепить одной переменной строки следующим образом:

def Selection(): 
    output = "VEGETABLES FOR THE WEEK:\n" 
    for veg in veg_selection: 
     output += veg.upper() + "\n" 
    output += "\nFRUITS FOR THE WEEK:\n" 
    for fruit in fruit_selection: 
     output += fruit.upper() + "\n" 

Вы можете либо распечатать строку сразу, добавив к концу:

print(output) 

или возвращает строку для используйте в другом месте, добавив в конце:

return output 
1

Включите вашу функцию в генератор:

def Selection(): 
    yield "VEGETABLES FOR THE WEEK:\n" 
    for veg in veg_selection: 
     yield veg.upper() 
    yield "\n" 
    yield "FRUITS FOR THE WEEK:\n" 
    for fruit in fruit_selection: 
     yield fruit.upper() 

Затем, повернувшись в строку тривиальна:

'\n'.join(Selection()) 

Чтобы напечатать результат:

for line in Selection(): 
    print(line) 
Смежные вопросы