Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 6, 2016 11:45:04

Newbie_II
Зарегистрирован: 2016-06-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

Я не программист. Немного знаю Delphi и Pascal. Хочу решить следующую задачу. Мне нужно автоматизировать процесс в браузерной игре. Для этого, я составил небольшую таблицу со списком команд, временем выполнения и номером объекта для применения команды. Типа такой:

--------------
i | t | o | a
0 | 1 | 2 | 1
1 | 5 | 2 | 2
2 | 7 | 3 | 1
Поле (i) – порядковый номер. (t) – время в секундах от начала процесса, (o) – номер объекта, на котором применять действие, (a) – тип действия.

Соответственно, нужно идти подряд по списку и выполнять эти комманды по мере того, как таймер дойдет до нужной секунды.
Если бы я писал на delphi я бы не заморачивался и сделал примерно так:
type
myRec=record
cTime:integer;
cObj:integer;
cAction:integer;
end;
const
cList:array [0..2] of myRec=
((cTime:1;cObj:2;cAction:1),
(cTime:5;cObj:2;cAction:2),
(cTime:7;cObj:3;cAction:1));

begin
cTimer:=0;

for i:=0 to 2 do
begin
while true do
begin
if cList[i].cTime>cTimer
then
doAction(cList[i].cObj,cList[i].cAction);
break;
end; //while
doSomeChecking;
cTimer:=GetNewTime;
end; //for
Но в той штуке, которую я использую для автоматизации (sikuli) встроен jpython. Соответственно вопрос:
Как правильно с точки зрения пайтона реализовать подобный алгоритм?
Вроде больше всего похоже, что данные нужно в словаре хранить:
cList={[(cTime:1;cObj:2;cAction:1],
[cTime:5;cObj:2;cAction:2],
[cTime:7;cObj:3;cAction:1]};
Но как реализовать порядок записей и проход по ним по порядку? Вроде массивов в пайтоне нет?

Или вообще в данном случае есть какое-то простое красивое решение о котором я не догадываюсь?

Отредактировано Newbie_II (Июнь 6, 2016 11:49:09)

Офлайн

#2 Июнь 6, 2016 15:28:16

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

Вам совершенно не обязательно хранить в словаре ключи и значения в определенном порядке! Достаточно в определенном порядке их опрашивать.

Кроме того для питона есть и словари - можете погуглить



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июнь 6, 2016 21:47:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

Newbie_II
Вроде массивов в пайтоне нет?
ZerG
есть и словари
Наверное имелось ввиду в пайтоне и массивы есть



Офлайн

#4 Июнь 6, 2016 23:40:53

Newbie_II
Зарегистрирован: 2016-06-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

ZerG
… Достаточно в определенном порядке их опрашивать. …
и что же может задать этот порядок опроса? Как мне из словаря вытащить, например, 5-ю по счету запись?

Офлайн

#5 Июнь 7, 2016 00:14:15

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

В словаре нет “пятой по счету записи”. Считайте словарь хешируемой таблицей где нет позиции, а есть просто ключ-значение. Если Вы хотите хранить позиционно и при этом использовать доступ по ключам то есть 2 варианта:
1. Написать свой класс, который был бы наследником dict, но при этом хранил еще последовательность элементов.
2. Расширить ordereddict (модель collections) добавив к нему методы для работы по индексам.

Офлайн

#6 Июнь 7, 2016 09:14:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

А что мешает мам далеть так как вы написали:

Newbie_II
нужно идти подряд по списку и выполнять эти комманды

i =0; t=1;o =2;a=3
cmd=
[[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1]]
for j in cmd:
   print(j[a])

или как вы сделали в паскале
class Ta:
   def  __init__(self,li):
       self.i,self.j,self.k,self.y=li
cmd=map(Ta,
[[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1]])
for j in cmd:
   print(j.a)



Отредактировано doza_and (Июнь 7, 2016 09:16:57)

Офлайн

#7 Июнь 7, 2016 10:30:28

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

В чем лучше хранить данные?

arr = {
    0: {'i': 10, 't': 20, 'o': 30, 'a': 40},
    1: {'i': 100, 't': 200, 'o': 300, 'a': 400}
}
print arr[0]
# {'i': 10, 'a': 40, 't': 20, 'o': 30}
print arr[0]['i']
# 10
print arr[0]['t']
# 20



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version