Уведомления

Группа в Telegram: @pythonsu

#1 Март 31, 2017 01:27:42

mooris
Зарегистрирован: 2017-03-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста

Ребят, помогите новичку, пишу наподобие помощника бота для универа.
Проблема вот в чем, есть база определенных слов к примеру

 keys = {
    0: {'name': 'keys_hello',
        'keys': {
            u'привет', u'здравствуйте', u'ку', u'здрасте', u'куку',
                 },
        'answers': {
            u'Приветствую вас'
        },
        'type': {
            u'0',
        },
        },
    1: {'name': 'keys_zachety',
        'keys': {
            u'зачеты',
            u'когда зачет',
            u'когда зачеты',
            u'какие зачеты',
            u'список зачетов 1 курс',
            u'список зачетов',
        },
        'answers': {
            u"Зачеты 1 курс, 2 курс, 3 курс, 4 курс",
        },
        },
    1: {'name': 'keys_nomer',
        'keys': {
            u'1',
            u'2',
            u'3',
            u'4',
            u'5',
        },
        'answers': {
            u"выбрали номер",
        },
        },
}

и обработчик команд
 text= 'список зачетов 1 курс'
words = text.split()
    unknow = 1
    for word in range(len(words)):
        for i in range(len(keys)):
            if words[word].lower() in keys[i]['keys']:
                print = random.sample(keys[i]['answers'], 1)                  

проблема сама в том, что при вводе команды “список зачетов 1 курс” присылает ответ не “Зачеты 1 курс, 2 курс, 3 курс, 4 курс”, а берет значение из keys_nomer команда 1 присылает “выбрали номер”, также если написать “привет какие зачеты” пришлет 2 сообщения “Приветствую вас” и “Зачеты 1 курс, 2 курс, 3 курс, 4 курс”.
я так понимаю все из-за text.split() так как он разбивает слова и ищет уже из списка, просто при вводе одинакового слова будут отправляться все команды с этим словом, мне нужно чтобы он выполнял конкретную команду, подскажите пожалуйста, что можно с этим сделать, за ранее благодарю

Офлайн

#2 Март 31, 2017 01:57:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Вывод текста

У тебя в словаре два одинаковы ключа 1. Словарь может только разные ключи содержать, потому что устроен, как обычное множество, где к каждому элементу привязано значение. Словарь - это нагруженное множество (есть такая динамическая структура в программировании). А множество (математическое) содержит разные элементы.



Отредактировано py.user.next (Март 31, 2017 01:58:45)

Офлайн

#3 Март 31, 2017 10:47:39

mooris
Зарегистрирован: 2017-03-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста

Подскажите, а как можно сделать чтобы выполнял конкретную команду к примеру
список зачетов 1 курс - ответ 1
список зачетов 2 курс - ответ 2

Офлайн

#4 Март 31, 2017 12:56:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Вывод текста

Опиши словами работу этой программы, которая должна получиться в итоге. Только когда у тебя будет словесное описание всей программы, тогда и можно начинать писать код. А наборот нельзя делать, если ты не программист, у которого программа в голове пишется в виде словесного описания, а потом блок-схемы, а потом псевдокода. Иначе вот такая мешанина получается, как у тебя, в котороый ты потом сам не можешь разобраться. Это ошибка новичков, которые думают, что если программу быстрее писать начать, то она сама же и напишется “как-нибудь типа получится сама собой”.

Поэтому совершенно не ясно, с чего ты взял, что структура для хранения данных должна быть именно такой. Чем ты её обосновал? Ничем, просто на ходу придумал, а теперь ловишь глюки.



Офлайн

#5 Март 31, 2017 19:25:26

mooris
Зарегистрирован: 2017-03-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста

Смысл программы такой работает с ВК api берет сообщение и отправляет ответ. Необходимо что бы в зависимости от заложенных фраз отправлялся один определенный ответ. К примеру к сообщениям:
'зачеты', ‘когда зачет’,'когда зачеты','какие зачеты','список зачетов'
Отправлялся ответ “в январе"

Офлайн

#6 Апрель 1, 2017 00:11:07

mooris
Зарегистрирован: 2017-03-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста

решил свою проблему изменив как и думал split() на splitlines()

Офлайн

#7 Апрель 1, 2017 03:11:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Вывод текста

mooris
Смысл программы такой работает с ВК api берет сообщение и отправляет ответ. Необходимо что бы в зависимости от заложенных фраз отправлялся один определенный ответ. К примеру к сообщениям:
'зачеты', ‘когда зачет’,'когда зачеты','какие зачеты','список зачетов'
Отправлялся ответ “в январе"
А где тут курс?

mooris
Подскажите, а как можно сделать чтобы выполнял конкретную команду к примеру
список зачетов 1 курс - ответ 1
список зачетов 2 курс - ответ 2

И ты собираешься так все фразы писать? А если курсов сто? Да даже один курс с разными группами уже даёт множество вариантов с их зачётами, так как не обязаны они проходить в один день у всех групп. Вот у тебя не продумана эта область.

mooris
решил свою проблему изменив как и думал split() на splitlines()
Выигранное сражение - ещё не выигранная война. :)

Нет у тебя программы описанной, просто приблизительное что-то, перегруженное всякими vk api, не нужными в данный момент. Ты без vk api напиши сначала, чтобы она всё правильно выбирала, а потом уже vk api подключишь (если вообще дойдёшь до этого этапа).



Отредактировано py.user.next (Апрель 1, 2017 03:15:11)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version