2013-07-02 9 views
0

J'ai une classe dont le seul but est de trier un tableau qui est donné en paramètre, mais tout d'abord, je reçois une erreur "int pas itérable". Ma question est quelle est cette erreur et je fais mon tri correctement? Merci. Voici ma classe de trieurs appelée par l'autre classe ci-dessous.Python: Trier un tableau

class Sorter: 
    def reverseWackySort(self, vals): 
     i = 0 
     j = 0 
     temp = 0 
     length = len(vals) 
     for i in length: 
      for j in (length -1): 
       if vals[j] > vals[j+1]: 
        temp = vals[j] 
        vals[j] = vals[j+1] 
        vals[j+1] = temp; 
     return vals 

Code -

from Sorter import Sorter 

def TestSorter(): 
    rws = Sorter() 


    nums = [88, 1, 7, 32, 18, 77, 34, 99, 54, 22] 

    print "\nBefore Sort: ", nums 

    rws.reverseWackySort(nums) 

    print "After Sort: {}\n".format(nums) 

TestSorter() 
+1

Pourquoi utilisez-vous une classe en premier lieu? À quoi sert une instance 'Sorter'? Ce n'est pas Java, où vous devez faire de chaque fonction une méthode ... Plus important encore, avez-vous des raisons de croire que la classe est pertinente au problème? Sinon, étant donné que l'explication prend la moitié de votre texte, et la mise en œuvre provoque un 'IndentationError', et il attire plus d'attention que votre problème réel ... peut-être il serait mieux de réduire les choses à un [SSCCE] (http://sscce.org). – abarnert

+0

Y at-il une raison particulièrement bonne pour laquelle vous n'utilisez pas ['trié'] (http://docs.python.org/2/library/functions.html#sorted) ou [' list.sort'] (http: //docs.python.org/2/tutorial/datastructures.html#more-on-lists)? – jason

+1

En fait, c'est faire ses devoirs, en pratiquant ne pas utiliser les méthodes intégrées :) – Binka

Répondre

8

Vous essayez de itérer sur un entier:

for i in length: 
    for j in (length -1): 

Peut-être que vous vouliez itérer sur la plage à la place:

for i in range(length): 
    for j in range(length -1): 

range() produit pour vous une séquence d'entiers allant jusqu'à (mais n'incluant pas) length.

Notez que vous pouvez échanger des variables en place en Python sans intermédiaire temporaire:

vals[j], vals[j+1] = vals[j+1], vals[j] 

et vous n'avez pas besoin de variables « pré-déclaration des » soit; les lignes i = 0, j = 0 et temp = 0 sont redondantes.

+0

Merci. C'était mon problème :) – Binka

+0

Fait, j'ai une question rapide si cela ne vous dérange pas. Je l'ai arrangé pour trier par ordre décroissant à la place. Maintenant que ma liste est triée. Je dois essayer et le trier dans ce modèle. "plus grand -> plus petit -> plus grand -> plus petit ->" etc. Des idées? Par exemple, dans l'autre sens en Java, j'ai été capable de le faire – Binka

+0

Je ne sais pas comment mettre en forme le code ici dans les commentaires – Binka