Objekte aus Liste an bestimmte Stelle in string schreiben
Verfasst: Donnerstag 10. September 2020, 06:41
Hallo zusammen,
ich habe mir eine Klasse Fluid geschrieben, die aus einer Liste von Fluidbestandteilen und deren Konzentrationen einen String des Fluids ausgibt. Mit diesem String kann ich dann die Stoffwerte des Fluids über PropsSI zb berechnen lassen.
Bisher habe ich die Möglichkeit ein bis vier Fluidbestandteile vorzugeben und das über eine if else Schleife geregelt.
<code>
class Fluid: # Creation of fluid
def __init__(self, library, component1, x1, component2='', x2=0, component3='',x3=0, component4='', x4=0):
# input 2 - max 4 fluid components with belonging concentration
"""library: TYPE
substance database (Coolprop or Refprop)
"""
self.lib = library
self.component1 = component1 #component 1
self.x1 = x1 #belonging concentration
self.component2 = component2 #component 2
self.x2 = x2 #belonging concentration
self.component3 = component3 #component 3
self.x3 = x3 #belonging concentration
self.component4 = component4 #component 4
self.x4 = x4 #belonging concentration
def composition(self):
if self.lib == "Refprop":
lib = 'REFPROP::'
elif self.lib == 'Coolprop':
lib = ''
if self.x2 == 0 and self.x3 == 0 and self.x4 == 0:
fluid = lib+self.component1
elif self.x3 == 0 and self.x4 == 0:
fluid = lib+self.component1 +'[' +str(self.x1) +']&'+self.component2+'['+str(self.x2)+']'
elif self.x4 == 0:
fluid = lib+self.component1 +'[' +str(self.x1) +']&'+self.component2+'['+str(self.x2)+']&'+self.component3+'['+str(self.x3)+']'
else:
fluid =lib+self.component1+'['+str(self.x1)+']&'+self.component2+'['+str(self.x2)+']&'+self.component3+'['+str(self.x3)+']&'+self.component4+'['+str(self.x4)+']'
return fluid
</code>
Jetzt frage ich mich ob es möglich ist, das ganze auf eine unbegrenzte/unbekannte Anzahl an Bestandteilen zu erweitern. Ich dachte dann an eine for Schleife?! Dafür würde ich dem Fluid dann eine Liste mit den Konzentrationen und Bestandteilen statt einzeln Bestandteil und Konzentration übergeben. Aber wie schaffe ich es den Ausdruck fluid=... so zu verändern, dass das funktioniert? Ich möchte dann quasi so lange bis keine Elemente mehr in der Liste sind immer mit den notwendigen Stringunterbrechungen die Werte in den Ausdruck schreiben. Gibt es dafür eine Möglichkeit?
Ich hoffe ich habe mich verständlich ausgedrückt.
Danke schonmal!
ich habe mir eine Klasse Fluid geschrieben, die aus einer Liste von Fluidbestandteilen und deren Konzentrationen einen String des Fluids ausgibt. Mit diesem String kann ich dann die Stoffwerte des Fluids über PropsSI zb berechnen lassen.
Bisher habe ich die Möglichkeit ein bis vier Fluidbestandteile vorzugeben und das über eine if else Schleife geregelt.
<code>
class Fluid: # Creation of fluid
def __init__(self, library, component1, x1, component2='', x2=0, component3='',x3=0, component4='', x4=0):
# input 2 - max 4 fluid components with belonging concentration
"""library: TYPE
substance database (Coolprop or Refprop)
"""
self.lib = library
self.component1 = component1 #component 1
self.x1 = x1 #belonging concentration
self.component2 = component2 #component 2
self.x2 = x2 #belonging concentration
self.component3 = component3 #component 3
self.x3 = x3 #belonging concentration
self.component4 = component4 #component 4
self.x4 = x4 #belonging concentration
def composition(self):
if self.lib == "Refprop":
lib = 'REFPROP::'
elif self.lib == 'Coolprop':
lib = ''
if self.x2 == 0 and self.x3 == 0 and self.x4 == 0:
fluid = lib+self.component1
elif self.x3 == 0 and self.x4 == 0:
fluid = lib+self.component1 +'[' +str(self.x1) +']&'+self.component2+'['+str(self.x2)+']'
elif self.x4 == 0:
fluid = lib+self.component1 +'[' +str(self.x1) +']&'+self.component2+'['+str(self.x2)+']&'+self.component3+'['+str(self.x3)+']'
else:
fluid =lib+self.component1+'['+str(self.x1)+']&'+self.component2+'['+str(self.x2)+']&'+self.component3+'['+str(self.x3)+']&'+self.component4+'['+str(self.x4)+']'
return fluid
</code>
Jetzt frage ich mich ob es möglich ist, das ganze auf eine unbegrenzte/unbekannte Anzahl an Bestandteilen zu erweitern. Ich dachte dann an eine for Schleife?! Dafür würde ich dem Fluid dann eine Liste mit den Konzentrationen und Bestandteilen statt einzeln Bestandteil und Konzentration übergeben. Aber wie schaffe ich es den Ausdruck fluid=... so zu verändern, dass das funktioniert? Ich möchte dann quasi so lange bis keine Elemente mehr in der Liste sind immer mit den notwendigen Stringunterbrechungen die Werte in den Ausdruck schreiben. Gibt es dafür eine Möglichkeit?
Ich hoffe ich habe mich verständlich ausgedrückt.
Danke schonmal!