Игнорирует конструкцию if и выполняет функцию

в данном случае, если я ввожу в request "привет" оно отвечает мне на "привет" а потом выводит значение функции dice() не смотря на то, что я этого не просил. и в request нет значения из словаря opts['kost']. Такая ошибка повторяется у меня почти постоянно, и с многими другими элементами
вот код

def main(request):
    for el in opts['helloes']:
        if el in request:
            say(hello())
    for el in opts['names']:
        if el in request:
            say(name_repl())
    for el in opts['thnxs']:
        if el in request:
            say(thnx_repl())
    for el in opts["kost"]:
        if el in request:
            print(dice())
            break
    for el in opts['monetka']:
        if el in request:
            print(coin())
    for el in opts['pass_gen']:
        if el in request:
            say('сгенерирован пароль')
            print(pass_gen())
    for el in opts['search']:
        if el in request:
            search = input('Введите запрос для поисковой строки\n>> ')
            print('Открываю результат по запросу: "' + search + '"')
            time.sleep(2)
            brows(search)
    for el in opts['coronavirus']:
        if el in request:
            print(coronavirus())
            say(coronavirus())
    for el in opts['dos']:
        if el == request:
            basic_sites()
            break
    for el in opts['news']:
        if el in request:
            print(news())
            say(news())
    for el in opts['rudes']:
        if el in request:
            say(rudes_repl())
    for el in opts['exit']:
        if el in request:
            say(exit_function())
            exit()

say(entry())
while True: 
    request = input('>> ').lower()
    main(request)

вот словари из кода

opts = {"exit": ('goodbye', 'bye', 'qq', 'выход', 'выйти', 'выйди', 'закончить', 'пока', 'прощай',
             'досвидания', 'завершение', 'покедово'),
    "names": ('mirra', 'мирра'),
    "coronavirus": ('coronavirus', 'covid', 'коронавирус', 'ковид'),
    "monetka": ('орёл', 'орел', 'решк', 'монетк'),
    "kost": ('кубик'), 
    "pass_gen": ('парол', 'password'),
    "thnxs": ('пасиб', 'благодар'),
    "rudes": ('дур', 'стерв', 'сук', 'нах', 'скотин',
                'сволоч', 'паскуд', 'хуй'), 
    "helloes": ('привет', 'здравствуй'),
    "news": ('новост', 'news', 'событ'),
    "search": ('найди', 'поищи'),
    'dos': ('досуг')}

функции

def exit_function():
    exit_words = ["Ciao",  "Goodbye", "Пока", "До скорого", "До свидания", "До встречи"]

    return random.choice(exit_words)


def dice():
    rand_int1 = random.randint(1, 7)
    rand_int2 = random.randint(1, 7)
    return "Выпало " + str(rand_int1) + " и " + str(rand_int2)


def pass_gen():
    password = ""
    for i in range(1, 11):
        password += symbs[random.randint(0, len(symbs)-1)]

    return password

def coin():
    return random.choice(['Решка', 'Орёл'])

Ответы (1 шт):

Автор решения: mrEvgenX

Ключевая ошибка в том, что ('кубик') значит 'кубик'. Какой-нибудь объект в скобках - это не кортеж из одного элемента, это просто группировка.

Кортеж из одного элемента будет ('кубик', ) - надо обратить внимание на запятую внутри скобок.

А почему код так работает - давайте подставим получающиеся значения в код вместо переменных:

for el in "кубик":
    if el in "привет":
        print(dice())
        break

Это должно прояснить логику исполнения.

→ Ссылка