x y^^

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.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Oh maaan, das war IRONIE!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

BlackJack hat geschrieben:Oha, ich glaube wir sind wieder mal kurz davor uns für's nicht-duschen rechtfertigen zu müssen. ;-)
Das lasse ich mir nicht vorwerfen. Ich habe mich für dieses Jahr schon einmal geduscht! :wink:
Das Leben ist wie ein Tennisball.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Und wer sein Zimmer nicht verlässt und nicht im Dreck spielt, der muss sowieso nicht duschen. Abstauben muss aber sein, auf der weißen Haut sieht man ja jedes Staubkorn...
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@Crackus: Wie war noch gleich deine Frage? Die hab ich naemlich noch immer nicht ganz verstanden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Es ging um ein "b" in Zeile 30 oder so ... da finde ich aber nix ;-)

Code: Alles auswählen

    SchreibenP = AnzahlPflanzen
    SchreibenP = AnzahlPflanzen + str(Pflanze)+"\n"
könnte man übersichtlicher so schreiben:

Code: Alles auswählen

SchreibenP = " ".join([AnzahlPflanzen, str(Pflanze), "\n"])
Wobei die Namen nicht PEP8konform sind! Das gilt aber für fast alles in Deinem Cde -> daran solltest Du arbeiten!

Für das Zusammenbauen von Pfaden sollte man os.path.join() verwenden.

Du hast da unheimliche viele gleichartige Dateioperationen drin. Evtl wäre es besser das in eine Funktion zu packen (Übergabeparameter: Dateiname, Rückgabe: Dateiinhalt) und die dann mit with oder try ... except abzusichern.

"Rechnungsnummer1()" ist mal kein guter Funktionsname. Was soll der aussagen?

In dieser Funktion bindest Du den Inhalt der Datei an eine Variable count. Das suggeriert, dass Du eigentlich irgend eine Größe (Anzahl Zeichen, Anzahl Zeilen, usw) haben möchtest! Das hast Du aber nicht!

Wieso verwendest Du global? Übergib den Funtkionen doch einfach die Werte als Parameter! Ist doch viel einfacher und um so viel besser bei der Strukturierung.

Die "Menüführung" ist ein wenig ... naja. Bei dem prompt "Anzahl Pflanzen" erwarte ich nicht, dass ein "Ende" (muss auch noch ausgeschrieben und case sensitiv sein!), das Programm beendet. wohl gemerkt "beendent", da danach ja noch irgend eine Dateimanipulation stattfindet. Ich würde das User Interface da besser kapseln und zugänglicher machen. Gegen TUIs ist ja nichts einzuwenden, aber man kann die auch komfortabler gestalten ;-)

Dazu kommt der Code auf Modulebene. Mach den weg und trenne den Ablauf mehr von der Eingabe, dann wirds auch irgend wie handlicher. (Und auch ggf. für Testfälle einfacher -> Funktion schreiben, die ohne Eingabe die einzelnen Schritte druchläuft!)

Generell wären ein paar mehr Infos nicht schlecht:
- Welches Problem genau löst dein Programm?
- Wie sehen die Dateien aus? (Format!)
- Ist das Dateiformat vorgegeben?

So könnte man Dir bessere Tipps hinsichtlich des Aufbaus und ggf. guter Libs geben!
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

das gilt natürlich nicht für alle die meisten hier haben warscheinlich abi studieren informatik und sind einfach nur hilfsbereit

und wenn der kommentar wäre
"Man sieht du bist ein Anfänger das kann man so und so auch flexibler machen" dann wäre alles okay aber "Wir werden alle Sterben" ist keine ironie allenfalls eine nicht witzige Srakastische anmerkung wobei ich was für schwarzen humor habe

Ich kriege jetzt demnächst eine original rechnung von ihm (Raed) dann weiß ich wie ich es aufbau

Mein ziel ist es ein programm zu schreiben was eine rechnung schreibt
mein Problem ist das der Rechnungsaufbau in etwa so aussehen soll

Code: Alles auswählen

Anzahl                      Blume                                Kosten
10                            Tulpe                                 3.5€
3                             Geranie                               1.5€
   
und ich es nur so hinkriege

Code: Alles auswählen

Anzahl                       Blume                           Kosten
10                               Tulpe                            3.5€
3                              Geranie                            1.5€
100000                               Gänseblume                            10000€

also das die abstände zwischen den einzelnen spalten sich nicht verändern


Ziel der Woch: ohne Hände und Füße kommunizieren
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Wir wissen aber immer noch nicht, WIE die Daten denn ausgegeben werden. Du schreibst nur, dass du es nicht hinbekommst, aber WIE und WO gibst du die Daten aus? In der Konsole? Auf einem Fenster (wenn ja, welches Toolkit)?
Wenn's die Konsole ist:
http://www.python.org/doc/2.5.2/lib/module-pprint.html
Gruß!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also das bringt uns doch schon ein bisschen weiter!

Ich will Dir jetzt nicht die Laune verderben, aber diese Ausgabe sollte Dein kleinstes Problem sein ;-)

Grundsätzlich fehlt Dir doch eine grundlegende Datenstruktur! Wie speicherst Du einzelne Datensätze (also eine Zeile?) Woher nimmst Du den Preis für eine "Blume"? Wie kannst Du dann die Endwerte (Summe, MwSt und beides als Summe) berechnen?

Das sind imho die grundlegenden Fragen, die man sich stellen muss!

