Python: hier Finden Sie das längste Wort in einem string
Ich bin auf eine Prüfung vorbereiten, aber ich habe Schwierigkeiten mit einer Vergangenheit-Papier in Frage. Gegeben ein string, der einen Satz, den ich finden will, das längste Wort in diesem Satz und Rückkehr, das Wort und seine Länge. Edit: ich brauchte nur zurück die Länge, aber ich Schätze Ihre Antworten auf die ursprüngliche Frage! Es hilft mir, mehr zu lernen. Danke.
Beispiel: string = "Hallo ich mag Kekse". Mein Programm soll dann die Rückkehr von "Cookies" und die Länge 7.
Nun die Sache ist die, dass ich nicht erlaubt, jede Funktion aus der Klasse String für eine volle Punktzahl und eine volle Punktzahl, kann ich nur gehen durch die Kette einmal. Ich bin nicht berechtigt, die Verwendung von string.split() (sonst würde es kein problem sein) und die Lösung sollte nicht zu viele for-und while-Anweisungen. Die strings enthält nur Buchstaben und Leerzeichen und Wörter getrennt durch ein Leerzeichen.
Irgendwelche Vorschläge? Ich bin verloren also ich habe keinen code.
Dank.
BEARBEITEN: tut mir Leid, habe ich falsch verstanden, die Klausur-Frage. Sie müssen nur zurück die Länge das längste Wort, es scheint, nicht die Länge + das Wort.
EDIT2: Okay, mit Ihrer Hilfe, ich denke ich bin auf etwas...
def longestword(x):
alist = []
length = 0
for letter in x:
if letter != " ":
length += 1
else:
alist.append(length)
length = 0
return alist
Aber es gibt [5, 1, 4] für "Hello I like cookies", also es findet "cookies". Warum? EDIT: Ok, ich habe es. Es ist, weil es keine mehr "" nach dem letzten Buchstaben des Satzes und daher nicht Anhängen der Länge. I fixed it so, jetzt ist es zurück [5, 1, 4, 7] und dann habe ich einfach den maximalen Wert.
Nehme ich mit, die Listen aber nicht .split() ist in Ordnung? Er sagte nur, dass die Funktionen von "String" nicht durften oder Listen sind Teil des strings?
- Technisch, können Sie importieren Sie die string-Modul und Aufruf von split aus gibt es da würden Sie nicht benutzen, von der string-Klasse. Vielleicht ist das ein test von wissen, die Dokumentation.
- Wenn Sie testen nur, dass der Brief nicht
" "
, wird es nicht mit Satzzeichen:Hello, I like cookies!"
. Du solltest besser testen, daß das Zeichen kein Buchstabe ist. - mein bad wieder. Er sagt, bei der Prüfung der Frage, dass "Der text enthält nur Buchstaben und Leerzeichen, und jedes Wort wird getrennt durch ein Leerzeichen". Dann ist es gut?
- Ja, in diesem Fall funktioniert es: Ihr test ist auch schneller als meine, und einfacher als die Verwendung von regulären Ausdrücken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suche nach max in einem Durchgang ist einfach:
Aber in Ihrem Fall, Sie müssen die Worte zu finden. Denken Sie daran, das Zitat (Attribut J. Zawinski):
Neben der Verwendung von regulären Ausdrücken, können Sie einfach überprüfen, dass das Wort Buchstaben hat. Ein Erster Ansatz ist durch die Liste gehen und erkennen von start-oder Ende der Wörter:
Letzte Möglichkeit ist das aufteilen der Wörter in einer generator-und finden das max. was es ergibt (hier habe ich die
max
- Funktion):"I like cookies."
mit Satzzeichen). Ich bearbeitet mit einem fix.Können Sie versuchen, die reguläre Ausdrücke verwenden:
Nur nach Gruppen von nicht-whitespace-Zeichen, dann finden Sie die maximale Länge von:
split
ist nicht erlaubt.len
Ist es ganz einfach:
IN [48]:
long_word('a bb ccc dddd')
Aus[48]:
'dddd'
Für python 3. Wenn die beiden Wörter im Satz ist die gleiche Länge, dann wird es wieder das Wort, das zuerst angezeigt wird.
Sehen kann ich mir vorstellen, dass einige andere alternativen. Reguläre Ausdrücke kann wohl nicht viel von der Spaltung Wörter, die Sie benötigen, um zu tun. Dies könnte eine einfache option, wenn Sie verstehen, regexes.
Eine alternative ist die Behandlung der Zeichenfolge als Liste, iteriert es verfolgen der index, und suchen in jedem Charakter, um zu sehen, wenn Sie die Endung eines Wortes. Dann müssen Sie nur halten Sie das längste Wort (längste index-Differenz) und finden Sie Ihre Antwort.
Reguläre Ausdrücke zu sein scheint, ist Ihre beste Wette. Der ersten Verwendung
re
zur Spaltung der Satz:\S+
sieht für alle nicht-whitespace-Zeichen und stellt Sie in einer Liste:Finden Sie nun die Länge der Liste element mit dem längsten Wort und verwenden Sie dann die Liste Verständnis, um das element abzurufen, selbst:
Diese Methode verwendet nur eine
for
- Schleife, keine Methoden in derString
Klasse, streng greift auf jedes Zeichen nur einmal. Sie müssen möglicherweise um es zu ändern, je nachdem, welche Zeichen zählen als Teil eines Wortes.Gegeben, die Sie nicht verwenden dürfen
string.split()
ich denke, mit einem regexp zu tun, die genau die gleiche Sache, die sollten ausgeschlossen werden, wie gut.Ich möchte nicht, lösen Sie Ihre übung für Sie, aber hier sind ein paar Hinweise:
Mein Vorschlag ...
Ausgabe - Unabhängigkeit