luciferchase
luciferchase

Reputation: 559

How to make output more readable?

I wrote the following code which prints prime numbers up to the desired number.

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)    

The output I get is similar to the following one, which becomes very cumbersome for a list with many numbers.

2   
3  
5  
7  

The output I want is similar to the following one.

[2, 3, 5, 7]   

Do you have any suggestion on how to get the desired output?

Upvotes: 1

Views: 718

Answers (5)

Mohit
Mohit

Reputation: 1295

A simple idea would be to store the list of primes in a python built-in list and then after all simple print it in your favorite format! As simple as that.

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)

Upvotes: 1

skaul05
skaul05

Reputation: 2334

You can take two ways to print. Either store it in a list and then print or print it serially.

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

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

Upvotes: 0

Sergey Belash
Sergey Belash

Reputation: 1471

To achieve your goal (have formatted output) you have to introduce some changes to your code, in other words, make it "more 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))

What I used here is a pipe: pformat(list(prime_number(...))) generator -> list [1, 2, 3] -> text '[1, 3, ]'. Then I put the text and number2 into a formatted string, and sent to print.

If you are beginner in python and don't familiar with the generators concept, you may rewrite the prime_number function to use a simple .append to a list instead of yielding it and then return the whole list.

Upvotes: 3

Eric
Eric

Reputation: 56

It could be better if using an array to store those prime numbers, then print it out.

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

Upvotes: 1

U13-Forward
U13-Forward

Reputation: 71580

Use append to a new list:

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)

Upvotes: 2

Related Questions