Danach kommt dann sicherlich die Frage, wie das ganze ausgegeben werden soll. Will man ein PDF oder doch eine besser manipulierbare Datei? Oder das ganze doch eher Datenbank basiert?

Ich würde bei so etwas sicherlich zu Datenbanken greifen. Das macht die Verwaltung der Daten relativ einfach und ermöglicht darüber hinaus auch noch später schöne Statistiken.

Als Ausgabe bietet sich imho OO.org an. Wenn man seine Rechnungen sowieso noch mit allem Piff und Paff wie Logo, Anschrift usw. nach DIN-Norm verpacken will, ist ja "nur" der eigentliche Rechnungs-Inhalt dynamisch. Diesen kann man dann sicherlich per Templating dann einsetzen - oder das ganze per CVS-Import realisieren.

Aber um auf deine Frage zurückzukommen:
http://docs.python.org/library/stdtypes ... operations
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Crackus hat geschrieben:ich schreibe aber wirklich für laien (also leute die mich weniger als 5 jahre kennen) ziemlich unverständlich aber ich arbeite dran^^
Wenn ich das alles so lese, frage ich mich, wer ist eigentlich der Laie?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Als Ausgabe bietet sich imho OO.org an. Wenn man seine Rechnungen sowieso noch mit allem Piff und Paff wie Logo, Anschrift usw. nach DIN-Norm verpacken will, ist ja "nur" der eigentliche Rechnungs-Inhalt dynamisch. Diesen kann man dann sicherlich per Templating dann einsetzen - oder das ganze per CVS-Import realisieren.
Ich bin vermutlich noch von der alten Schule aber bei sowas fällt mir eher LaTeX als OOo ein :) Dort gibt es sicherlich auch schon fertige Rechnungsklassen, wo man einfach nur noch Text einsetzen muss.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: Ich bin vermutlich noch von der alten Schule aber bei sowas fällt mir eher LaTeX als OOo ein :) Dort gibt es sicherlich auch schon fertige Rechnungsklassen, wo man einfach nur noch Text einsetzen muss.
Japp - ist sicherlich auch eine schöne Lösung!
problembär

Hi,

ich glaube, was Crackus uns mit seinem Skript sagen wollte - und es hat verdammt lange gedauert, das herauszufinden - ist schlicht:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

PFAD = "/home/Crackus/Desktop/Raed/"

filehandle = open(PFAD + "RaedZahl.txt", "r")
count = filehandle.read()
filehandle.close()

count = count.rstrip("\n")
count = int(count)

rechnung = ["Anzahl   |  Pflanze                                                 | Preis \n",
            "_________|__________________________________________________________|_______________________________________________ \n",
            "         |                                                            \n"]

print "Pflanzen"

while True:

    AnzahlPflanzen = raw_input("Anzahl der Pflanze: ")

    if AnzahlPflanzen == "Ende":
        break

    Pflanze = raw_input("Um welche Pflanze handelt es sich?: ")

    rechnung.append(AnzahlPflanzen + " " + Pflanze + "\n")

    # Euro = input("Wie viel Euro kostet diese Pflanze / Stück?: ")

filehandle = open(PFAD + "Rechnung" + str(count) + ".txt", "w")
filehandle.writelines(rechnung)
filehandle.close()

count += 1

filehandle = open(PFAD + "RaedZahl.txt", "w")
filehandle.write(str(count))
filehandle.close()
Nur kannte er leider keine Listen und keine Wertübergabe an und aus Funktionen (die hier im übrigen auch gar nicht gebraucht werden) :P.

Viele Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@problembär: Nein, das glaube ich nicht! Zeile 29 beherbergt ja immer noch das gleiche Problem.

Und wie schon so oft erwähnt wurde, sollten Pfade per os.path.join() zusammen gebaut werden!

Code auf Modulebene ist ebenfalls idR nicht wünschenswert.

Dateihandling ohne Fehlerbehandlung ist imho auch nicht zu empfehlen.

Wir kennen diese ominöse "RaedZahl.txt" nicht! Was soll da drin stehen? Ein Integerwert? Den so zu parsen ist imho auch eher unglücklich ... (und ebenfalls unsicher!)

Naja, alles in allem etwas kürzer, aber immer noch eine eher unschöne Implementation.

Aber solnage sich Crackus zu grundlegenden Fragen nicht äußert (s. mein 2. Posting vom Dienstag), kommen wir hier eh nicht weiter.
problembär

Ist schon klar, daß die Implementation sch***e ist :roll:.

Ich wollte nur möglichst genau das machen, was Crackus gemacht hat, damit er es nachvollziehen kann.

Gruß
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Crackus hat geschrieben:[...] ich verkaufe das programm...[...]
Das ich nicht lache, an wen, dem könnte ich auch noch ein paar
Programme anbieten... :twisted:
Glaubst du echt, dass du das verkaufen kannst ??!
Sorry, wenn das fies klingt, aber ich bin geschockt.

MfG Jonas :wink:
problembär

Crackus hat geschrieben:ich verkaufe das programm...
jonas hat geschrieben:Das ich nicht lache, an wen
Na, an sich selbst:
Crackus hat geschrieben:ich brauche für mein (bezahltes) programm ...
:mrgreen:

Gruß

P.S.: Vielleicht noch etwas zu seinem Code:
1. Da er keine Listen kannte, hat er für jede Zeile seine Ausgabedatei mit "a" geöffnet, und dann die einzelne Zeile dort hineingeschrieben.
2. Da er nicht wußte, wie man Funktionen Werte übergibt, hat er versucht, globale Variablen zu verwenden.
Antworten