【问题标题】:How to make output more readable?如何使输出更具可读性?
【发布时间】:2019-02-24 09:38:05
【问题描述】:

我编写了以下代码,它将素数打印到所需的数字。

def prime_number(number1):
    for desired_num in range(1,int(number1)+1):
       if desired_num > 1:
          for i in range(2,desired_num):
              if (desired_num % i) == 0:
              break
          else:
              print(desired_num)
number2 = int(raw_input ("Enter any number :- "))
print "Prime numbers between 1 and", number2, "are :-"
prime_number(number2)    

我得到的输出类似于下面的,对于一个有很多数字的列表来说变得非常麻烦。

2   
3  
5  
7  

我想要的输出与下面的类似。

[2, 3, 5, 7]   

您对如何获得所需的输出有任何建议吗?

【问题讨论】:

  • 总是有print(desired_num, end=' ')。丑陋的黑客你可能想要的东西。我只是重新阅读了代码。删除函数中的打印,并返回一个列表,以便 prime_number 返回一个迭代器。
  • print(desired_num, end=' ') is Python 3 — OP 已经标记了他们的问题 [python-2.7] 并且在他们展示的代码中有一个 print 作为语句行......在 Python 2 的上下文中更相关的答案是print desired_num,(注意结尾的逗号)。

标签: python python-2.7 output readability


【解决方案1】:

为了实现您的目标(有格式化的输出),您必须对您的代码进行一些更改,换句话说,使其“更 Pythonic”:

import time
from pprint import pprint, pformat
from typing import Iterable


def prime_number(number1):
    """
    generator
    :rtype: Iterable[int]
    :type number1: int
    """
    for desired_num in range(1, int(number1) + 1):
        if desired_num > 1:
            for i in range(2, desired_num):
                if (desired_num % i) == 0:
                    break
            else:
                yield desired_num


number2 = int(raw_input("Enter any number :- "))
primes = pformat(list(prime_number(number2)))
print("Prime numbers between 1 and {} are :- {}".format(number2, primes))

我在这里使用的是 管道pformat(list(prime_number(...))) generator -> list [1, 2, 3] -> text '[1, 3, ]'。 然后我将文本和number2 放入一个格式化字符串,并发送到打印。

如果您是python 初学者并且不熟悉generators 概念,您可以重写prime_number 函数以使用简单的.append 到一个列表而不是产生它,然后返回整个列表。

【讨论】:

  • 如果我输入一个数字 >= 73,它不会给出想要的结果。
【解决方案2】:

append 用于新列表:

import time
def prime_number(number1):
    l=[]
    for desired_num in range(1,int(number1)+1):
       if desired_num > 1:
          for i in range(2,desired_num):
              if (desired_num % i) == 0:
              break
          else:
              l.append(desired_num)
    print(l)
number2 = int(raw_input ("Enter any number :- "))
print "Prime numbers between 1 and", number2, "are :-"
start = time.time()
prime_number(number2)
print(time.time() - start)

【讨论】:

    【解决方案3】:

    如果使用数组来存储这些素数,然后打印出来会更好。

    import time
    
    def prime_number(number1):
        primes = []
        for desired_num in range(1,int(number1)+1):
           if desired_num > 1:
              for i in range(2,desired_num):
                  if (desired_num % i) == 0:
                      break
              else:
                  primes.append(desire_num)
        return primes
    
    number2 = int(raw_input ("Enter any number :- "))
    print "Prime numbers between 1 and", number2, "are :-"
    print(prime_number(number2)) 
    

    【讨论】:

    • 在追加语句中将变量更改为desired_num
    【解决方案4】:

    一个简单的想法是将素数列表存储在 python 内置列表中,然后以您喜欢的格式简单地打印出来!就这么简单。

    def prime_number(number1):
        primes = [] # An empty list here, that will be populated with primes!
        for desired_num in range(1,int(number1)+1):
           if desired_num > 1:
              for i in range(2,desired_num):
                  if (desired_num % i) == 0:
                      break
              else:
                  primes.append(desired_num)
        print "[" + ",".join(map(str, primes)) + "]" 
    
    number2 = int(raw_input ("Enter any number :- "))
    print "Prime numbers between 1 and", number2, "are :-"
    primes = prime_number(number2)
    

    【讨论】:

    • @skaul05 对不起,这是我的错误,感谢您的编辑
    【解决方案5】:

    您可以采用两种方式进行打印。将其存储在列表中,然后打印或连续打印。

    方法一 Use list and then print it as comma separated:

    import time
    def prime_number(number1):
        output_list = list()
        for desired_num in range(1,int(number1)+1):
            if desired_num > 1:
               for i in range(2,desired_num):
                   if (desired_num % i) == 0:
                       break
               else:
                   output_list.append(desired_num)
        return output_list
    number2 = int(raw_input ("Enter any number :- "))
    print "Prime numbers between 1 and", number2, "are :-"
    output_list = prime_number(number2)
    print (",".join(output_list))
    

    方法2 Print the numbers in function itself serially using end:

    import time
    def prime_number(number1):
        for desired_num in range(1,int(number1)+1):
            if desired_num > 1:
               for i in range(2,desired_num):
                   if (desired_num % i) == 0:
                       break
               else:
                   print(desired_num,end = " ")
      number2 = int(raw_input ("Enter any number :- "))
      print "Prime numbers between 1 and", number2, "are :-"
      prime_number(number2)    
    

    【讨论】:

    • 我认为 else 条件应该是 FOR LOOP,而不是 if 条件。在方法 1 中,在最后一个 print 语句中省略逗号 ("," ) 会给出所需的输出,但在方法 2 中结束会在 python 2.x 中给出错误
    • @Lucifer 说得对。编辑解决方案谢谢!!
    猜你喜欢
    • 2017-11-07
    • 2014-12-24
    • 2011-08-02
    • 2022-11-11
    • 2019-09-29
    • 2010-11-29
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多