
Neuling sucht Rat
Code: Alles auswählen
import random
def tabellenkopf():
print("{0:15}{1:15}{2:15}{3:15}{4:15}".format("Tag","KM Stand","KM Stand","KM in eine","Gesamt KM"))
print("{0:15}{1:15}{2:15}{3:15}{4:15}".format(" ","Fahrtbeginn", "Fahrtende", "Richtung"," "))
def erzeugenTabelle(kmStand, arbeitsTage):
zuschussStrecke = 0
for i in range(1,arbeitsTage+1,1):
fahrtStreckeGesamt = random.randint(80,83)
fahrtStreckeEinfach = fahrtStreckeGesamt/2
ChancePrivat = random.randint(1,4)
if ChancePrivat == 1:
privatStrecke = random.randint(5,25)
else:
privatStrecke = 0
print("{0:15}{1:15}{2:15}{3:15}{4:15}".format(i, kmStand, kmStand+fahrtStreckeGesamt, fahrtStreckeEinfach, fahrtStreckeGesamt))
kmStand = fahrtStreckeGesamt + kmStand + privatStrecke
zuschussStrecke += fahrtStreckeEinfach
return zuschussStrecke
def berechnungZuschuss(zuschussStrecke):
zuschussJeKM = 0.17
zuschuss = zuschussStrecke * zuschussJeKM
print("Der Zuschuss beträgt {0:5.2f} Euro".format(zuschuss))
#Hauptprogramm
x=0
while x==0:
kmStand = input("Kilometerstand am Ende des letzten Monats: ")
try:
kmStand = int(kmStand)
x=1
except:
print("Falsche Eingabe")
continue
x==1
while x==1:
arbeitsTage = input("Wieviel Tage wurden diesen Monat gearbeitet: ")
try:
arbeitsTage = int(arbeitsTage)
x=0
except:
print("Falsche Eingabe")
continue
tabellenkopf()
zuschussStrecke = erzeugenTabelle(kmStand, arbeitsTage)
berechnungZuschuss(zuschussStrecke)
Code: Alles auswählen
def tabellenkopf():
print("{0:15}{1:15}{2:15}{3:15}{4:15}".format("Tag","KM Stand","KM Stand","KM in eine","Gesamt KM"))
print("{0:15}{1:15}{2:15}{3:15}{4:15}".format(" ","Fahrtbeginn", "Fahrtende", "Richtung"," "))
Code: Alles auswählen
def erzeugenTabelle(kmStand, arbeitsTage):
zuschussStrecke = 0
for i in range(1,arbeitsTage+1,1):
fahrtStreckeGesamt = random.randint(80,83)
fahrtStreckeEinfach = fahrtStreckeGesamt/2
ChancePrivat = random.randint(1,4)
if ChancePrivat == 1:
privatStrecke = random.randint(5,25)
else:
privatStrecke = 0
print("{0:15}{1:15}{2:15}{3:15}{4:15}".format(i, kmStand, kmStand+fahrtStreckeGesamt, fahrtStreckeEinfach, fahrtStreckeGesamt))
kmStand = fahrtStreckeGesamt + kmStand + privatStrecke
zuschussStrecke += fahrtStreckeEinfach
return zuschussStrecke
Code: Alles auswählen
def berechnungZuschuss(zuschussStrecke):
zuschussJeKM = 0.17
zuschuss = zuschussStrecke * zuschussJeKM
print("Der Zuschuss beträgt {0:5.2f} Euro".format(zuschuss))
Abschließend noch die Frage ob
Code: Alles auswählen
#Hauptprogramm
x=0
while x==0:
kmStand = input("Kilometerstand am Ende des letzten Monats: ")
try:
kmStand = int(kmStand)
x=1
except:
print("Falsche Eingabe")
continue
x==1
while x==1:
arbeitsTage = input("Wieviel Tage wurden diesen Monat gearbeitet: ")
try:
arbeitsTage = int(arbeitsTage)
x=0
except:
print("Falsche Eingabe")
continue
Das mit der Formatierung im Tabellenkopf könnte man auch so machen:
Oder als Funktion:
Oder vielleicht auch so:
Möglich wäre aber auch dies:
Letzteres in Funktionsform und ein bißchen erweitert:
Wie immer gilt der Hinweis, dass `print` in einer Funktion meistens keine gute Idee ist, da nicht wirklich testbar und eingeschränkt in der Verwendbarkeit.
Code: Alles auswählen
>>> ueberschriften = ["Tag","KM Stand","KM Stand","KM in eine","Gesamt KM"]
>>> kopfzeile = ''.join('{:15}'.format(text) for text in ueberschriften)
>>> print(kopfzeile)
Tag KM Stand KM Stand KM in eine Gesamt KM
Code: Alles auswählen
def gib_kopfzeile(ueberschriften):
return ''.join('{:15}'.format(text) for text in ueberschriften)
print(gib_kopfzeile(["Tag","KM Stand","KM Stand","KM in eine","Gesamt KM"]))
Code: Alles auswählen
>>> print((len(ueberschriften) * '{:15}').format(*ueberschriften))
Tag KM Stand KM Stand KM in eine Gesamt KM
Code: Alles auswählen
>>> print(*map('{:15}'.format, ueberschriften), sep='')
Tag KM Stand KM Stand KM in eine Gesamt KM
Code: Alles auswählen
def gib_kopfzeile_aus(ueberschriften, spaltenbreite=15):
vorlage = '{{:{}}}'.format(spaltenbreite)
print(*map(vorlage.format, ueberschriften), sep='')
@Tengel: es ist sehr schwierig, beim ersten Schritt perfekten Code zu schreiben. Jeder verbessert seinen Code kontinuierlich. Extrahiert Funktionen, schreibt sie allgemeiner, fügt Optionen hinzu, usw.
Ich hab an Deinem Programm noch ein paar Kleinigkeiten geändert:
Jede Funktion sollte nur eine Sache machen, und die so allgemein wie möglich/nötig.
Zum Beispiel »erzeugenTabelle« erzeugt eine Tabelle, wandelt sie in einen String um und gibt diesen aus.
Was passiert, wenn Du die Ausgabe in eine Datei schreiben, oder die Tabelle in Excel importieren willst?
Du brauchst eine komplett neue Funktion.
Ich habe drei Funktionen, »create_table« erzeugt nur die Daten, »str_table« wandelt sie in einen String, »print« gibt sie auf dem Bildschirm aus.
schreibt die selbe Ausgabe in eine Datei.
erzeugt eine csv-Datei.
Dadurch bin ich viel freier, und kann einmal geschriebenen Code viel öfter wiederverwenden.
Lass Dich nicht entmutigen. Ich will Dir nur zeigen, wohin Dein Weg noch gehen kann. Bis ich auf diesem Niveau war, sind einige Jahre vergangen. Aber ich finde, an guten Beispielen lässt sich am besten lernen.
Ich hab an Deinem Programm noch ein paar Kleinigkeiten geändert:
Code: Alles auswählen
from itertools import zip_longest, chain
import random
def input_int(prompt):
"""Input an int"""
while True:
try:
return int(input(prompt))
except ValueError:
print("Falsche Eingabe")
def str_table(header, data, column_width=15):
"""Convert table to string representation"""
header_lines = [text.split('\n') for text in header]
head = zip_longest(*header_lines, fillvalue='')
template = "{{:{}}}".format(column_width)*len(header)
return '\n'.join(template.format(*line)
for line in chain(head, data))
def create_table(km_stand, arbeits_tage):
result = []
zuschuss_strecke = 0
for tag in range(1,arbeits_tage+1):
fahrtstrecke_gesamt = random.randint(80,83)
fahrtstrecke_einfach = fahrtstrecke_gesamt/2
privatstrecke = random.randint(5,25) if random.randint(1,4)==1 else 0
result.append((tag, km_stand, km_stand+fahrtstrecke_gesamt, fahrtstrecke_einfach, fahrtstrecke_gesamt))
km_stand += fahrtstrecke_gesamt + privatstrecke
zuschuss_strecke += fahrtstrecke_einfach
return result, zuschuss_strecke
def calc_zuschuss(zuschuss_strecke):
return 0.17 * zuschuss_strecke
HEADER = ("Tag","KM Stand\nFahrtbeginn","KM Stand\nFahrtende","KM in eine\nRichtung","Gesamt KM")
def main():
km_stand = input_int("Kilometerstand am Ende des letzten Monats: ")
arbeits_tage = input_int("Wieviel Tage wurden diesen Monat gearbeitet: ")
data, zuschuss_strecke = create_table(km_stand, arbeits_tage)
zuschuss = calc_zuschuss(zuschuss_strecke)
print(str_table(HEADER, data))
print("Der Zuschuss betraegt {0:5.2f} Euro".format(zuschuss))
if __name__=='__main__':
main()
Zum Beispiel »erzeugenTabelle« erzeugt eine Tabelle, wandelt sie in einen String um und gibt diesen aus.
Was passiert, wenn Du die Ausgabe in eine Datei schreiben, oder die Tabelle in Excel importieren willst?
Du brauchst eine komplett neue Funktion.
Ich habe drei Funktionen, »create_table« erzeugt nur die Daten, »str_table« wandelt sie in einen String, »print« gibt sie auf dem Bildschirm aus.
Code: Alles auswählen
with open('datei','w') as output:
output.write(str_table(HEADER, data))
Code: Alles auswählen
import csv
with open('datei.csv','w') as output:
csv_out = csv.writer(output)
csv_out.writerow(HEADER)
csv_out.writerows(data)
Dadurch bin ich viel freier, und kann einmal geschriebenen Code viel öfter wiederverwenden.
Lass Dich nicht entmutigen. Ich will Dir nur zeigen, wohin Dein Weg noch gehen kann. Bis ich auf diesem Niveau war, sind einige Jahre vergangen. Aber ich finde, an guten Beispielen lässt sich am besten lernen.
Du hast halt noch nicht die Erfahrung, um zu wissen, dass es auch anders geht. Zum einen muss man ja erstmal die Standardbibliothek von Python sowie dessen Sprachmittel in ausreichendem Umfang kennen. Und zum anderen ist auch die "Programmier-Denke", sowie die Fähigkeit, möglichst idiomatischen Code in der jeweiligen Sprache (anders ausgedrückt: "sprachtypischen" Code) zu schreiben, eine reine Trainingssache, wenn du so willst.Tengel hat geschrieben:Also hab ich mal wieder die schlechteste Möglichkeit getroffen ja -.-" ....is auch ein Talent
Ich selbst bin vor circa 5 Jahren mit Python angefangen und habe mit dieser Sprache gelernt, zum ersten Mal "richtig" zu programmieren. Dabei habe ich mich je nach Zeit und Motivation mal mehr, mal weniger mit der Materie befasst. Meine Programme von damals waren in einer Qualität, die ich schon fast gar nicht mehr zeigen möchte. Vielleicht höchtens noch als Beispiel für die typische Weiterentwicklung vom totalen Anfänger zum - wenn ich das so sagen darf - Fortgeschrittenen.
Will sagen: Wenn du am Ball bleibst und dich wirklich stetig verbesseren willst, wenn du vor allem auch in fremdem Code nach Vorbildern guckst und wenn du dich nicht allzu dumm bei der Sache anstellst, dann wird das schon. Es ist halt so, dass man im wahrsten Sinne des Wortes eine neue Sprache lernt. Mit allem, was dazu gehört: Vokabeln, Grammatik, Ausdrucksweise, etc. Das alles muss erstmal in einem reifen und verstanden werden. Das braucht halt seine Zeit.
Wie wichtig ist den ein Kapitel über Datenbanken?
Aha - nur gut das ich gar nichts verstehe und nur die Hälfte der 100.000 neuen Befehle/Funktionen erklärt wird und um sich das dann auch "anschauen" zu können muss man nochmal was umständliches schreiben oO?
Ich glaub ich mach doch erst das Kapitel übers Internet - evtl. sind da die Dinge die mir fehlen ....
Hm - laut Buch soll ich XAMPP benutzen um einen lokalen Server(mit Apache) zu erstellen - nun wird der Fehler angezeigt das SSL 443 bereits genutzt wird??
Code: Alles auswählen
import sqlite3
#Verbindung zur Datenbank erzeugen
connection = sqlite3.connect("firma.db")
#Datensatzcursor erzegen
cursor = connection.cursor()
#Tabelle erzeugen
sql = "Create Table personen("\
"name Text,"\
"vorname Text,"\
"personalnummer INTEGER PRIMARY KEY,"\
"gehalt FLOAT,"\
"geburtstag TEXT)"
cursor.execute(sql)
#Datensatz erzeugen
sql = "Insert INTO personen VALUES('Maier',"\
"'Hans',6714, 3500,'15.03.1962')"
cursor.execute(sql)
connection.commit()
#Datensatz erzeugen
sql = "Insert INTO personen VALUES('Schmitz',"\
"'Peter', 81343, 3750, '12.04.1958')"
cursor.execute(sql)
connection.commit()
connection.close()
Ich glaub ich mach doch erst das Kapitel übers Internet - evtl. sind da die Dinge die mir fehlen ....
Hm - laut Buch soll ich XAMPP benutzen um einen lokalen Server(mit Apache) zu erstellen - nun wird der Fehler angezeigt das SSL 443 bereits genutzt wird??
Wenn Du etwas mit Datenbanken machen möchtest, ist es wichtig. Wenn nicht, dann nicht. Zumal man mit SQL eine neue Sprache lernen muss.
Bevor man in weitergehende Themen einsteigt, sollte man meiner Meinung nach die Grundlagen sehr gefestigt haben.
Wenn Du die Grundlagen drin hast, schnappst Du Dir ein Themengebiet, das Dich interessiert und motivieren kann (!). Damit ist man dann gut ein Leben lang beschäftigt
und lernst die Sprache(n) richtig.
Grüße ... bwbg
Bevor man in weitergehende Themen einsteigt, sollte man meiner Meinung nach die Grundlagen sehr gefestigt haben.
Wenn Du die Grundlagen drin hast, schnappst Du Dir ein Themengebiet, das Dich interessiert und motivieren kann (!). Damit ist man dann gut ein Leben lang beschäftigt

