Daten aus dem Array einlesen und bearbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dann90
User
Beiträge: 3
Registriert: Freitag 11. März 2022, 10:30

Guten Morgen

Ich möchte bitte wisse, wie kann ich die Daten aus dem Array einlesen und bearbeiten.

OUR_data = [] #Daten hier gespeichert

def OURreading():

wb = load_workbook('Berechnung OUR.xlsx',data_only= True)
ws = wb.active
range = ws['R2':'R6155']
for cell in range:
for x in cell:
OUR_data.append(x.value)

def Kl():
i = 0
b = 2
k = 1
c = 3
while i < len(OUR_data):
zmess = OUR_data
a = b * k + (zmess - c) `??????
i+=1

print(f' zmess = {zmess}')

Danke für Ihre Hilfe :)
Dan
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@dann90: Das ist syntaktisch falsch. Also nicht nur weil ` nicht das Zeichen ist was Kommentare einleitet und der Compiler deswegen nicht mit dem Zeichen und den vielen Fragezeichen danach anfangen kann, sondern auch, weil die Einrückung in `Kl()` nicht stimmt: die Definitionen vor der ``while``-Schleife sind drei Leerzeichen eingerückt, das ``while`` selbst dann nur zwei Leerzeichen. Damit kann Python nichts anfangen. Eingrückt wird per Konvention vier Leerzeichen pro Ebene.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Also weder die Definition von `OUR_data` nocht der `print()`-Aufruf am Ende sollten ausserhalb von Funktionen stehen.

Alles was eine Funktion oder Methode ausser Konstanten benötigt, sollte als Argument(e) übergeben werden. Man übergibt allerdings keine leeren Datenstrukturen die dann befüllt werden. `OURreading()` sollte die gelesenen Daten als Rückgabewert liefern, statt eine übergebne oder gar globale Liste zu verändern.

Liste! Nicht Array. Arrays gibt es auch, und damit meint man in der Regel die Array-Datentypen aus dem Numpy-Packge. Die sind Listen zwar ähnlich, werden aber deutlich anders verwendet.

Namen sollten keine kryptischen Abkürzungen enthalten, oder gar nur daraus bestehen. `wb`, `ws`, `Kl()`, `x` für etwas anderes als eine X-Koordinate, `b`, `k`, `c`, `zmess` sind alles schlechte, weil nichtssagende Namen. Namen sollen dem Leser vermitteln was der Wert dahinter im Kontext des Programms bedeutet. Das tun diese Namen alle nicht.

Aber auch die wenigen sprechenden Bezeichner sind teilweise falsch und irreführend. `range` ist der Name einer eingebauten Funktion/Klasse, den sollte man nicht an etwas anderes binden. `cell` wird für eine Sequenz von Zellen verwendet, statt für *eine* Zelle, wie der Name eigentlich vermuten lässt.

Man muss auch nicht jeden Zwischenwert an einen Namen binden.

Die ``while``-Schleife sollte eine ``for``-Schleife über die Liste sein. Indeszugriffe auf eine Liste sind ein „code smell“ weil in Python in den allermeisten Fällen unnötig und damit kein idiomatisches Python

Weder `OURreading()` noch `Kl()` werden irgendwo aufgerufen.

Ausserhalb von `Kl()` gibt es kein `zmess`, der `print()`-Aufruf kann da also nicht funktionieren.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from openpyxl import load_workbook


def read_data():
    sheet = load_workbook("Berechnung OUR.xlsx", data_only=True).active
    return [cell.value for row in sheet["R2":"R6155"] for cell in row]


def function_in_need_of_a_good_name(data):
    b = 2
    k = 1
    c = 3
    for zmess in data:
        a = b * k + (zmess - c)
        print(a)


def main():
    data = read_data()
    function_in_need_of_a_good_name(data)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten