-1

完全なコードは次のとおりです。

#client der mit irc-server kontakt aufnimmt
import time
import socket
from sys import argv

script, mitspieler1, mitspieler2 = argv
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

class funktion:

    def main(self):

            print "Socket(Client)"
            host = "irc.iz-smart.net"
            port = 6667 
            PASS = "7987fshd" 
            NICK = "Testikus" 
            USER = "Testikus localhost irc.iz-smart.net :Testikus" 
            self.login(PASS, NICK, USER, host, port)
            print "Verbindung aufgebaut zu {0}(IP:{1})".format(
            host, socket.gethostbyname(host)
            )
            self.haupt_schleife()

    def haupt_schleife(self):
        while True:
            antwort = sock.recv(4096)
            join = "JOIN #testblablub \r\n"
            print antwort
            if antwort[0:4] == "PING":
                self.pong(antwort, join)
            elif antwort.split()[3] == ":quiz.start":
                sock.sendall("PRIVMSG #testblablub Es spielen mit: "
                            +mitspieler1+" und "+mitspieler2+"\r\n"
                            )
                time.sleep(2)
                self.fragen(antwort)

    def pong(self, antwort, join):
        sock.sendall("PONG " + antwort.split()[1] + "\n")
        time.sleep(3)
        sock.sendall(join)
        sock.sendall("PRIVMSG #testblablub hi \r\n")

    def login(self, PASS, NICK, USER, host, port):
        sock.connect((host, port))
        sock.sendall("PASS "+PASS+"\n")
        sock.sendall("NICK "+NICK+"\n")
        sock.sendall("USER "+USER+"\n")

    def fragen(self, antwort):
            sock.sendall("PRIVMSG #testblablub Welche Farbe hat der Himmel ? \r\n")
            time.sleep(3)
            if antwort.split()[3] == ":blau":
                sock.sendall("PRIVMSG #testblablub RISCHTISCH \r\n")





ausfuehren = funktion()
ausfuehren.main()

(一部の文字列はドイツ語で書かれていますが、それは重要ではないと思います)

したがって、私の主な問題は、関数を関数(またはPythonのためにメソッド)def fragen(self, antwort)で実行したいということです。def haupt_schleife(self)重要なものはすべてこの中にありdef haupt_schleife(self)ます。クイズコードの残りの部分を の elif ブロックで実行してdef haupt_schleife(self)、完全に別のものにしたいのです。愚かなことは、「quiz.start」と入力すると、:sock.sendall("PRIVMSG #testblablub Welche Farbe hat der Himmel ? \r\n")は問題なく実行されますが、if ステートメントは開始されません。チャネルでは他に何もしません (単に "Welche Farbe hat der Himmel ? out" と出力するだけです)。

最終的に誰かがこれを理解してくれることを願っています:/ (コードを実行したい場合は、argv のため、コマンドラインに 2 つの名前を入力する必要があります)

4

2 に答える 2

0

fragenこの条件が真の場合、関数を呼び出します。

elif antwort.split()[3] == ":quiz.start":

次に、fragen関数で、ifこの条件が真の場合に分岐に入ります。

if antwort.split()[3] == ":blau":

antwort.split()[3]関数が呼び出されたので、それが になることがわかっている":quiz.start"ため、ifステートメントが実行されることはありません。

アプリケーションの背後にあるロジックを再確認する必要があります。

于 2013-04-10T20:59:43.273 に答える