Guten Abend,
auch wenn es sich komisch anfühlt, seinen ersten Post direkt mit einer (wahrscheinlich durchaus simplen) Frage zu schreiben,
komme ich mit meinem Code hier nicht weiter. Der ist auch keine Hausaufgabe, wir hatten heute die letzte Stunde Informatik vor den Ferien (und haben nur die Kursarbeit raus bekommen, 15Pkt )
Vorher kurz:
Ich habe eine Liste a = [4, 7, 11, 18, 19, 23, 27, 48].
Ich gebe eine ganze positive Zahl ein, und mein Skript soll für mich herausfinden ob die Zahl in der Liste vorhanden ist oder nicht.
Mithilfe einer while-Schleife "halbiert" das Skript die Liste immer weiter bis ich entweder zu der eingegebenen Zahl komme oder die Liste leer ist.
So weit bin ich bis jetzt: http://www.python-forum.de/pastebin.php?mode=view&s=410
Ich finde jedoch mein Problem nicht und weiß auch nicht weiter, ich weiß natürlich dass ich das einfach mit "in" prüfen könnte aber ich will ja richtig mit Listen arbeiten lernen. Hoffentlich kann mir hier jemand weiter helfen. Danke im Voraus!
"Ist x in der Liste?"-Problem
Die Fehlermeldung ist doch eindeutig! (`int` hat keine Länge)
Zum Prüfen, ob die Eingabe ein Element der Liste ist, reicht doch ein einfaches:
Warum dieses Stückwerk mit Listenlänge...?
Zum Prüfen, ob die Eingabe ein Element der Liste ist, reicht doch ein einfaches:
Code: Alles auswählen
if x in a:
งูหลาม
'int' braucht doch auch gar keine Länge zu haben, es soll ja nur mit den Listeneinträgen verglichen werden, oder überseh ich da was?ngulam hat geschrieben:Die Fehlermeldung ist doch eindeutig! (`int` hat keine Länge) (....)
Genau das wollte ich nicht verwenden. Es ist zwar nicht falsch, aber ich wollte mir mit diesem Skript die Art der binären Suche verinnerlichen.ngulam hat geschrieben:Zum Prüfen, ob die Eingabe ein Element der Liste ist, reicht doch ein einfaches:
Warum dieses Stückwerk mit Listenlänge...?Code: Alles auswählen
if x in a:
Der Code ist damit zwar typisches "mit Kanonen auf Spatzen schießen", aber ich glaube das ist die einfachste Methode um mir die Binäre Suche einzuprügeln.
Zu "Sirius3":
Die Python Shell gibt mir einen IndexError, "list index out of range".
Ich hab jetzt mal eine kleine Debug-Zeile eingebaut, die mir immer anzeigt wie der Stand der Liste ist.
Nun, anscheinend hatte ich vergessen, zu prüfen, ob in meiner Liste überhaupt noch eine Zahl drin steht.
Versucht habe ich jetzt, immer, wenn die Zahl nicht gefunden wurde und geprüft wird ob die Stelle kleiner/größer x ist,
soll mein Skript prüfen ob die Liste noch eine Zahl enthält.
Das habe ich mit "if len(a) != 0:" probiert, sah dann so aus:
Code: Alles auswählen
if len(a) != 0:
a = a[:len(a) //2] # Liste wird linksseitig halbiert
else:
print(x," ist nicht vorhanden.")
t = False # Liste leer
Wenn ich das ganze dann ausprobiere spuckt mein Programm trotzdem das aus:
Ganze positive Zahl 14
%DEBUG% a = [4, 7, 11, 18, 19, 23, 27, 48]
%DEBUG% a = [4, 7, 11, 18]
%DEBUG% a = [11]
%DEBUG% a = []
Traceback (most recent call last):
File "F:\x in a.py", line 15, in <module>
if a[len(a)//2] == x:
IndexError: list index out of range
Edit: Hab ein neues Snippet gemacht, damit man das auch mit verfolgen kann; http://www.python-forum.de/pastebin.php?mode=view&s=411
Mit ein bisschen Hilfe von der Standardbibliothek:
Code: Alles auswählen
from bisect import bisect_left
a = [4, 7, 11, 18, 19, 23, 27, 48]
b = 14
if a and a[bisect_left(a, b)] == b:
print b, 'ist in', a, 'enthalten'