2017-01-02 1 views
0

Avoir un programme de bulles que je voudrais trier les e-mails dans l'ordre alphabétique. Cependant quand je cours le programme avec la liste je voudrais être trié je reçois l'erreur TypeError: l'objet 'tuple' ne soutient pas l'assignation d'élément. Voici le code:Liste n'étant pas triée par BubbleSort

def BubbleSort(logindata): 
    NoSwaps = 1 
    N = len(logindata) 
    while NoSwaps == 1: 
     Count = 1 
     NoSwaps = 0 
     for Count in range(N-1): 
      if logindata[Count] > logindata[Count+1]: 
       temp = logindata[Count] 
       logindata[Count] = logindata[Count+1] 
       logindata[Count+1]=temp 
       NoSwaps=1 
    return logindata 

if __name__ == "__main__": 
    logindata=["[email protected]","Password1"],["Harry","Password2"],["Jake","Password3"] 
    BubbleSort(logindata) 
    print(logindata) 

Le programme trie une liste sans « mots de passe ». Comment pourrais-je faire fonctionner le code et le trier avec succès.

+1

vous n'êtes pas capturer la valeur de retour de la fonction 'BubbleSort'. Capturez la valeur de retour et imprimez-la. – karthikr

Répondre

2

Avec en supposant que votre algorithme de tri Bubble fonctionne correctement, le problème est que vous ne pouvez pas affecter un objet à tuple, lorsque vous essayez logindata[count] = logindata[count+1], vous pouvez changer logindata-list puis retourner le tuple de logindata, et aussi vous devez saisir retourné logindata puis l'imprimer, tout le code ressemble à ceci:

def BubbleSort(logindata): 
    NoSwaps = 1 
    N = len(logindata) 
    logindata = list(logindata) 
    while NoSwaps == 1: 
     Count = 1 
     NoSwaps = 0 
     for Count in range(N-1): 
      if logindata[Count] > logindata[Count+1]: 
       temp = logindata[Count] 
       logindata[Count] = logindata[Count+1] 
       logindata[Count+1]=temp 
       NoSwaps=1 
    return tuple(logindata) 

if __name__ == "__main__": 
    logindata=["[email protected]","Password1"],["Harry","Password2"],["Jake","Password3"] 
    logindata = BubbleSort(logindata) 
    print(logindata) 
    #(['Harry', 'Password2'], ['Jake', 'Password3'], ['[email protected]', 'Password1']) 
0

Ce code va exécuter et trier la liste. Cependant je ne sais pas si c'est comme ça que tu veux le faire.

def BubbleSort(logindata): 
    NoSwaps = 1 
    N = len(logindata) 

    while NoSwaps == 1: 
     Count = 1 
     NoSwaps = 0 

     for Count in range(N-1): 
      if logindata[Count][0] > logindata[Count+1][0]: 
       temp = logindata[Count][0] 
       logindata[Count][0] = logindata[Count+1][0] 
       logindata[Count+1][0] =temp 
       NoSwaps=1 
       temp = logindata[Count][1] 
       logindata[Count][1] = logindata[Count+1][1] 
       logindata[Count+1][1] =temp 
    return logindata 

if __name__ == "__main__": 
    logindata=["Adam","Password1"],["Harry","Password2"],["Cake","Password3"] 
    BubbleSort(logindata) 
    print(logindata)