import random class solarmodule: def __init__(self, serial, watts): # Wenn die Wattwerte stimmen - Objekt bauen if (watts == 120) or (watts == 210) or (watts == 390): self.watts = float(watts) self.cells = self.buildCellArray() # Sonst mit Fehlermeldung abbrechen else: print("Modulecreation not successful!") quit() self.serial = serial # Modul mit Zellen füllen def buildCellArray(self): # Anzahl der Zellen aus der Wattzahl errechnen cellCount = self.watts/0.6 # Array für Zellen erzeugen cells = [] # Array mit Zellobjekten füllen for i in range(int(cellCount)): cells.append(solarcell(i,0.6)) return cells # Zufällige Zelle unter 0.6 Volt setzen # Count gibt die Anzahl der zu veränderenden Zellen an def shadowCells(self, count): for j in range(count): # Wende auf eine zufällige Zelle die Methode "setCurrent" an, die Zelle wird von der Hilfsmethode returnRandomElement() zurückgegeben # Das ist eine üble Zeile, daher nochmal langsam: # self : Schlüsselwort, dass die Methode returnRandomElement() des aktuellen Objekts aufgerufen werden soll # returnRandomElement(self.cells) : Aufruf der Methode, Übergabe des Zellarrays. Die Methode returnRandomElement() nimmt gibt eine zufällige Zelle zurück # setCurrent(0.2) : Auf diese Zelle wird die Methode setCurrent() der Klasse solarcell angewendet # Also kurz : "Setze die aktuelle Spannung einer beliebigen Zelle auf 0.2V." self.returnRandomElement(self.cells).setCurrent(0.2) # Anzahl der momentan verschatteten Zellen zurückgeben def returnShadowedCells(self): count = 0 for h in range(len(self.cells)-1): if self.cells[h].actualCurrent < 0.6: count += 1 return count # Hilfsmethode: Eine zufällige Zelle zurückgeben def returnRandomElement(self, array): zufallszahl = random.randint(0,len(array)-1) return array[zufallszahl] class solarcell: def __init__(self, id, actualCurrent): self.id = id self.actualCurrent = actualCurrent # Methode zum Setzen der Zellspannung (current) def setCurrent(self, current): self.actualCurrent = current # Some Testing # Modul erzeugen module01 = solarmodule(1, 390) # Modul mit zufälliger Anzahl verschatteter Zellen ausstatten module01.shadowCells(random.randint(0,100)) # Anzahl der verschatteten Zellen ausgeben print(f'Es gibt gerade {module01.returnShadowedCells()} verschattete Zellen.' )