Python 3: Использование для операторов l oop & if и .append, как выполнить некоторые операции над различными элементами, используя оператор if без перезаписи? - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь использовать для l oop и if утверждения о следующем:

class equipment:
    def __init__(self, name, location, model):
        self.name = name
        self.location = location
        self.model=model

class device(equipment):
    def __init__(self, name, location,model):
        super().__init__(name, location,model)


device1 = device("device1 ", (5, 2), 'D')
device2 = device("device2", (10, 2), 'T')
device3 = device("device3", (15, 3), 'M')
device4 = device("device4", (5, 5), 'unknown')
eff= 0.5
fi=100
value=[]
all_devices = [device1, device2, device3, device4]
for n in range(0, 4):
    if all_devices[n].model=='D':
        eff= eff + 0.3
        fo=fi*eff
        value.append(fo+120)
    elif all_devices[n].model == 'T':
        eff= eff +0.10
        fo=fi*eff
        value.append(fo+120)
    else:
        eff= eff +0.25
        fo=fi * eff
        value.append(fo+120)
    output=value
print(output)

Но вывод идет так

[200.0, 210.0, 235.0, 260.0]

Пока я чего-то ожидаю вот так

[200, 180 , 195 , 195]

Итак, как выполнить эти операции над различными элементами, используя операторы if без перезаписи?

1 Ответ

1 голос
/ 15 января 2020

Вы можете объявить и назначить eff в пределах для l oop:

fi=100
    value=[]
    all_devices = [device1, device2, device3, device4]
    for n in range(0, 4):
        eff = 0.5

или создать другую переменную для присваивания eff внутри l oop:

eff = 0.5
eff2 = 0.0
fi=100
value=[]
all_devices = [device1, device2, device3, device4]
for n in range(0, 4):
    eff2 = eff
    if all_devices[n].model=='D':
        eff2= eff2 + 0.3
        fo=fi*eff2
        value.append(fo+120)
    elif all_devices[n].model == 'T':
        eff2= eff2 +0.10
        fo=fi*eff2
        value.append(fo+120)
    else:
        eff2= eff2 +0.25
        fo=fi * eff2
        value.append(fo+120)
    output=value
print(output)
...