【问题标题】:Assigning function print output to string variable将函数打印输出分配给字符串变量
【发布时间】:2016-04-08 09:14:49
【问题描述】:

我有以下函数,它遍历两个列表并打印出选择的蔬菜和水果。

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 循环?任何帮助都非常感谢。

【问题讨论】:

    标签: python list


    【解决方案1】:

    其中一种解决方案是将所有迭代字符串存储到容器中,然后将它们存储在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 是具有正确换行符的跨操作系统常量。

    用于分隔(或者更确切地说,终止)行的字符串 当前平台。这可能是单个字符,例如 '\n' 表示 POSIX 或多个字符,例如 Windows 的 '\r\n'。不要 在编写以文本形式打开的文件时,使用 os.linesep 作为行终止符 模式(默认);在所有平台上都使用单个 '\n'。

    另外,半相关的问题:Good way to append to a string

    【讨论】:

      【解决方案2】:

      可能最简单的方法是添加一个额外的步骤,将文本附加到您需要的变量中。见下文:

      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 字符串,而不是打印每一行。

      【讨论】:

        【解决方案3】:

        您可以像这样连接到单个字符串变量:

        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
        

        【讨论】:

          【解决方案4】:

          把你的函数变成生成器:

          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)
          

          【讨论】:

            猜你喜欢
            • 2015-04-11
            • 1970-01-01
            • 2017-09-28
            • 1970-01-01
            • 2021-12-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多