Сравнение результатов функции в python

Я довольно новичок в Python, и мне было интересно, если кто-нибудь может мне помочь... Я пытаюсь написать скрипт, который проверяет, есть ли у меня администратора на моем сервере TS3. Однако я просто не могу понять это после целого дня.

API, который я использую, связан здесь: http://py-ts3.readthedocs.io/en/latest/index.html

    import time
    import ts3


    def admincheck(nickname, id):
        while True:
            client = ts3conn.clientdbfind(pattern=nickname)
            group = ts3conn.servergroupclientlist(sgid=id)
            for client in client:
                print("client db id:\n" + (client["cldbid"]))
            for group in group:
                print("client db ids with admin:\n" + (group["cldbid"]))
                time.sleep(1.5)
            if int(client["cldbid"]) in range(int(group["cldbid"])):
                print("client has admin")
            else:
                print("client does not admin")



    with ts3.query.TS3Connection("localhost") as ts3conn:
            ts3conn.login(
                    client_login_name="serveradmin",
                    client_login_password="<ommited>"
            )
            ts3conn.use(sid=1)
            admincheck("test", "6")

Я думаю, что моя проблема в этой части:

    if int(client["cldbid"]) in range(int(group["cldbid"])):
            print("client has admin")
        else:
            print("client does not admin")

Было бы здорово, если бы кто-то мог помочь:) Заранее спасибо!

РЕДАКТИРОВАТЬ Так как я не поставил вопрос под рукой (noob здесь), это пример вывода:

    client db id:
    2
    client db ids with admin:
    2
    client db ids with admin:
    3
    client db ids with admin:
    4
    client does not admin

Как видите, в выводе говорится, что у клиента нет администратора, хотя идентификатор клиентской базы данных соответствует записи в списке с идентификаторами, которые имеют администратора.

1 ответ

Отличное чтение: как отлаживать небольшие программы

Проблемы:

def admincheck(nickname, id):
    while True:
        client = ts3conn.clientdbfind(pattern=nickname)
        group = ts3conn.servergroupclientlist(sgid=id)

        # you are overwriting your client-list with its first element
        # both have the same name
        for client in client:
            print("client db id:\n" + (client["cldbid"]))

        # you are overwriting your group-list with its first element
        # both have the same name
        for group in group:
            print("client db ids with admin:\n" + (group["cldbid"]))
            time.sleep(1.5)

        # you should check if any client-id is equal to any inside group-ids
        # instead you do something with range - wich does not make much sense?
        if int(client["cldbid"]) in range(int(group["cldbid"])):
            print("client has admin")
        else:
            print("client does not admin")

Если вам нужно конвертировать несколько чисел, используйте карту:

text = [ "1","12","123","1234","12345"]
asInt = list( map(int,text))  # apply int() to each part of text, returns iterable 

print(asInt)  #   [1, 12, 123, 1234, 12345]

ids = ["5","7","1"] 
idNums = list(map(int,text))  # same 

print(any(x in asInt for x in idNums))   # checks if any x from idNums is 
                                         # inside asInt (your groupIds) 

Выход:

[1, 12, 123, 1234, 12345]
True

Доку: любая () и карта ()

Другие вопросы по тегам