Как сделать вывод более читабельным? - PullRequest
0 голосов
/ 24 февраля 2019

Я написал следующий код, который печатает простые числа до нужного числа.

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]   

Есть ли у вас какие-либо предложения о том, как получить желаемый результат?

Ответы [ 5 ]

0 голосов
/ 24 февраля 2019

Чтобы достичь своей цели (иметь форматированный вывод), вы должны внести некоторые изменения в свой код, другими словами, сделать его «более питоническим»:

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))

Я использовал здесь pipe : pformat(list(prime_number(...))) генератор -> список [1, 2, 3] -> текст '[1, 3,]'.Затем я помещаю текст и number2 в строку в формате и отправляю на печать.

Если вы новичок в python и не знакомы с концепцией generators, выможет переписать функцию prime_number для использования простого .append в списке вместо его выдачи, а затем вернуть весь список.

0 голосов
/ 24 февраля 2019

Может быть лучше использовать массив для хранения этих простых чисел, а затем распечатать его.

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)) 
0 голосов
/ 24 февраля 2019

Простая идея заключается в том, чтобы сохранить список простых чисел во встроенном списке 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)
0 голосов
/ 24 февраля 2019

Вы можете использовать два способа печати.Либо сохраните его в списке, а затем распечатайте или распечатайте поочередно.

Подход 1 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)    
0 голосов
/ 24 февраля 2019

Используйте 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)
...