2017-11-26 2 views
-1

Ich bin irgendwie neu zu Python, da ich ein Jahr bin 10 Student, der GCSE Informatik studiert. Ich versuche, den Blasensortieralgorithmus zu programmieren, und ich stolpere um die TypeError: Can't convert 'int' object to str implicitly, und ich habe keine Ahnung, wie ich sowohl x als auch length unter Verwendung isinstance() überprüft habe und sie beide Ganzzahlen sind. Jemand Hilfe! :)Konnte 'int' nicht in Zeichenkette umwandeln

Hier ist mein Code so weit:

x = 1 
list1 = list(input("What numbers need sorting? Enter them as all one - ")) 
length = len(list1) 
print(list1) 
while True: 
    for i in range(0,length): 
     try: 
      if list1[i] > list1[i+1]: 
       x = list1[i] 
       list1.remove(x) 
       list1.insert(i+1,x) 
       print(list1) 
      if list1[i] < list1[i+1]: 
       x += 1 
       print(list1) 
     except IndexError: 
      break 
    if x == length: 
     print("The sorted list is - ",''.join(list1)) 
     break 
+2

Bitte keine Liste ändern, während über sie iterieren. Außerdem verwenden Sie 'x' hier für zwei Zwecke: um sortierte Instanzen zu zählen und Elemente zu tauschen. –

+0

Sie versuchen, 'x' einen String-Wert hier zuzuweisen:' x = list1 [i] '. Die Liste "list1" ist eine Liste von Strings, keine Ganzzahlen. –

+0

Dieser Code läuft richtig auf Python 3, verwenden Sie diesen Cod auf Python2? –

Antwort

0

der Fehler in dem join(list1) Anruf ist. str.join erwartet ein iterable Strings. Ihr list1 ist jedoch eine Liste von ganzen Zahlen. Also geht es schief.

Sie können den Fehler beheben sich durch die Elemente Abbildung der Liste der str gleichwertig, durch Schreiben:

print("The sorted list is - ",''.join(map(str,list1))

Aber was gesagt wird, der Code ist ziemlich fehleranfällig:

  1. Sie fügen Elemente hinzu und entfernen sie, während Sie über die Liste iterieren.
  2. verwenden Sie x sowohl Elemente zählen, die bestellt werden, und Elemente zu tauschen;
  3. Sie nie zurücksetzen x nach einer Blase Schleife, so dass Sie Blasen zweimal zählen.
  4. außerdem fangen die IndexError ist ziemlich unelegant, da Sie auch den Bereich von i begrenzen können.

Wahrscheinlich eine elegantere Lösung ist:

unsorted = True 
while unsorted: 
    unsorted = False # declare the list sorted 
         # unless we see a bubble that proves otherwise 
    for i in range(len(l)-1): # avoid indexerrors 
     if l[i] > l[i+1]: 
      unsorted = True # the list appears to be unsorted 
      l[i+1], l[i] = l[i], l[i+1] # swap elements 

print(l) # print the list using repr
+0

Wenn Sie sehen, was andere gesagt haben, ändern Sie die 'list (input()' in 'int (input()') und konvertieren Sie sie dann in eine Liste. Verwenden Sie dann Ihre Methode, um Elemente zuzuordnen und Elemente zu tauschen. – Crawley

0

list1 besteht aus ganzen Zahlen gemacht (vermutlich, es hängt davon ab, was der Benutzer tippt in aber der Code geschrieben wird meist als ob es eine Liste erwartet ganze Zahlen), aber Sie verwenden ''.join auf es, als ob es Strings enthält:

>>> ''.join([0]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sequence item 0: expected string, int found 
>>> ''.join(['0']) 
'0' 
>>> 
Verwandte Themen