hilfe hausaufgabe python

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.
KlaliB
User
Beiträge: 50
Registriert: Mittwoch 13. Mai 2009, 13:28

140 data 7,500,200,100,50,20,10,5
wie macht man das bei python ?
und wieso steht dort eine sieben?
BlackJack

Die 7 ist die Anzahl der Notenwerte. In Python würde man die Notenwerte in eine Liste oder ein Tupel stecken. Die 7 bräuchte man da nicht explizit, weil man zum einen die Länge der Liste oder des Tupels zur Laufzeit ermitteln kann, und zum anderen diese Länge auch nicht braucht, da man direkt über die Elemente einer Liste oder eines Tupels iterieren kann, ohne den Umweg über eine Zählschleife und einen Index.
KlaliB
User
Beiträge: 50
Registriert: Mittwoch 13. Mai 2009, 13:28

Code: Alles auswählen

print"geldautomat"
notenwert=("500","200","100","50","20","10","5")
print len(notenwert)
betrag=input("wieviel so ausgezahlt werden?")
if betrag%5!=0:
    print"automat kann keine Münzen auszahlen"

ok, geht nix mehr.
habe so manches versucht mit if elif else, for i in range und auch noch so ne sache die in byte python steht.
geht nicht mehr weiter :?: :?: :?: :x
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

na so funktioniert das halt auch nicht - solange statements und funktionen mixen bis das richtige programm rauskommt.

wenn du jetzt das tutorial durchgearbeitet hast wäre der nächste schritt, dass du mal genau aufschreibst wie das programm ablaufen soll. dafür braucht man aber auch übung.

ich glaube fast, dass das zu schwer ist als erstes programm. und das ist doch sicher auch nicht euer erstes programm, oder? was hast du denn gemacht die ganze zeit in dem kurs, gepennt?
hast du unterlagen, mitschrift? du solltest evtl mal vorne anfangen und wenigstens einige der alten aufgaben durcharbeiten.
http://www.kinderpornos.info
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Dill hat geschrieben:na so funktioniert das halt auch nicht - solange statements und funktionen mixen bis das richtige programm rauskommt.
Vielleicht war das auch der Versuch, ein Basic-Programm in Pyton zu übersetzen, was wahrscheinlich ohnehin nicht gelingen wird. Wenn man versucht, C64-BASIC und Python gleichzeitig zu lernen, kann man ja schon mal durcheinander kommen.

ich glaube fast, dass das zu schwer ist als erstes programm.
Es ist aber auch nicht so kompliziert, wie es uns durch den Kopf geht oder wie Blackjack es formuliert hat: Wenn auch eine unelegante Lösung zählt, die Zahl der Notenwerte klein und konstant ist und wenn es egal ist, wie gestückelt wird, braucht man dafür nicht mal eine Liste oder eine Schleife. Eine Folge von if's für jeden Notenwert und ein bisschen Dividieren und fertig ist die Kiste in einem völlig linearen Programm.


@KlaliB: Dein Programm kann bisher fragen, welche Summe abgehoben werden soll und dann prüfen, ob die durch fünf teilbar ist. Wenn die Summe durch fünf teilbar ist, was soll das Programm dann tun? Und was dann als nächstes? Was würdest Du tun, wenn ich Dir sage, Du sollst 125 EUR in Geldscheine stückeln - wie würdest Du vorgehen um herauszufinden, welche Scheine Du mir gibst?
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde eher sagen: Vielleicht zunächst eine unschöne Lösung finden, die immerhin korrekt läuft und dann sehen, wo man optimieren kann. Ich weiß nicht, wie andere Leute vorgehen, aber bei mir ergibt sich die Struktur eines Skripts/Programms meist während der Erstellung. Ich mache mir da nicht großartig Notizen zu, sondern der Plan ist quasi in meinem Kopf. Ist ja auch klar, wenn man gerade drin ist und alle 1-2 Tage mal wieder was macht (so gehe ich vor, der Rest ist oft "sacken lassen", wenn etwas auf Anhieb zu hoch erscheint und dann im wahrsten Sinne des Wortes ne Nacht drüber schlafen, denn vor dem Einschlafen kommen mir oft die besten Ideen), dann kennt man sein Programm eben.
BlackJack