Grüße ... bwbg
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Hallo Tengel,
solche Bücher sind meistens so aufgebaut, dass sie alles ein bisschen abdecken. Dabei wird meist leider mehr Wert auf Quantität statt auf Qualität gesetzt, weil man auf dem Umschlag eine sehr lange Liste an Themen aufführen kann
.
Such Dir die Themen raus, die für Dich wichtig sind. Vertieftes Wissen findest Du dann wahrscheinlich sowieso nur im Internet.
Warum man für ein Internet-Kapitel in Python Apache braucht müsste mir mal der Autor noch erklären???
Zum Thema Datenbanken. Der Beispielcode ist mal wieder Schrott.
Bei mehrzeiligen Strings »\« zu benutzen ist Quatsch, führt nur zu seltsamen Fehlermeldungen.
Werte direkt in Strings zu packen ist nicht nur blöd sondern höchst gefährlich, wenn dann der unwissende Leser anfängt Strings aus unbekannter Quelle zusammenzustückeln.
Warum also dann nicht gleich den richtigen Umgang zeigen:
solche Bücher sind meistens so aufgebaut, dass sie alles ein bisschen abdecken. Dabei wird meist leider mehr Wert auf Quantität statt auf Qualität gesetzt, weil man auf dem Umschlag eine sehr lange Liste an Themen aufführen kann

