Schleife

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.
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

Hallo an alle:

Ich hoffe ihr hatte alle guten Rutsch ins neue Jahr, ich wünsche allen erfolgreichen 2012.

Ich habe insgesamt zwei Problemen mit den Schleifen.
Beim ersten Problem habe ich zwei if Bedienungen.
Dabei treffen beide bei einem Satz zu und es ist unmöglich diese zu verfeinern. Wie kann ich diese so programmieren wenn erste Schleife eintritt, dass diese beim zweiten mal nich wiedergegeben soll???

Code: Alles auswählen

 if b and d:
            print sentence + ' Yes yes'
          if c and s:
            print sentence + ' Yes'
Beim zweiten Problem habe ich auch zwei if Schleifen und eine else Schleife. Dabei wird die else Schleife immer wiedergegeben, wie kann ich das verhindern, weil ich davon ausgehe, dass diese nur ausgegeben wird, wenn beiden if Schleifen davor nicht nicht zutreffen

Code: Alles auswählen

   if p:
                print 'positive'
            if n:
                print 'negative'
            else:
                print 'unclear'
Danke für eure Hilfen
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

awacker hat geschrieben: Beim zweiten Problem habe ich auch zwei if Schleifen und eine else Schleife.
Jedes Jahr aufs neue aber immer wieder schön: Es gibt keine if-Schleifen! :twisted:

Ansonsten musst Du das mal klarer beschreiben und ggf. ein lauffähigs Minimalbeispiel zeigen! Ich steige nicht durch, was Du eigentlich lösen willst; ganz einfach, weil da kein "Problem" steht. Du hast halt verschiedene Bedingungen und je nach dem, welche zutreffen verzweigst Du anders. So what?

Zudem solltest Du die Python-Code-Tags verwenden und vor allem achte auf die Einrückungen! Diese sind in Python ein zentrales Syntax-Element und dürfen nicht verfälscht werden.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

if-Schleifen

Es gibt elif:

Code: Alles auswählen

>>> if True:
...     print 'ja'
... elif True:
...     print 'auch ja'
... 
ja
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

hier ist noch mal ein ausführlicher Code.

Bei dem Tool geht es um erkennung von bestimmten Sätzen:

In diesem Teil des Tools werden die Bedienungen erstellt

Code: Alles auswählen

for sentence in sentences:        
             sent = nltk.pos_tag(word_tokenize(sentence))
             treee= ha.parse(sent)
             tree = hp.parse(sent)
             string = ''.join(str(i) for i in tree)
             stringe= ''.join(str(i) for i in treee)

             casal = re.compile('Causal Effect Cause')
             causal = re.compile('Causal Cause Effect')
             sign = re.compile('cause|affect|affected|enhance|higher|better|more|negatively|sooner|increase|perceived|Perceived|will|may')
             signe = re.compile('may be affected')
             d = signe.search(sentence)
             b = casal.match(stringe, 1, 22)
             c = causal.match(string, 1, 22)
             s = sign.search(sentence)
beide Bedingung treffen aber auf gleichen Satz zu, dabei will ich einfach, dass wenn erste Bedingung zutrifft, soll die zweite Bedingung nicht mehr zutreffen, sondern es soll dann der nächste Satz untersucht werden

Code: Alles auswählen

if b and d:
       print sentence + ' Yes yes'
if c and s:
       print sentence + ' Yes'
Zuletzt geändert von awacker am Dienstag 3. Januar 2012, 20:55, insgesamt 1-mal geändert.
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

nomnom hat geschrieben:if-Schleifen

Es gibt elif:

Code: Alles auswählen

>>> if True:
...     print 'ja'
... elif True:
...     print 'auch ja'
... 
ja
Leider hilft diese mir nicht weiter weil sie das Problem nich löst
BlackJack

@awacker: Und warum hilft ``elif`` nicht weiter?
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

awacker hat geschrieben:
nomnom hat geschrieben:

Code: Alles auswählen

