Aufgabe-keine Ahnung

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
Elmar91
User
Beiträge: 10
Registriert: Dienstag 10. Mai 2011, 08:13

Bin nicht so der Hammerprogrammierer undsteh vor folgendem Problem. das größte Problem dabei ist das ich schon gar nicht weiß wie ich überhaupt anfangen soll...

Aufgabenstellung:

Schreiben Sie ein Programm, das die monatlichen Mittelwerte der Außentemperatur und der globalen Einstrahlung für eine Reihe von Standorten berechnet. Die Ausgabe soll tabellarisch erfolgen. Stündliche Wetterdaten für 5 Standorte sind im Zip-Archiv zu finden.
Hinweise
  • Lösen Sie die Aufgabe zunächst für einen Standort.
  • Bei den Wetterdatensätzen handelt es sich um ASCII-Daten. Es gibt mehrere Spalten in der Datei. Die einfachste Methode diese Daten einzulesen bietet die Funktion load(...) aus der Matplotlib (from pylab import *)
    Beachten Sie die Parameter skiprows und unpack.
  • In neueren Versionen von pylab gibt es die Funktion load nicht mehr. Sie wird ersetzt durch loadtxt in numpy.
  • Extrahieren Sie die benötigten Spalten.
  • Sie benötigen zur Mittelwertbildung die entsprechenden Monatsgrenzen. Eine mögliche Datenstruktur ist ein Dictionary mit den Monatsnamen:

    Code: Alles auswählen

    mittelwert_ta = {}
    mdict = {}
    mdict ['Jan '] = [0, 31*24]
    # weitere Monate
    grenzen = slice ( mdict ['Jan '][0] , mdict ['Jan '][1])
    mittelwert_ta ['Jan '] = stundenwerte [ grenzen ]. mean ()
    # oder so:
    u = mdict ['Jan '][0]
    o = mdict ['Jan '][1]
    mittelwert_ta ['Jan '] = stundenwerte [u : o]. mean ()
  • Sowohl die Behandlung der verschiedenen Standorte als auch die Mittelwertbildung für die einzelnen Monate läßt sich elegant in Schleifen zusammenfassen.
  • Es bietet sich an, das Programm mit Hilfe von Funktionen zu modularisieren
Zuletzt geändert von Anonymous am Dienstag 10. Mai 2011, 08:39, insgesamt 1-mal geändert.
Grund: Aufgabenstellung lesbarer formatiert.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Elmar91 hat geschrieben:Bin nicht so der Hammerprogrammierer undsteh vor folgendem Problem. das größte Problem dabei ist das ich schon gar nicht weiß wie ich überhaupt anfangen soll...
Eine gewisse Erfahrung in Python können wir hoffentlich voraussetzen. So eine Aufgabe fällt ja nicht urplötzlich vom Himmel.

Der Beschreibung nach musst du offensichtlich zuerst die Eingabedatei mit der beschriebenen Methode einlesen. Fang damit an.
BlackJack

@Elmar91: Lesenswert wäre vielleicht noch der angepinnte Thread zu Schülern und Studenten mit Informatikproblemen.

Der erste Beitrag ist ziemlich mühsam zu lesen mit den vielen Pik-Symbolen anstelle von Umlauten und dem nicht formatierten Quelltext.

Ansonsten für den Anfang: Falls die Vermutung von /me bezüglich der Python-Vorkenntnisse nicht zutrifft, würde ich an Deiner Stelle mit dem Tutorial aus der Python-Dokumentation anfangen.

Dann ist der letzte Hinweis aus der Aufgabe wohl auch einer der besten für das allgemeiner Vorgehen: Teile das Problem so lange in kleinere Teilprobleme auf, bis Du bei etwas angelangt bist, was Du als Funktion umsetzen und testen kannst. Aus den ganzen Funktionen, also den Teillösungen, kannst Du dann am Ende eine Gesamtlösung zusammen setzen.
Elmar91
User
Beiträge: 10
Registriert: Dienstag 10. Mai 2011, 08:13

sodala das programm fertig geschrieben (völlig allein) sogar ohne das ich im forum gelesen hab :) emmm das programm funzt so weit schon nur hab ich jetzt wirklich keine ahnung we ich das tabellarisch darstelle .. kann mir da jm weiterhelfen?? :K
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Posten mal den Code, welchen du für die tabellarische Darstellung bereits hast. Den kann man sicher erweitern.
Das Leben ist wie ein Tennisball.
BlackJack

@Elmar91: Was soll "tabellarische Ausgabe" denn genau bedeuten? Würde es reichen die Werte mit Tabs getrennt auszugeben? Oder soll man wirklich die maximale Spaltenbreite in Zeichen berechnen und das dann entsprechend formatiert ausgeben? Würde CSV reichen weil man sich das als Tabelle zum Beispiel in eine Tabellenkalkulation laden kann?
Elmar91
User
Beiträge: 10
Registriert: Dienstag 10. Mai 2011, 08:13

