x = 1000
while x <= data['a2goodthousands'] * 1000:
data['MyA2Good'] = x + data['a2goodhundreds']
x = x + 1000
if 1 > data['a2goodthousands']:
data['MyA2Good'] = data['a2goodhundreds']
Выше написан мной код. Это работает, но я хочу точно понять, почему это работает. Изначально я написал это, и это сработало, и я продолжил. Тогда я задумался, почему он постоянно обновляется? Для более подробного объяснения данные поступают из старого PL C, который может хранить только 16 бит со знаком. Таким образом, максимальное количество - 32 676. Поскольку счетчик быстро превысит это значение, каждый раз, когда он достигает 1000, мы считаем на 1 в счетчике «Тысячи» и сбрасываем «Сотни». Тем не менее, это выражает фактическое число, которое я хочу видеть, двумя разными словами. Я написал этот код в Ignition, чтобы объединить два числа в одно место.
При этом тег «тысяч», конечно, начинается с 0, поэтому оператор if внизу остается на месте, пока не будет первая 1000 подсчитано, и он просто смотрит на значение сотен.
Я понимаю, что как только мой тег «Тысячи» подсчитывается на единицу, на этот момент у меня есть условие оператора while, удовлетворяющее оператору равенства (x = 1000 и мой тег * 1000 = 1000), я добавляю 1000 + мой счетчик «Сотен» и сохраняю его в новом теге данных «MyA2Good», а затем подсчитываю x до 1000 и получаю 2000. При этом, в то время как оператор не должен оцениваться снова, пока я не наберу 2000 на моем счетчике, верно? Но при отслеживании значения, хранящегося в моем теге MyA2Good, когда счетчик сотен увеличивается на 1 за раз, тег постоянно обновляется, как если бы оператор while постоянно оценивался, даже если условие для оценки больше не является истинным.
Код делает то, что я хочу, я просто пытаюсь понять, почему именно.