@snafu: Ich denke so kann man vorgehen, wenn man schon programmieren kann. Dann wählt man aus Erfahrung schon ohne grosse Planung die richtigen Datenstrukturen, wobei man schon eine grobe Idee im Kopf hat, wie das Programm auf die Daten zugreift. Aber wenn man diese Erfahrung nicht hat, und einfach drauf losprogrammiert, strukturiert man die Daten unter Umständen so, wie's ganz am Anfang mal Sinn macht, und bekommt dann im Laufe der Programmierung immer mehr und mehr Probleme damit.

Also als Anfänger, vor allem wenn's einem schwer fällt, sollte man sich schon vorher einen groben Ablaufplan machen.

Wahrscheinlich machst Du (snafu) das auch, nur halt nicht mehr bewusst und auf Papier, sondern automatisch und im Kopf.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

das geht imo nur mit kleinen skripten oder problemen die man so ähnlich schon gelöst hat. das werden natürlich immer mehr.
für klalib ist das sicher eine ungeeignete vorgehensweise. aber er wird auch nicht wissen wie man überhaupt zu pseudocode oder einem ablaufplan kommt. das kann man halt nur lernen durch üben. und dafür ist das problem zu schwer denke ich.
http://www.kinderpornos.info
KlaliB
User
Beiträge: 50
Registriert: Mittwoch 13. Mai 2009, 13:28

ich habe etwas gefunden im internet also es ist ähnlich wie meins aber läuft bei mir nicht. ist das vieleicht in einem älteren pytohn geschrieben worden?

Code: Alles auswählen

