Игнорирует конструкцию 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 шт):
Ключевая ошибка в том, что ('кубик') значит 'кубик'. Какой-нибудь объект в скобках - это не кортеж из одного элемента, это просто группировка.
Кортеж из одного элемента будет ('кубик', ) - надо обратить внимание на запятую внутри скобок.
А почему код так работает - давайте подставим получающиеся значения в код вместо переменных:
for el in "кубик":
if el in "привет":
print(dice())
break
Это должно прояснить логику исполнения.