Hilfe bei Haystack stringfinder

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SkullByte
User
Beiträge: 7
Registriert: Freitag 22. August 2008, 21:16

Sonntag 24. August 2008, 18:32

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)
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Sonntag 24. August 2008, 19:09

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.
SkullByte
User
Beiträge: 7
Registriert: Freitag 22. August 2008, 21:16

Sonntag 24. August 2008, 19:33

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... ?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 24. August 2008, 19:45

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Sonntag 24. August 2008, 19:47

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))
SkullByte
User
Beiträge: 7
Registriert: Freitag 22. August 2008, 21:16

Sonntag 24. August 2008, 20:30

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.
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Sonntag 24. August 2008, 21:22

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]
Zuletzt geändert von epsilon am Sonntag 24. August 2008, 22:39, insgesamt 1-mal geändert.
SkullByte
User
Beiträge: 7
Registriert: Freitag 22. August 2008, 21:16

Sonntag 24. August 2008, 21:36

Ok vielen Dank!
Werde mir alle links gut anschauen und auch durcharbeiten...
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Sonntag 24. August 2008, 22:41

Ich hab' nochmal ein paar nützliche Links oben reineditiert.
SkullByte
User
Beiträge: 7
Registriert: Freitag 22. August 2008, 21:16

Montag 25. August 2008, 21:55

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
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Montag 25. August 2008, 22:05

:roll: vielleicht solltest du vor dem denken lernen wie ein Informatiker kurz lernen wie man Suchmaschienenbedient?
SkullByte
User
Beiträge: 7
Registriert: Freitag 22. August 2008, 21:16

Montag 25. August 2008, 22:09

Ok.. daran habe ich gerade nicht gedacht.. ich danke dir.
Antworten