mit tabs würde reichen halt das es sauber untereinander steht ;) @eydu : hab keinen code oben steht die komplette aufgabe ... :wink:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Elmar91 hat geschrieben:@eydu : hab keinen code oben steht die komplette aufgabe ... :wink:
Das ist klar, ich wollte dich nur noch einmal auf das Hausaufgabenproblem und den Link von BlackJack aufmerksam machen ;-)
Das Leben ist wie ein Tennisball.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Elmar91: Wie nun?
Elmar91 hat geschrieben:hab keinen code oben steht die komplette aufgabe
weiter oben hattest du geschrieben
Elmar91 hat geschrieben:sodala das programm fertig geschrieben (völlig allein) sogar ohne das ich im forum gelesen hab :) emmm das programm funzt so weit schon nur hab ich jetzt wirklich keine ahnung we ich das tabellarisch darstelle
Zeig her, was du bereits geschrieben hast, dann kann man dir vielleicht helfen.
In specifications, Murphy's Law supersedes Ohm's.
Elmar91
User
Beiträge: 10
Registriert: Dienstag 10. Mai 2011, 08:13

Code: Alles auswählen

Name = "Elmar Bickel"
Matrikelnummer = "03000162"
print "%s\tMatrikelnummer: %s\n" % (Name,Matrikelnummer)
print "Uebung 3\n"
import numpy as np
while True:
    stadt=raw_input("Von welcher Stadt wollen Sie die Daten abfragen?")
    if stadt=="B or b":
        werte= np.loadtxt("Berlin.dat",skiprows=4,usecols=(4,8),
                  unpack=True)
        print ""
        print "Berlin"
    elif stadt=="M or m":
        werte= np.loadtxt("Muenchen.dat",skiprows=4,usecols=(4,8),
                  unpack=True)
        print ""
        print "Muenchen"
    elif stadt=="K or k":
        werte= np.loadtxt("Koeln.dat",skiprows=4,usecols=(4,8),
                  unpack=True)
        print ""
        print "Koeln"
    elif stadt=="H or h":
        werte= np.loadtxt("Hamburg.dat",skiprows=4,usecols=(4,8),
                  unpack=True)
        print ""
        print "Hamburg"
    elif stadt=="F or f":
        werte= np.loadtxt("Frankfurt.dat",skiprows=4,usecols=(4,8),
                  unpack=True)
        print ""
        print "Frankfurt"
    
    stundenwerte,y = np.loadtxt("Berlin.dat", skiprows=4,usecols=(4,8),unpack=True)
    print stundenwerte
    stundenwerte,y = np.loadtxt("Muenchen.dat", skiprows=4,usecols=(4,8),unpack=True)
    print stundenwerte
    stundenwerte,y = np.loadtxt("Koeln.dat", skiprows=4,usecols=(4,8),unpack=True)
    print stundenwerte
    stundenwerte,y = np.loadtxt("Hamburg.dat", skiprows=4,usecols=(4,8),unpack=True)
    print stundenwerte
    stundenwerte,y = np.loadtxt("Frankfurt.dat", skiprows=4,usecols=(4,8),unpack=True)
    print stundenwerte
    mittelwert_s={}
    mittelwert_ta = {}
    mdict = {}
    mdict ['Jan '] = [0, 744]
    mdict ['Feb '] = [745, 1416]
    mdict ['Mar '] = [1417, 2160]
    mdict ['Apr '] = [2161, 2880]
    mdict ['Mai '] = [2881, 3624]
    mdict ['Jun '] = [3625, 4344]
    mdict ['Jul '] = [4345, 5088]
    mdict ['Aug '] = [5089, 5832]
    mdict ['Sep '] = [5833, 6552]
    mdict ['Okt '] = [6553, 7296]
    mdict ['Nov '] = [7297, 8016]
    mdict ['Dez '] = [8017, 8760]
    grenzen = slice ( mdict ['Jan '][0] , mdict ['Jan '][1])
    grenzen1 = slice ( mdict ['Feb '][0] , mdict ['Feb '][1])
    grenzen2 = slice ( mdict ['Mar '][0] , mdict ['Mar '][1])
    grenzen3 = slice ( mdict ['Apr '][0] , mdict ['Apr '][1])
    grenzen4 = slice ( mdict ['Mai '][0] , mdict ['Mai '][1])
    grenzen5 = slice ( mdict ['Jun '][0] , mdict ['Jun '][1])
    grenzen6 = slice ( mdict ['Jul '][0] , mdict ['Jul '][1])
    grenzen7 = slice ( mdict ['Aug '][0] , mdict ['Aug '][1])
    grenzen8 = slice ( mdict ['Sep '][0] , mdict ['Sep '][1])
    grenzen9 = slice ( mdict ['Okt '][0] , mdict ['Okt '][1])
    grenzen10 = slice ( mdict ['Nov '][0] , mdict ['Nov '][1])
    grenzen11 = slice ( mdict ['Dez '][0] , mdict ['Dez '][1])
    mittelwert_ta ['Jan '] = stundenwerte [grenzen]. mean ()
    mittelwert_ta ['Feb '] = stundenwerte [grenzen1]. mean ()
    mittelwert_ta ['Mar '] = stundenwerte [grenzen2]. mean ()
    mittelwert_ta ['Apr '] = stundenwerte [grenzen3]. mean ()
    mittelwert_ta ['Mai '] = stundenwerte [grenzen4]. mean ()
    mittelwert_ta ['Jun '] = stundenwerte [grenzen5]. mean ()
    mittelwert_ta ['Jul '] = stundenwerte [grenzen6]. mean ()
    mittelwert_ta ['Aug '] = stundenwerte [grenzen7]. mean ()
    mittelwert_ta ['Sep '] = stundenwerte [grenzen8]. mean ()
    mittelwert_ta ['Okt '] = stundenwerte [grenzen9]. mean ()
    mittelwert_ta ['Nov '] = stundenwerte [grenzen10]. mean ()
    mittelwert_ta ['Dez '] = stundenwerte [grenzen11]. mean ()
    
    mittelwert_s ['Jan '] = y [grenzen]. mean ()
    mittelwert_s ['Feb '] = y [grenzen1]. mean ()
    mittelwert_s ['Mar '] = y [grenzen2]. mean ()
    mittelwert_s ['Apr '] = y [grenzen3]. mean ()
    mittelwert_s ['Mai '] = y [grenzen4]. mean ()
    mittelwert_s ['Jun '] = y [grenzen5]. mean ()
    mittelwert_s ['Jul '] = y [grenzen6]. mean ()
    mittelwert_s ['Aug '] = y [grenzen7]. mean ()
    mittelwert_s ['Sep '] = y [grenzen8]. mean ()
    mittelwert_s ['Okt '] = y [grenzen9]. mean ()
    mittelwert_s ['Nov '] = y [grenzen10]. mean ()
    mittelwert_s ['Dez '] = y [grenzen11]. mean ()
    
    print mittelwert_ta ['Jan ']
    print mittelwert_ta ['Feb ']
    print mittelwert_ta ['Mar ']
    print mittelwert_ta ['Apr ']
    print mittelwert_ta ['Mai ']
    print mittelwert_ta ['Jun ']
    print mittelwert_ta ['Jul ']
    print mittelwert_ta ['Aug ']
    print mittelwert_ta ['Sep ']
    print mittelwert_ta ['Okt ']
    print mittelwert_ta ['Nov ']
    print mittelwert_ta ['Dez ']
    
    print mittelwert_s ['Jan ']
    print mittelwert_s ['Feb ']
    print mittelwert_s ['Mar ']
    print mittelwert_s ['Apr ']
    print mittelwert_s ['Mai ']
    print mittelwert_s ['Jun ']
    print mittelwert_s ['Jul ']
    print mittelwert_s ['Aug ']
    print mittelwert_s ['Sep ']
    print mittelwert_s ['Okt ']
    print mittelwert_s ['Nov ']
    print mittelwert_s ['Dez ']
    x=raw_input("Wollen Sie noch von einer weiteren Stadt die Daten? Wenn Ja dann geben Sie J ein")
    if x!="J or j":
        break
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Oh Graus! :shock:

