Problem mit logischer Aufgabe.

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
CybotDNA
User
Beiträge: 5
Registriert: Freitag 7. Juni 2013, 00:36

Hallo liebe Forumnutzer,

auf meiner erst inneren und dann nach Google gewandten Suche bin ich auf dieses Forum gestoßen.
Ich überlege nach einer Möglichkeit in Python folgendes Ereigniss zu beschreiben:


Wenn erst Ereigniss 1 und dann Ereigniss 2 eintritt möchte ich Wert A erhalten.
Wenn erst Ereigniss 2 und dann Ereigniss 1 eintritt möchte ich Wert B erhalten.


Die Ereignisse können auch leicht zeitversetzt sein.
Die Werte A und B können auch bspw. durch True und False ersetzt werden.


Um es sich besser vorstellen zu können:

Es gibt 2 Buttons das eine heißt 1 das andere 2.
wenn ich nun erst 1 und dann 2 drücke erhalte ich Wert A, wenn ich sie andersrum drücke erhalte ich Wert B.
______________
Weitere Gedanken:

Nach jeder Werteausgabe soll sich der Algorithmus resetten.
Ggf. soll auch eine Reset oder ein Wert C ausgegeben werden wenn das drücken des zweiten Buttons zu lange dauert.

Aber wenn ihr mir bei der Grundidee helfen könnt, knobel ich natürlich auch erstmal gerne selber weiter :)
______________

Ich hoffe ich bin mit meiner Frage hier im richtigen Forum gelandet :)

MfG
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo CybotDNA,
Dein Programm hat eine Vergangenheit, die es sich merken muss, also brauchst Du eine Variable, die sich den Zustand merkt (kein Ereignis, E1, E2, usw.).

Grüße
Sirius
CybotDNA
User
Beiträge: 5
Registriert: Freitag 7. Juni 2013, 00:36

Hallo Sirius,

danke das Du Dich an meiner Lösung beteiligst.
Ich hatte den Grundgedanken von:

if Ergebniss 1 = True
UND DANN
Ergebniss 2 = True
Wert = A

RESET Ergebniss 1 & Ergebniss 2 (Aber Wert bleibt gesetzt)

if Ergebniss 2 = True
UND DANN
Ergebniss 1 = True
Wert = B

Ich suche eine Lösung für UND DANN.

Grüße
CybotDNA
BlackJack

@CybotDNA: Die Lösung hat Sirius3 doch schon genannt. Du musst Dir immer das jeweils vorhergehende Ereignis *merken* und immer wenn ein neues Ereignis verarbeitet wird, das Vorhergehende und das Aktuelle testen. Wenn eine Kombination zutrifft (und ganz am Anfang) musst Du das vorhergehende Ereignis auf „keines” setzen. In Python nimmt man dafür in der Regel den Wert `None`.

Wenn die Zeit noch eine Rolle spielt, würde man die Ereignisse mit Zeitstempeln versehen. Mit `collections.namedtuple` könnte man recht einfach Objekte für die Ereignisse erstellen, die einen Ereignistyp und eine Zeit als Attribute haben. Für die Zeit könnte man die `time()`-Funktion aus dem `time`-Modul verwenden.

Edit:

Code: Alles auswählen

#!/usr/bin/env python
from collections import namedtuple
from time import time


Event = namedtuple('Event', 'type time')


def iter_events():
    while True:
        yield Event(int(raw_input('Enter 1 or 2: ')), time())


def main():
    max_seconds = 5
    previous_event = None
    for current_event in iter_events():
        if previous_event:
            if current_event.time - previous_event.time > max_seconds:
                previous_event = None
            else:
                value = None
                types = (previous_event.type, current_event.type)
                if types == (1, 2):
                    value = 'A'
                elif types == (2, 1):
                    value = 'B'
                if value is not None:
                    print value
                    previous_event = None
                else:
                    previous_event = current_event
        else:
            previous_event = current_event


if __name__ == '__main__':
    main()
CybotDNA
User
Beiträge: 5
Registriert: Freitag 7. Juni 2013, 00:36