class Bankomat:
  def __init__(self, fuenfzig = 0, hundert = 0):
    if fuenfzig == 0:
        self.fuenfziger = 20
    else:
        self.fuenfziger = fuenfzig

    if hundert == 0:
        self.hunderter = 30
    else:
        self.hunderter = hundert

    self.auszahlen = {
        50   : (1, 0),        
        100  : (2, 0),        
        150  : (1, 1),
        200  : (2, 1),
        300  : (2, 2),
        400  : (2, 3),
        500  : (2, 4),
        600  : (2, 5),
        800  : (4, 6),
        1000 : (4, 8)
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Scheißegal in was für einem Python das geschrieben ist. Das ist nur ein Teil eines Programms und das ist der Versuch einer objektorientierten Lösung - das ist viel zu kompliziert für Dich. Außerdem kann es nicht beliebige Beträge herausgeben. Und es kennt keinen 20 EUR-Schein und und und ...
Mach es selbst und mach es einfach:

Wie würdest Du mir 125 EUR in Scheinen geben? Wie würdest Du mir 175 EUR geben, wie würdest Du mir x EUR geben?
BlackJack

@Bernhard: Also meine Antwort wäre "Gar nicht!" oder "Wofür!?". SCNR :twisted:
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

was für ein gruseliger code.

klalib, so kommst du nicht weiter. du machst den 4. schritt vor dem ersten. du musst dir jetzt erstmal klar werden was überhaupt zu tun ist. hat wenig mit programmieren zu tun.

mach dir mal gedanken zu der frage von bernhard. und schreib das einfach in deutsch auf.
(du hast von jedem möglichen schein einen grossen stapel. jetzt will ich 175€ von dir, was tust du?)
http://www.kinderpornos.info
KlaliB
User
Beiträge: 50
Registriert: Mittwoch 13. Mai 2009, 13:28

Dill hat geschrieben:was für ein gruseliger code.

klalib, so kommst du nicht weiter. du machst den 4. schritt vor dem ersten. du musst dir jetzt erstmal klar werden was überhaupt zu tun ist. hat wenig mit programmieren zu tun.

mach dir mal gedanken zu der frage von bernhard. und schreib das einfach in deutsch auf.
(du hast von jedem möglichen schein einen grossen stapel. jetzt will ich 175€ von dir, was tust du?)
1x100€ 1x50€ 1x20€ 1x5€
aber wie soll ich das machen ich mach auch byte python durchgelesen und so
mit tupel oder liste allein geht das nicht
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Du hast zwei verschiedene Probleme: Du musst A Byte of Python durchlesen und Du musst Dir über Deinen Problemlösungsweg klar werden.

Du hast gesagt, wie Du 175 EUR herausgibst.
Jetzt beantworte bitte dasselbe für folgende Beträge:
125 EUR, 200 EUR, 225 EUR, 105 EUR, 75 EUR,...
(keine Verarsche, ist ernst gemeint!)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Viel wichtiger ist noch, dass du erklären kannst, *wie* du auf die Lösung gekommen bist. Schreibe Schritt für Schritt auf, wie du dabei vorgegangen bist.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

durchlesen reicht natürlich nicht. du musst die sachen auch ausprobieren.
das geht ja sehr schön im interpreter. grössere sachen schreibst du im texteditor. dann kansst du die entweder in den interpreter reinkopieren oder speichern als datei.py und mit

python datei.py

ausführen.

ja, jetzt schreib mal wie du die anderen beträge ausgeben würdest. ziel ist eine handlungsanweisung zu finden. stell dir vor du müsstest das jemandem der dein geld an leute verteilen soll haarkelin erklären. stell dir vor das derjenige alles sehr genau nimmt aber auch sehr dumm ist.
http://www.kinderpornos.info
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

http://paste.pocoo.org/show/118529/

Hier ein Beispiel (das paket texttable wird benötigt):

Code: Alles auswählen

$ ./cash_machine.py
Enter the requested money: 740
Please enter your PIN: 7249
+------+-----------------+
| Note | Number of Notes |
+======+=================+
| 500  | 1               |
+------+-----------------+
| 200  | 1               |
+------+-----------------+
| 20   | 2               |
+------+-----------------+
Idee zum Erweitern: Konto für eine Woche sperren, wenn eine falsche PIN eingegeben wurde.


für die, die es nicht gemerkt haben: Ich habe bewusst schrecklichen Code geschrieben, indem ich unnötig Klassen verwendete und auf das Abfangen von Exceptions verzichtete.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

derdon hat geschrieben:Idee zum Erweitern: Konto für eine Woche sperren, wenn eine falsche PIN eingegeben wurde.
Dreimal falsche PIN eingegeben, warst du noch nie bei einem Bankomaten (Geldautomat)?

Die Klassen sind so nichtmal so dumm, nur einfach falsch implementiert.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

klalib, am besten schaust du dir die lösung von don erst garnicht an. das wird dich nur verwiren.
http://www.kinderpornos.info
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dill hat geschrieben:das geht imo nur mit kleinen skripten oder problemen die man so ähnlich schon gelöst hat. das werden natürlich immer mehr.
Würde ich persönlich (jeder arbeitet anders) eigentlich nicht sagen. Man darf halt nicht geizig sein, beim Anlegen von neuen Dateien.

Ich brauche ja für mein Projekt, das irgendwann mal eine Art `mechanize`-Klon mit Zusatzfunktionen werden soll, z.B. sehr oft Zugriff auf die JavaScript-Engine von WebKit. In den ersten drei Methoden habe ich die Strings noch selbst geschrieben, dann aber gemerkt wie umständlich das ist (Unübersichtlich, ständige Wiederholung, viele Zeilen um etwas ähnliches zu erreichen). Folglich musste ein Wrapper her. Da der aber ein zusätzliches Tool für mich ist und ich - wenn es sowas geben würde - mit Sicherheit ein 3rd Party Modul genutzt hätte, macht es für mich auch Sinn, den Kram in ein eigenes Modul zu stecken.

Der Wrapper hat seine eigenen Tests und das "Hauptmodul", welches die Sachen ja im Kontext des Gesamtprojektes nutzen muss, hat auch eigene. Und ich bin mir sicher, dass ich bspw. den formularbezogenen Code auch bald auslagern werde (allein schon zwecks Kompatibilität zu `HTMLForm` von `mechanize` bzw. `ClientForm`). Und so geht das immer weiter... Zellteilung, quasi. ;)

Ich denk mir halt, dass alles gewissermaßen eigene Programme sind, die miteinander kombiniert werden. Eben so, als würde ich mit Fremdmodulen arbeiten. Mit diesem Klötzchen-Aufbau-Prinzip komme ich persönlich viel besser zurecht, als wenn ich mir sonst was für Planungen und Theorien mache, die im Entwicklungsprozess ohnehin zigfach umgestellt werden, weil sie sich als unpraktikabel erweisen.
Antworten