>>> if True:
...     print 'ja'
... elif True:
...     print 'auch ja'
... 
ja
Leider hilft diese mir nicht weiter weil sie das Problem nich löst
Doch, das löst dein Problem. Dass du es nicht erkennst, liegt daran, dass du nicht in der Dokumentation nachgelesen hast, was elif tut.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

awacker hat geschrieben: Leider hilft diese mir nicht weiter weil sie das Problem nich löst
Laut Deinen bisherigen Erklärungen ist `elif` die Lösung.

Wenn das nicht zutrifft, musst Du uns ein lauffähiges Minimalbeispiel liefern und präziser schildern, bei welchen Testdaten welches Ergebnis kommt und welches Du erwartet hättest.

Die Python-Code-Tags hast Du immer noch nicht gefunden?

Der Quellcode ist hinsichtlich der Namen ziemlich verworren... `tree` und `treee`? So etwas führt doch zwangsweise zu Fehlern...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

awacker hat geschrieben:beide Bedienungen treffen aber auf gleichen Satz zu, dabei will ich einfach, dass wenn erste Bedienung zutrifft, soll die zweite Bedienung nicht mehr zutreffen, [...]
Ein paar Postings habe ich es mitgemacht, aber jetzt tut es langsam physisch weh. "Bedienung" ist das, was mit Schürze in einem Café herumläuft. Was du hier eigentlich meinst nennt sich "Bedingung".
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

so das erste Problem könnte ich losen das zweite noch nicht

bei dem zweiten Problem versuche ich die Sätze zu unterscheiden ob diese, ob diese positive Aussage haben oder negative Aussage haben dafür habe ich folgende Stichwörter definiert

Code: Alles auswählen

positive = re.compile('cause|positively|affect|affected|enhance|higher|better|more|increase')
negative = re.compile ('negatively|sooner')
#unclear = re.compile ('perceived|Perceived')
p = positive.search(sentence)
n = negative.search(sentence)
#u = unclear.search(sentence)
früher waren bei mir auch stichwörter für neutrale Sätze definiert, leider habe ich festgestellt dass diese auch in positive oder negativen Aussagen vorkommen.

deswegen wollte ich dass mit else lösen, aber leider wird diese dann nach jedem Satz ausgegeben, verstehe nicht wieso...

Code: Alles auswählen

if p:
   print 'positive'
if n:
   print 'negative'
else:
   print 'unclear'
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Code: Alles auswählen

if p:
   print 'positive'
elif n:
   print 'negative'
else:
   print 'unclear'
Fixed.
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

cool danke hat geklappt, verstehe zwar nicht wieso... aber trotzdem danke
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Lies die Dokumentation und schreib bitte deinen Code nicht so als wären massig Rechtschreibfehler drin.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

awacker hat geschrieben:deswegen wollte ich dass mit else lösen, aber leider wird diese dann nach jedem Satz ausgegeben, verstehe nicht wieso...

Code: Alles auswählen

if p:
   print 'positive'
if n:
   print 'negative'
else:
   print 'unclear'
Dein Code passt nicht zu dem was du da beschreibst. Schauen wir doch mal was du da hast. Auf den ersten Blick sehen wir zwei unabhängige if-Statements. Das erste ist nach dem print 'positive' beendet und hat keinerlei Einfluss auf den folgenden Code. Übrig bleibt also Folgendes:

Code: Alles auswählen

if n:
    print 'negative'
else:
    print 'unclear'
Der else-Zweig wird in jeder Python-Implementierung (eigentlich sogar in jeder mir bekannten Programmiersprache) nur dann ausgeführt, wenn der if-Zweig nicht ausgeführt wird. Du sagst jetzt, dass das bei dir anders ist. Du bekommst also laut deiner Aussage die Ausgaben negative und unclear direkt hintereinander. Normalerweise sollte man da direkt einen Exorzisten holen der ein paar Liter Weihwasser direkt in den Rechner kippt, aber wir können ja noch mal versuchen dem Rätsel auf den Grund zu gehen.

Gib doch mal sowohl im if-Zweig wie auch im else-Zweig außer dem statischen Text zusätzlich noch den Wert von n aus. Mich interessiert ja nun wirklich brennend welcher Wert dafür sorgt, dass diese zwei Programmteile (die laut Definition keinesfalls beide durchlaufen werden können) beide durchlaufen werden.