@BlackJack,

danke das Du Dir so viel Mühe gemacht hast und gleich einen ganzen Codeausschnitt gepostet hast.
Ich versuche mich gerade darin 2 Buttons mit PHP zu erstellen und die Werte mit ahref in mein Script zu bekommen. (Also PHP ist klar, aber mit der Schlage tue ich mir noch ein wenig schwehr)

Wenn ich Erfolg hatte werde ich mich melden ob das Script so funktioniert wie ich es mir denke, ich wollte nur mal ein Lebenszeichen von mir geben, da ich es nicht mag wenn jmd. fragt und dann nicht darauf Stellung bezieht ob es funktioniert.

Es ist jetzt Wochenende, da bietet es sich ja an die Finger nicht an die einäugige Schlange zu verschwenden, sonder es mit Python zu probieren.

Ich melde mich wenn ich es gelöst habe, oder nicht weiterkomme.
BlackJack

@CybotDNA: Warum dieser Sprachmix? Und wie willst Du Python und PHP verbinden?
CybotDNA
User
Beiträge: 5
Registriert: Freitag 7. Juni 2013, 00:36

@BlackJack,

ich möchte 2 sichtbare Buttons haben, da ich mit PHP Erfahrung habe, dachte ich mir nutze ich PHP für die Visualisierung der Buttons.
Den Import möchte ich machen um Erfahrung mit dem importieren zu sammeln.
Erstmal PHP, dann mysql, den Inhalt einer Email... Bis ich einen sicheren Umgang mit dem importieren der Daten nach Python habe.

Mein Logik Problem finde ich da gut, da ich immer auf neue Probleme stoße und so sicherer werden kann.

Manche Leute spielen Sudoku, ich habe mich entschlossen Python zu erlernen.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

CybotDNA hat geschrieben:Manche Leute spielen Sudoku, ich habe mich entschlossen Python zu erlernen.
Wenn du python lernen willst, warum programmierst du dann in PHP? Wie willst du "Daten" nach python importieren?

Grüße,
anogayales
CybotDNA
User
Beiträge: 5
Registriert: Freitag 7. Juni 2013, 00:36

Hallo anogayales,

schön das Du auch interesse an der Thematik hast.
PHP muss ich nicht erst lernen, und mir fehlt in Python noch die Funktion, oder wenn es sie gibt, das Wissen, optisch klickbare Knöpfe zu erstellen.

Ich möchte die "Daten" über urllib2.urlopen('http://domain.xx/') mit response.read() importieren.
Eine schönere Möglichkeit fällt mir am Anfang noch nicht ein.

Unschön ist das ich dazu, soweit ich gerade bin, zwei subdomains mit je dem Inhalt (Ergebniss 1) oder (Ergebniss 2) öffnen muss.
Eine direkte übergabe durch klicken des Button währe natürlich schöner.
Oder halt eine ganz andere bessere Möglichkeit, die mir noch nicht einfällt.

Grüße,
CybotDNA
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Okay,
ich versteh immer noch nicht genau wo dein Problem ist. Was ist den dein endgültiges Ziel?

Es sieht danach aus, also ob die Benutzereingabe ein essentieller Teil deines Problems ist. Ist der HTTP Server zwingend erforderlich? Falls nicht, gibt es eine Hand von GUI Bibliotheken, die auch Buttons anbieten.

Wenn du es erst Mal über eine URL lösen willst reicht urllib2.urlopen() vollkommen aus. Falls es komplizierter werden sollte kannst du dir auch mal http://docs.python-requests.org/en/latest/ anschauen. Wie stell ich mir das vor? Wenn du die Seite "'http://domain.xx/' aufrufst bekommst du zurück ob das Ergebniss 1 gesetzt worden ist? Auf einer anderen Seite findest du das Gleichen nur mit Ergebnis 2?

Ich glaub du machst dir die Sache viel zu kompliziert. Aber sag uns doch bitte was dein langfristiges Ziel ist, dann können wir dir auch besser helfen.

Grüße,
anogayales
Antworten