Задать вопрос

Почему функция срабатывает дважды?

Вопрос изначально не является вопросом как таковым. Я просто уже не способен увидеть ошибку в данном блоке кода (второй день бьюсь над правками). Суть проблемы проста - есть функция которая создает с помощью проверок пользовательских вводов некое подобие консоли, для настройки бота:
def admin_panel(user): #панель настройки бота

	if user == "change key":  #если пользователь решил сменить ключ в словаре

		with open("text.pickle", "rb") as file: #открываем файл для чтения
			bd = pickle.load(file) #записываем в новую переменную то, что было в файле

		print(bd) #выводим все что есть в БД
		hellp = input("enter the key you want to change: ") #ввод ключа который нужно заменить
		hellp_2 = input("enter the key you want to insert: ") #ввод ключа на который нужно заменить старый ключ
		firstKey = bd.pop(hellp) #удаление старого ключа и запись хранившихся данных в переменную
		bd[hellp_2] = firstKey #создание нового ключа с идентичными данными

		with open("text.pickle", "wb") as file: #открываем файл в конструкции with...as..: с авто закрытием файла
			pickle.dump(bd, file) #записываем содержимое объекта в файл

		return bd #возвращаем получившуюся БД

	elif user == "change value": #если пользователь хочет поменять значение

		with open("text.pickle", "rb") as file: #открываем файл для чтения
			bd = pickle.load(file) #записываем в новую переменную то, что было в файле

		print(bd) #выводим все ключи и значения в БД
		hellp = input("enter the key to which the value you want to change is assigned :\n") #ввод ключа под которым хранится изменяемое значение
		hellp_2 = input("enter a new value :\n") #запрашиваем новое значение
		bd[hellp] = hellp_2 #запись ответа и вопроса в словарь в виде ключ(вопрос) : значение(ответ)


		with open("text.pickle", "wb") as file: #открываем файл в конструкции with...as..: с авто закрытием файла
			pickle.dump(bd, file) #записываем содержимое объекта в файл

		return bd #возвращаем получившуюся БД

	elif user == "help": #сводка команд
		return "main command:\nchange key - изменение ключей к ответам\nchange value - изменение значений под ключами\nout1 - выход из админ_панели\nout - выход из программы"
	elif user == "out1": #если пользователь вводит "out1" то мы выходим из админ панели
		return 1

	elif user == "out": #если пользователь вводит "out" то мы выходим сразу из программы
		return 0

	#ЗДЕСЬ БУДЕТ ВЫПОЛНЯТЬСЯ ОСНОВНАЯ ФУНКЦИЯ С РАБОТОЙ БОТА
	else: #в случае некорректного ввода
		return "incorrect command 1" #сообщаем о ошибке пользователю

Естественно я опустил такие моменты как импорт библиотеки "pickle" вызова функции и самого'
user = input()
У меня скорее просьба, нежели вопрос. Скажите почему при попытке сменить значение, или ключ. Моя функция не доходит до return и спрашивает ввод ключа или значения дважды? Причем именно дважды! Нет зацикленного повторения, функция спрашивает одно и тоже ровно два раза и затем срабатывает return и все начинает работать как и предполагалось изначально...
Допускаю возможность отсутствия ошибки в функции. Но даже если это так, я хотя бы буду понимать что ошибка не в функции а в цикле её вызова.
  • Вопрос задан
  • 523 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@o5a
Перепроверьте еще раз свой код. В приведенном куске указанной проблемы нет: для каждой опции все будет срабатывать только 1 раз. Можете сами проверить приведенный кусок в отдельном скрипте. Если что-то повторяется, значит или этот кусок отличается от реального кода, или в остальном коде функция повторно вызывается.

И не стоит комментировать каждую строку. Комментарии должны помогать понять логику работы куска кода, а не дублировать сам код. Нет никакого смысла в подобных комментариях:
return bd #возвращаем получившуюся БД
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы