[Tutor] I'm having a small problem with my code

Alan Gauld alan.gauld at yahoo.co.uk
Fri May 24 05:30:37 EDT 2019


Forwarding to the list.
Always use Reply-All or Reply-List when responding to the list.
Otherwise it only goes to the member who posted.

Alan G.


On 24/05/2019 10:20, David Lifschitz wrote:
> Hi.
> I'm learning the processes of python so I'm trying to figure out how
> to sort it manually.
>
> On Fri, May 24, 2019 at 3:00 AM Alan Gauld via Tutor <tutor at python.org
> <mailto:tutor at python.org>> wrote:
>
>     On 23/05/2019 13:16, David Lifschitz wrote:
>
>     > The next job of the code is to sort the list of numbers that
>     were inputted
>     > in an ascending fashion.
>
>     You are aware that Python lists have a built in sort method?
>     It will be more efficient than anything you can create
>     yourself in Python. Assuming you know that and decided
>     to write a sort routine for fun....
>
>
>     > There is no error from the code, however, when I run the code
>     the first
>     > inputted number stays in its place and doesn't get sorted with
>     the rest of
>     > the numbers.
>     > Any advice???
>
>     Yes, see below:
>
>     > emptyList = []
>
>     This is a terrible name since it becomes misleading the
>     instant you put anything into it!
>
>     number_list or similar would be more accurate.
>     Or even just 'data'....
>
>     > nOFN = int(input("how many numbers do you want to sort: "))
>     >
>     > for x in range(nOFN):
>     >?? ?? ??number1 = int(input("input number: "))
>     >?? ?? ??emptyList.append(number1)
>
>     You could have used a list comprehension:
>
>     emptyList = [int(input("input number: ")) for n in range(nOFN)]
>
>     Now onto the problem sort code
>
>     > firstElement = emptyList[0]
>
>     Why did you do this? You never refer to firstElement again...
>
>     > n = len(emptyList)
>     > for j in range(1, n):
>     >?? ?? ??if emptyList[j-1] > emptyList[j]:
>     >?? ?? ?? ?? ??(emptyList[j-1], emptyList[j]) = (emptyList[j],
>     emptyList[j-1])
>
>     Consider the first case, j=1
>
>     If the first element is greater than the second
>     you swap them. Otherwise you leave them in place.
>
>     The loop now considers elements 2 and 3.
>     If 2 >3 you reverse them, otherwise move on.
>     But if element 3 is less than element 1 you never
>     go back to move it to the top.
>
>     Consider this example - [3,2,1]
>
>     1st iteration?? ??-> 2,3,1
>     2nd iteration?? ??-> 2,1,3
>
>     Loop ends.
>     But you never swapped 1 and 2 after(or during) the last iteration.
>
>     Your sort routine is fundamentally flawed. You need a rethink.
>     But not too much because the built in sort will nearly always be
>     preferred!
>
>     Incidentally, creating working sort algorithms is one of the
>     hardest things to get right in computing. It is one of
>     those things that can seem right then one specific pattern
>     will break it.
>
>     -- 
>     Alan G
>     Author of the Learn to Program web site
>     http://www.alan-g.me.uk/
>     http://www.amazon.com/author/alan_gauld
>     Follow my photo-blog on Flickr at:
>     http://www.flickr.com/photos/alangauldphotos
>
>
>     _______________________________________________
>     Tutor maillist?? -?? Tutor at python.org <mailto:Tutor at python.org>
>     To unsubscribe or change subscription options:
>     https://mail.python.org/mailman/listinfo/tutor
>
> -- 
> Sent from an email account


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos



More information about the Tutor mailing list