sarah
sarah

Reputation: 3

Simple Python Assistance

two fixes:, main should sort the returned list, and the for loop should print all numbers on one line.

This is the question I am answering, Thought I got it all but the two errors I have explained above need help:

  1. In main, generate a random integer that is greater than 5 and less than 13. print this number on its own line.
  2. Call the makelist function with the random integer as sole argument.
  3. Make an empty list inside the makelist function.
  4. Use a loop to append to the list a number of elements equal to the random integer argument. All new list elements must be random integers ranging from 1 to 100, inclusive. Duplicates are okay.
  5. Return the list to main.
  6. Back in main, catch the returned list and sort it.
  7. Finally, use a for loop to display the sorted list elements, all on one line, separated by single spaces.

    List size will be 7

    Here is the sorted list:

    8 28 35 41 51 62 72

    ANOTHER SAMPLE OUTPUT

    List size will be 10

    Here is the sorted list:

    3 3 9 20 36 43 48 50 81 93

Any help with my code is very much appreciated. Im a beginner and have tried tutorials.

Here is my code

import random   

def main():

    random_int = random.randint(6, 12)
    print (random_int)

    elements = makelist(random_int)
    for n in sorted(elements):
        print (n,)

def makelist(random_int):

    number_list = []
    for count in range(random_int):
        number_list.append(random.randint(1, 101))
    return number_list  

main()

Upvotes: 0

Views: 111

Answers (3)

Paul Rooney
Paul Rooney

Reputation: 21619

Do it like this

import random   

def main():

    random_int = random.randint(6, 12)
    print ('List size will be %d' % random_int)

    elements = makelist(random_int)
    print('Here is the sorted list:')
    print( ' '.join(map(str, sorted(elements))) )

def makelist(random_int):

    number_list = []
    for count in range(random_int):
        number_list.append(random.randint(1, 100))
    return number_list  

main()

The line of interest is

print( ' '.join(map(str, sorted(elements))) )

Which does a few things.

sorted(elements)

Return a sorted copy of the list.

map(str, sorted(elements))

Map (convert) the integer elements to strings. This just calls str on each element in the list. Its needed because join requires an iterable of strings.

' '.join(map(str, sorted(elements)))

This funny looking syntax will create one long string out of all the values. It will use ' ' (space character) as the value between each element and will join all the elements which have been sorted and converted to strings into one long string which can be printed.

Upvotes: 0

user3636636
user3636636

Reputation: 2499

I would sort the list in the makelist function. In addition to this, you should remove the comma from print (n,). Otherwise your code pretty much solves the problem. Just be more specific with your question next time.

Edit: Calling each print() on each element on the list will print each element on a newline (Vertically). Since you needed to get rid of the commas, ' '.join(map(str, sorted(elements)) will convert the list to a string, with each element separated by an empty space.

import random   

def main():
    random_int = random.randint(6, 12)
    print ("The list size will be %d"  %random_int)
    elements = makelist(random_int)
    print("This sorted list is %s"  %' '.join(map(str, sorted(elements))) )

def makelist(random_int):
     number_list = []
     for count in range(random_int):
         number_list.append(random.randint(1, 100))
     return number_list 

Upvotes: 0

Dleep
Dleep

Reputation: 1065

print (n,) if you want to print your items like your samples output, Your comma placement is where the problem lies. You see, parenthesis in python are used both for enclosing mathematical / logical expressions and for tuples. What happens if you want a 1-item tuple? (n) is the same as n. To solve that, python understands (n,)as a tuple.

So to print your items like you want, use:

    for n in sorted(elements):
        print (n),
    print() # This last one is only to go down a line 
            # for any further prints

Edit: also, if you want a random_intbetween 1 and 100, use random.randint(1, 100), not 101

Upvotes: 2

Related Questions