Seite 1 von 1
Hilfe bei Haystack stringfinder
Verfasst: Sonntag 24. August 2008, 18:32
von SkullByte
Hallo Python begeisterte
Also unsere Com. macht immer so Codingaufgaben.. zum lernen einer Sprache.
Nun hänge ich bei einer Aufgabe fest und weis nicht wie ich es lösen soll...
Also nicht wundern wenn der Code ziehmlich nach Anfänger aussieht...
Lange Rede kurzer Sinn.. ALso wenn der User einen Satz eingibt und das Wort welches in dem Satz gefunden werden soll.. weis ich nicht genau wie das Programm selbständig die Strings suchen soll. Wenn ich als Hallo Hallo Hallo eingebe und als Suchwort Hallo... schreibt er zwar das Hallo 3x vorkommt aber wie löse ich das er mir auch die Position angiebt... Also:
Das erste Hallo an Position von bis
Das zweite Hallo an Position von bis
Das dritte ....
usw...
Hier mein Code:
Code: Alles auswählen
print ' !Zum beenden "ende" eingeben! \n\n\n'
while True:
text = raw_input('Bitte Text eingeben: ')
if text == 'ende':
print 'Programm beended!'
break
wort = raw_input('Jetzt das gewuenschte Wort: ')
many = text.count(wort)
if many == 1 or many > 1:
stelle = text.index(wort)
bis = len(wort)# + (stelle -1)
finden = text.find(wort, bis)
print 'Das Wort "'+wort+'" kommt %d ' 'mal im Satz vor.' % (many)
print 'Es befindet sich an %dter bis %dter Stelle\n' % (stelle, finden)
Verfasst: Sonntag 24. August 2008, 19:09
von epsilon
wie löse ich das er mir auch die Position angiebt
str.find() gibt die Position des substrings oder -1 wenn nichts gefunden wurde zurück.
Verfasst: Sonntag 24. August 2008, 19:33
von SkullByte
Code: Alles auswählen
text = 'hallo hallo hallo'
wort = 'hallo'
finden = str.find(text, wort)
finden2 = text.find(wort)
als Ergebnis würde beidesmale 0 rauskommen... das ist das womit ich ja nichts anfangen kann.
Hast du vielleicht ein paar Infos mehr für mich bzgl. deines Gedankenganges... ?
Verfasst: Sonntag 24. August 2008, 19:45
von Leonidas
Letztendlich gehst du den String durch und findest erstmal den ersten Treffer und dessen Ende. Dann schneidest du vom String den ersten Treffer weg und suchst nochmal im rest. Dies wiederholst du, bis im String keine Treffer mehr sind.
Verfasst: Sonntag 24. August 2008, 19:47
von BlackJack
0 ist ja auch richtig. Wenn Du die anderen 'hallo's finden willst, schau doch mal in die Doku was `str.find()` noch für Argumente kennt. Die Variante in Zeile 4 funktioniert zwar, solltest Du aber nicht verwenden.
Ich würde ja das `re`-Modul dafür verwenden:
Code: Alles auswählen
import re
from itertools import count, izip
def main():
text = 'Hallo Du Da! Hallo Welt! Hallo'
wort = 'Hallo'
matches = list(re.finditer(re.escape(wort), text))
print 'Das Wort %r kommt %dmal im Text vor.' % (wort, len(matches))
for i, (start, end) in izip(count(1), (m.span() for m in matches)):
print ('Das %d. %r befindet sich an %dter bis %dter Stelle'
% (i, wort, start, end))
Verfasst: Sonntag 24. August 2008, 20:30
von SkullByte
Ok die Lösung von BlackJack funktioniert... allerdings sind die meisten Funktionen und deren Bedeutung die du verwendest mir völlig fremd...
Dazu gehören:
itertools
izip
re.escape
for i, (start, end) in izip(count(1), (m.span() for m in matches)):
<-- das sowas geht hätte ich mir auch nicht träumen lassen...
Ich suche ja keine komplette Python lehrstunde... aber ist die Lösung (für meine Wennigkeit) doch (noch) sehr kompliziert.
Verfasst: Sonntag 24. August 2008, 21:22
von epsilon
SkullByte hat geschrieben:[...] allerdings sind die meisten Funktionen und deren Bedeutung die du verwendest mir völlig fremd...
[...]
Ich suche ja keine komplette Python lehrstunde... aber ist die Lösung (für meine Wennigkeit) doch (noch) sehr kompliziert.
Hier mal ein paar Links, die du dir anschauen solltest:
Umfangreiche Referenz-"Karte" zu Python (Wenn ich Information zu einem Befehl suche, schau ich hier zu erst nach)
Infos zu den Modulen in der Standardbibliothek:
http://effbot.org/librarybook/
http://docs.python.org/lib/lib.html
Der Rest der offiziellen Python-Dokumentation
http://docs.python.org/
Außerdem kannst du in der Python-Shell/in einem Skript help() verwenden, um Information über Befehle/Module/usw. zu bekommen ('help(Name/$Objekt_von_Name)'). Unter Linux gäbe es auch noch pydoc (keine Ahnung, ob das auch für Windows verfügbar ist). Das Ganze ist praktisch, wenn du Information zu installierten Module suchst, die nicht in der Standardbibliothek enthalten sind.
Falls du ein Einsteiger-freundliches Tutorial suchst, ist "A Byte of Python" vermutlich etwas für dich:
Original:
http://www.swaroopch.com/byteofpython/
deutsche Übersetzung:
http://abop-german.berlios.de/
Falls du bereits ein wenig programmieren kannst (und englisch kein Problem darstellt), könnte "Dive Into Python" ebenfalls gut geeignet sein (bzw. besser geeignet sein):
http://diveintopython.org/
Python Gotchas:
http://www.ferg.org/projects/python_gotchas.html
http://zephyrfalcon.org/labs/python_pitfalls.html
http://www.onlamp.com/pub/a/python/2004 ... ython.html
PEP 8 / Style Guide for Python Code:
Original:
http://www.python.org/dev/peps/pep-0008/
deutsche Übersetzung: [wiki]PEP 8 (?ersetzung)[/wiki]
Verfasst: Sonntag 24. August 2008, 21:36
von SkullByte
Ok vielen Dank!
Werde mir alle links gut anschauen und auch durcharbeiten...
Verfasst: Sonntag 24. August 2008, 22:41
von epsilon
Ich hab' nochmal ein paar nützliche Links oben reineditiert.
Verfasst: Montag 25. August 2008, 21:55
von SkullByte
Ich will ja nicht undankbar erscheinen... Bin froh für jede Hilfe ! Besonders wenn einer mir den Tip gibt der schon weiss wie es geht...
Aber ich suche ein bestimmtes buch " Wie ein Informatiker denken Lernt" oder wie das genau heisst ... haste den auch in deiner Schatztruhe?
Besten Dank Sascha
Verfasst: Montag 25. August 2008, 22:05
von Lonestar

vielleicht solltest du vor dem denken lernen wie ein Informatiker kurz lernen wie man
Suchmaschienenbedient?
Verfasst: Montag 25. August 2008, 22:09
von SkullByte
Ok.. daran habe ich gerade nicht gedacht.. ich danke dir.