Befehle aus txt Datei lesen

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BlackJack hat geschrieben:Schöner wäre es nicht ``in`` und `find()` zu mischen, die unnötigen eckigen Klammern wegzulassen und gleich die richtige Funktion zu verwenden, statt `any()` mit diversen "Negationen" mit `all()` nachbasteln zu wollen:
Sehr schön, allerdings ist any() IMHO falsch und nicht das was der OP wollte. Es sollen ja eben alle Wörter in der Eingabe vorkommen.
BlackJack

@Baconman: `actions` ist das selbe wie in /me's Quelltext eine Liste mit Tupeln aus Wörtern und einer dazu passenden Anwort.

@/me: Aber dann braucht man in meinem Schnipsel doch nur `any()` durch `all()` ersetzen. Dann verstehe ich noch weniger warum Deins so kompliziert geschrieben ist!?
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Hab jetzt versucht den Schnipsel einzubinden!

Leider ohne Erfolg... es wäre nett wenn mir jemand noch erklären könnte was ich falsch mache.

Code: Alles auswählen

if data[1] =='privmsg':
      filedata = open('Befehle.txt', 'r')
      actions = []
      for line in filedata:
         parts = line.split('===')
         actions.append((parts[0].split(), parts[1]))
         words = parts[0]
         response = parts[1]
      for words, response in actions:
         if all(word in data for word in words): 
            irc.send('PRIVMSG ' + channel + ' :' + response)
BlackJack

@Baconman: Also mindestens das ``word in data`` wird wohl so nicht funktionieren. Überlege Dir mal an was `data` gebunden ist, und warum da wahrscheinlich nie `word` drin vorkommen wird.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BlackJack hat geschrieben:@/me: Aber dann braucht man in meinem Schnipsel doch nur `any()` durch `all()` ersetzen. Dann verstehe ich noch weniger warum Deins so kompliziert geschrieben ist!?
Ganz einfach. Ich war irgendwie auf eine Liste fixiert und habe deshalb einen verkorksten Ansatz gewählt.
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Code: Alles auswählen

if data[1] =='privmsg':
      filedata = open('Befehle.txt', 'r') 
      actions = [] 
      for line in filedata: 
         parts = line.split('===') 
         actions.append((parts[0].split(), parts[1])) 
         words = parts[0] 
         response = parts[1]
         print words
      for words, response in actions: 
         if all(words in text for words in words): 
            irc.send('PRIVMSG ' + channel + ' :' + response)
So, solange es sich nur um den ersten "Befehl" handelt geht es prima!

Sobald ich aber die zweite Zeile versuche passiert etwas komisches:
Bild

Das "/r" ist ein Fehler meinerseits. Das ist egal. Der Teil der mit Pong anfängt soll eigentlich den Ping des Servers beantworten. "was?? ?? ??" soll eigentlich "lala fick" beantworten. Wie man sieht klappt es nicht.

Ich denke man merkt langsam wie oberflächlich ich Python beherrsche :P
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ein für Python gebräuchlicheres Beispiel wäre Spam statt f*ck.
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Okay, Ich wusste nicht wie streng ihr hier seid und das Ich nicht mal meine eigenen Beispiele nehmen kann ;) Es sind immerhin nur Wörter. Aber ehe hier sich jetzt noch jemand darüber aufregt bitte ich das zu entschuldigen.

Ich hoffe einer von euch hilft mir trotzdem! :D
Antworten