Python Вопрос о сценарии, вероятно, очень простой, но у меня мало опыта в этом коде - PullRequest
0 голосов
/ 13 июля 2020
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 постоянно оценивался, даже если условие для оценки больше не является истинным.

Код делает то, что я хочу, я просто пытаюсь понять, почему именно.

1 Ответ

0 голосов
/ 13 июля 2020

, в то время как переменная x меньше или равна data['a2goodthousands'] * 1000:, пока выполняется l oop. При каждом запуске значение переменной data['MyA2Good'] изменяется на x + ['a2goodhundreds'], а после этого присваивания x становится x + 1000. Когда x будет больше или равно data['a2goodthousands'] * 1000, while l oop заканчивается, и выполняется оператор if. если 1 больше, чем data['a2goodthousands'], переменная data['MyA2Good'] равна data['a2goodhundreds']

...