Python : Проблема с подсчётом номера сообщения

Всем доброго времени суток. При разработке своего приложения столкнулся с такой проблемой. При получении пользователем сообщения ему присваивается позиция.

Пример ответа на запрос о получении сообщений

{
  "status": "SUC",
  "Your": [],
  "its": [
    {
      "picture": null,
      "text": "Привет!",
      "pos": 1,
      "voice_text": "none",
      "file": null,
      "voice": "nil",
      "filereso": null
    },
    {
      "picture": null,
      "text": "Как дела?",
      "pos": 3,
      "voice_text": "none",
      "file": null,
      "voice": "nil",
      "filereso": null
    }
  ]
}

Проблема заключается в следующем:

1)Иногда номер позиции "перескакивает" на единицу, т.е номер должен быть 2, а является 3

  1. Когда сообщение добавляется в массив, в который до этого добавили сообщение, позиция нового = позиции старого (т.е пользователь отправил сообщеие ,его позиция равна три, Пользователь сразу же отправляет ещё одно сообщение и его номер опять равен 3)

В чём проблема?

Проблемный участок кода

    //если действие в запросе указано *отправить сообщение*
if data['action']=='send_mess':
    rec_m='none'
    PATH='audio.wav'
//для распознавания речи
    if data['voice']!='nil':
        with open("audio.wav", "wb") as fh:
          fh.write(base64.standard_b64decode(data['voice']))
        r=sr.Recognizer()
        with sr.AudioFile(PATH) as source:
          audio=r.record(source)
          rec_m=r.recognize_google(audio)
          print "transcribed:" + rec_m
    if data['sender'] not in messgs[data['reciver']]:
        messgs[data['reciver']][data['sender']]=[]
        messgs[data['sender']][data['reciver']]=[]
        message = {"text":data['text'],"picture":data['picture'],"voice":data['voice'],   "voice_text":rec_m,"file":data['file'],"filereso":data['filereso'],"pos":1}
          messgs[data['reciver']][data['sender']].append(message)
                         self.wfile.write(json.dumps({"status":"sended"} ))
    else:
    // проблемное место. Тут и ведётся посчёт
         position=0
         if len(messgs[data['reciver']][data['sender']])>len( messgs[data['sender']][data['reciver']]):
            position=len(messgs[data['reciver']][data['sender']])+1
         else :
             position=len(messgs[data['sender']][data['reciver']])+1
             message = {"text":data['text'],"picture":data['picture'],"voice":data['voice'],   "voice_text":rec_m,"file":data['file'],"filereso":data['filereso'],"pos":position+1}
            messgs[data['reciver']][data['sender']].append(message)
                         self.wfile.write(json.dumps(
                         {"status":"sended"}
                         ))

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

Автор решения: Егор Приставка

В общем, проблему я решил. Заключалась она в неправильном подсчёте номера последнего сообщения: он должен равняться сумме длин словарей переписок + 1 , а не длине самого длинного словаря+1. Исходя из этого, код преобразился в :

if data['action']=='send_mess':
               rec_m='none'
               if data['voice']!='nil':
                 with open("audio.wav", "wb") as fh:
                   fh.write(base64.decodebytes(data['voice']))
                 r=sr.Recognizer()
                 PATH='audio.wav'
                 with sr.AudioFile(PATH) as source:
                   audio=r.record(source)
                   rec_m=r.recgognize_sphinx(audio)
                       #print rec_m
               if data['sender'] not in messgs[data['reciver']]:
                 message = {"text":data['text'],"picture":data['picture'],"voice":data['voice'],   "voice_text":rec_m,"file":data['file'],"filereso":data['filereso'],"pos":1}
                 messgs[data['reciver']][data['sender']]=[]
                 messgs[data['reciver']][data['sender']].append(message)
                 self.wfile.write(json.dumps(
                 {"status":"sended"}
                 ))
               else:
                 pos=len(messgs[data['sender']][data['reciver']])+len(messgs[data['reciver']][data['sender']])+1 
                 message = {"text":data['text'],"picture":data['picture'],"voice":data['voice'],   "voice_text":rec_m,"file":data['file'],"filereso":data['filereso'],"pos":pos}   
                 messgs[data['reciver']][data['sender']].append(message)
                 self.wfile.write(json.dumps(
                 {"status":"sended"}
                 ))
→ Ссылка