Nuja, jeder fängt mal an ;-)

Als erstes: Zeig uns doch mal eine Ausgabe der Mittelwerte wie es im Moment aussieht. Wir können das Bsp ja nicht laufen lassen, da wir keine Datendateien haben!

Dann zeig uns mal als "fake", wie Du die Ausgabe denn gerne hättest.

Danach kann man überlegen, wie man das sinnvoll angehen kann.

So, nun generelles: Was für eine Art Kurs ist denn das? Mir scheint, als hättet ihr grundlegende Datenstrukturen wie Listen / Dicts noch nicht besprochen! Dein Code ist ja ein gutes Beispiel für Verstöße gegen DRY.

Dinge wie Deine Matrikelnummer würde ich in öffentlichen Foren auch nicht posten btw ;-)

- Dem Script fehlt ein "Header" und die grundlegende Struktur von Python-Modulen.

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

def main():
     # hier kommt dein bisheriger Code rein

if __name__ == "__main__":
    main()
- Wieso fragst Du nach einer Stadt, berechnest da einen Wert (werte) und nutzt den nie? Im Anschluss an die if-elif-Kaskade berechnest Du dann noch mal alles...?

- Diese Werte werden später bei den Mittelwertsberechnungen nie wieder genutzt! Ist das Absicht? Wenn man das nicht braucht, gehört das in eine separate Funktion

