Seite 1 von 2

Verfasst: Donnerstag 8. April 2010, 15:14
von /me
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.

Verfasst: Donnerstag 8. April 2010, 15:53
von 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!?

Verfasst: Donnerstag 8. April 2010, 21:28
von Baconman
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)

Verfasst: Donnerstag 8. April 2010, 21:39
von 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.

Verfasst: Freitag 9. April 2010, 08:09
von /me
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.

Verfasst: Samstag 17. April 2010, 23:17
von Baconman

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

Verfasst: Montag 19. April 2010, 12:10
von mkesper
Ein für Python gebräuchlicheres Beispiel wäre Spam statt f*ck.

Verfasst: Montag 19. April 2010, 14:31
von Baconman
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