Сравнение результатов функции в 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