- Benutzt man eine Nummerierung bei Namen, dann hat man einen strukturellen Fehler gemacht und man sollte stattdessen eine Liste oder einen ähnlichen Datentypen benutzen.

- Klammern, Punkteoperatoren usw schreibt man ohne Leerzeichen hinter Namen.

Code: Alles auswählen

# falsch
mdict ['Jan '] = [0, 744]
# richtig
mdict['Jan '] = [0, 744]

# falsch
grenzen = slice ( mdict ['Jan '][0] , mdict ['Jan '][1])
# richtig
grenzen = slice(mdict['Jan '][0], mdict['Jan '][1])
Bei diesem Code würde ich sagen: Vergiss alles und wird ihn weg! Beginne damit, Dir für eine Stadt mal die Rechenwege und Funktionsaufrufe zu überlegen und implementiere das dann erst einmal in kleinen Portionen als kleine separate Funktionen. Danach kann man das dann leicht für mehrere Städte nutzen.

Programmieren bedeutet immer Generalisieren. Das Prinzip ist in Deinem Code nicht erkennbar.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Elmar91
User
Beiträge: 10
Registriert: Dienstag 10. Mai 2011, 08:13

habs hinbekommen :) emm ja kurs es heißt edv 2 bin im zweiten semester und bei uns wird weniger auf die darstellung wert gelegt eher auf die funktionalität...
problembär

Elmar91 hat geschrieben:habs hinbekommen :) emm ja kurs es heißt edv 2 bin im zweiten semester und bei uns wird weniger auf die darstellung wert gelegt eher auf die funktionalität...
Das gilt dann wohl auch für Rechtschreibung und Zeichensetzung.

Trotzdem: Abgesehen davon, daß Dein Code in jeder Hinsicht nach "Anfänger" aussieht (was Du ja sicher vermeiden willst), läßt er sich auch sehr schlecht warten. Insofern gehen Darstellung und Brauchbarkeit oft fließend ineinander über.
Aufgabe-keine Ahnung
Das klang für mich erst, als hättest Du aufgegeben, weil Du keine Ahnung hattest. :mrgreen:
Auch das ein Eindruck, den Du mit der Themenüberschrift wahrscheinlich nicht vermitteln wolltest.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn der Code wenigstens Funktionalität hätte. Wenn man sich die Bedingungen anschaut, dann kann das gar nicht wie gewünscht funktionieren.
Das Leben ist wie ein Tennisball.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Elmar91 hat geschrieben:habs hinbekommen :) emm ja kurs es heißt edv 2 bin im zweiten semester und bei uns wird weniger auf die darstellung wert gelegt eher auf die funktionalität...
1. Das, was du gepostet hast, funktioniert nicht.

2. Programmieren heißt, der Lösung eines praktischen Problems mittels einer Programmiersprache eine formale Darstellung zu geben. Wenn man davon den Darstellungs-Aspekt abzieht bleibt nichts mehr übrig, was noch Programmieren heißen könnte. Und nicht jede Form der Darstellung ist gleich gut. Du multiplizierst (5 + 3) * 7 ja auch nicht, indem du schreibst 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 und dann dreizehn Additionen ausführst, obwohl das Ergebnis dasselbe ist.
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

@Elmar91: Die letzten beiden Punkte der Aufgabenstellung sind in dem Quelltext nicht berücksichtigt.
Elmar91
User
Beiträge: 10
Registriert: Dienstag 10. Mai 2011, 08:13

pillmuncher hat geschrieben:
Elmar91 hat geschrieben:habs hinbekommen :) emm ja kurs es heißt edv 2 bin im zweiten semester und bei uns wird weniger auf die darstellung wert gelegt eher auf die funktionalität...
1. Das, was du gepostet hast, funktioniert nicht.

2. Programmieren heißt, der Lösung eines praktischen Problems mittels einer Programmiersprache eine formale Darstellung zu geben. Wenn man davon den Darstellungs-Aspekt abzieht bleibt nichts mehr übrig, was noch Programmieren heißen könnte. Und nicht jede Form der Darstellung ist gleich gut. Du multiplizierst (5 + 3) * 7 ja auch nicht, indem du schreibst 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 + 5 + 3 und dann dreizehn Additionen ausführst, obwohl das Ergebnis dasselbe ist.
ja so wie ich es gepostet hab hab ich es ja am schluss auch nicht mehr gehabt ichhab es nochmals geschrieben und dann hats funktioniert...
Antworten