Such Dir die Themen raus, die für Dich wichtig sind. Vertieftes Wissen findest Du dann wahrscheinlich sowieso nur im Internet.
Warum man für ein Internet-Kapitel in Python Apache braucht müsste mir mal der Autor noch erklären???
Zum Thema Datenbanken. Der Beispielcode ist mal wieder Schrott.
Bei mehrzeiligen Strings »\« zu benutzen ist Quatsch, führt nur zu seltsamen Fehlermeldungen.
Werte direkt in Strings zu packen ist nicht nur blöd sondern höchst gefährlich, wenn dann der unwissende Leser anfängt Strings aus unbekannter Quelle zusammenzustückeln.
Warum also dann nicht gleich den richtigen Umgang zeigen:
Code: Alles auswählen
import sqlite3
connection = sqlite3.connect("firma.db")
cursor = connection.cursor()
cursor.execute("""CREATE TABLE personen (
name TEXT,
vorname TEXT,
personalnummer INTEGER PRIMERY KEY,
gehalt FLOAT,
geburtstag DATE
)""")
INSERT_PERSON = """INSERT INTO personen (
name, vorname, personalnummer, gehalt, geburtstag
) VALUES (:name, :vorname, :personalnummer, :gehalt, :geburtstag)"""
cursor.executemany(INSERT_PERSON, [
{'name':'Maier', 'vorname':'Hans', 'personalnummer': 6714,
'gehalt': 3500, 'geburtstag':'15.03.1962'},
{'name':'Schmitz', 'vorname':'Peter', 'personalnummer': 81343,
'gehalt': 3750, 'geburtstag':'12.03.1958'},
])
connection.commit()
connection.close()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Genau so ist es. Daher habe ich das gefühl dass je dicker ein Buch wird, desto wertloser, weil dann alles mögliche an Quatsch besprochen wird und vieles davon zweifelhafter Qualität weils reingehamstert wird. Da lobe ich mit K&R oder The D Programming Language, gerade letzteres geht echt in die Tiefe aber bleibt immer relevant. Ich denke so 300-400 Seiten ist das Optimum. Den Vogel abgeschossen aht Programming Python, wo die damals aktuelle Fassung Grail besprochen hat, einen Browser der damals schon seit ca. 10 Jahren tot war. Einfach aus der vorherigen Ausgabe übernommen, ohne zu schauen ob es relevant ist.Sirius3 hat geschrieben:solche Bücher sind meistens so aufgebaut, dass sie alles ein bisschen abdecken. Dabei wird meist leider mehr Wert auf Quantität statt auf Qualität gesetzt, weil man auf dem Umschlag eine sehr lange Liste an Themen aufführen kann.
Seitdem habe ich etwas den Glauben an O'Reilly-Bücher verloren. In letzter Zeit wurden die von Addison Wesley, Manning, PragProg, No Starch und Packt im wesentlichen überholt.
PHP-Bücher machen das auch so!!!1!Sirius3 hat geschrieben:Warum man für ein Internet-Kapitel in Python Apache braucht müsste mir mal der Autor noch erklären???
@Sirius3: du kannst auch das ``with``-Statement noch einbauen, evtl. mit dem ``closing``-Contextmanager, dann ist es noch schicker.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Also momentan wüsste ich erstmal nicht was ich mit Datenbanken anfangen sollte - dann doch eher Internet da wär am ehesten interessant wie ich ein geschriebenes Programm auf eine Website bekomme(nicht das ich behaupten würde ich könnte was brauchbares von mir geben^^).
Mein super tolles! Buch hat noch 3 Kapitel
- Internet
hab ich nur etwas lustlos rumgeplättert, irgendwie war es auch klar das es zu einfach wäre so print... einfach fürs Web nutzen zu können ...nein das muss natürlich wieder ganz anders aufgebaut sein -.-"
- Datenbanken
wie gesagt - jucken mich jetzt momentan nicht so besonders
- GUI
am meisten wäre da GUI interessant aber das sind wohl 100000 neue Dinge auf einmal - und wenn ich mir die Codes die ihr hier schreibt anschaue ...denke ich doch das ich die Basics noch nicht wirklich drin hab
Warum man dafür unbedingt Apache nehmen soll ka - aber ich muss mich hier wohl leider outen ...ich bin zwar mit all dieser tollen Technik "groß" geworden - aber für das eigentliche "dahinter" interessiere ich mich erst seit kurzem weswegen ich mich auf das im Buch verlassen habe/ verlassen muss.
Mein super tolles! Buch hat noch 3 Kapitel
- Internet
hab ich nur etwas lustlos rumgeplättert, irgendwie war es auch klar das es zu einfach wäre so print... einfach fürs Web nutzen zu können ...nein das muss natürlich wieder ganz anders aufgebaut sein -.-"
- Datenbanken
wie gesagt - jucken mich jetzt momentan nicht so besonders
- GUI
am meisten wäre da GUI interessant aber das sind wohl 100000 neue Dinge auf einmal - und wenn ich mir die Codes die ihr hier schreibt anschaue ...denke ich doch das ich die Basics noch nicht wirklich drin hab

Warum man dafür unbedingt Apache nehmen soll ka - aber ich muss mich hier wohl leider outen ...ich bin zwar mit all dieser tollen Technik "groß" geworden - aber für das eigentliche "dahinter" interessiere ich mich erst seit kurzem weswegen ich mich auf das im Buch verlassen habe/ verlassen muss.
@Tengel:
Da die Frage doch sehr weit von der Eingangsfragestellung abweicht, solltest Du besser einen neuen Thread aufmachen. Am besten unter "Offtopic", da es nichts Pythonspezifisches ist. Ein Mamutthread wie dieser mit zig verschiedenen Fragestellungen ist für andere wenig hilfreich.
Da die Frage doch sehr weit von der Eingangsfragestellung abweicht, solltest Du besser einen neuen Thread aufmachen. Am besten unter "Offtopic", da es nichts Pythonspezifisches ist. Ein Mamutthread wie dieser mit zig verschiedenen Fragestellungen ist für andere wenig hilfreich.
@Tengel: Nein, das ist nicht so schwer. Steckt in dieser Aussage jetzt eine Frage drin? 