Ehrlich gesagt vermute ich allerdings eher, dass du ein massives Wissensdefizit bei deinen Programmierkenntnissen hast.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Ehrlich gesagt glaube ich eher, dass er sich nicht konkret genug auszudrücken weiß.

Mich interessiert hingegen besonders brennend wofür der Code gedacht ist. Automatisierte Analyse von Werbematerial?
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

Deswegen lerne ich, um diesen zu decken

aber danke für die Erklärung
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

webspider hat geschrieben:Mich interessiert hingegen besonders brennend wofür der Code gedacht ist. Automatisierte Analyse von Werbematerial?
AFAIK ist das eine Aufgabe bei SPOJ.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

awacker hat geschrieben:Deswegen lerne ich, um diesen zu decken
Genau das tust du ja eben nicht. Es gab schon sehr früh den Hinweis auf elif. Von dir kam dazu nur: "Leider hilft diese mir nicht weiter weil sie das Problem nich löst".

Du lernst nicht. Lernen ist Wissen, nicht Glauben. Begreife, dass die Dokumentation nicht dafür da ist, dass wir sie dir hier vorlesen. Lies selber. Probiere aus. Verwende lieber print als "poor man's debugger" statt einfach nur zu raten. Verstehe. Sammle deine Gedanken. Konzentriere dich - denn wenn du weiter so programmierst wie du schreibst, dann wird das nichts. Respektiere PEP-8. Verinnerliche "The Zen of Python".


Solltest du jetzt auf dir unbekannte Dinge gestoßen sein, dann kannst du den ersten Schritt auf dem Weg zum Selberlernen direkt machen. Es gibt da eine Firma namens Google die seit 1998 Suchdienste im Web anbietet. Vielleicht lassen die dich ja diese Dienste nutzen. Solltest du Google nicht kennen dann google einfach mal danach.
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

/me hat geschrieben:
awacker hat geschrieben:Deswegen lerne ich, um diesen zu decken
Genau das tust du ja eben nicht. Es gab schon sehr früh den Hinweis auf elif. Von dir kam dazu nur: "Leider hilft diese mir nicht weiter weil sie das Problem nich löst".

Du lernst nicht. Lernen ist Wissen, nicht Glauben. Begreife, dass die Dokumentation nicht dafür da ist, dass wir sie dir hier vorlesen. Lies selber. Probiere aus. Verwende lieber print als "poor man's debugger" statt einfach nur zu raten. Verstehe. Sammle deine Gedanken. Konzentriere dich - denn wenn du weiter so programmierst wie du schreibst, dann wird das nichts. Respektiere PEP-8. Verinnerliche "The Zen of Python".


Solltest du jetzt auf dir unbekannte Dinge gestoßen sein, dann kannst du den ersten Schritt auf dem Weg zum Selberlernen direkt machen. Es gibt da eine Firma namens Google die seit 1998 Suchdienste im Web anbietet. Vielleicht lassen die dich ja diese Dienste nutzen. Solltest du Google nicht kennen dann google einfach mal danach.

So genug von dir gehört, ich lebe nicht nur mit Python, wenn du nicht helfen willst brauchst du nicht zu helfen und überhaupt du wolltest mir deutsch bei bringen lerne erstmal drei sprachen dann kann ich mit dir weiter reden...
awacker
User
Beiträge: 13
Registriert: Sonntag 27. November 2011, 22:52

nomnom hat geschrieben:
webspider hat geschrieben:Mich interessiert hingegen besonders brennend wofür der Code gedacht ist. Automatisierte Analyse von Werbematerial?
AFAIK ist das eine Aufgabe bei SPOJ.
Ich schreibe zur Zeit ein Konzept über Kausale Zusammenhänge, diese sollen aus dem Text hervorgehoben werden und analysiert. Das Programm soll die Ursache sowie Wirkung erkennen und dazu bewerten ob es eine positive oder negative Aussage ist. Wenn du weitere Interesse hast, kann ich dir gerne mehr darüber erzählen
Antworten