So. Es geht weiter. Ich bin nun seit Vorgestern bei Aufgabe 4.7 von diesem schönen Blatt hier https://www.math.uni-bielefeld.de/~frettloe/teach/vorkurs/Aufgaben.pdf . Es soll ein beliebiger Betrag in Cent eingelesen werden. Also anstelle von 15,53€, sollen es 1553Cent sein. Diese möchte ich dann in beliebige, jedoch passende Münzen stückeln und ausgeben. Entweder als lange Liste ->['2Euro', '2Euro', '2Euro',(...),'2Cent', '2Cent', '1Cent'] oder als kurze Liste mit counter({'2Euro':3,(...)}).
Betrag_input = int(input("Geben Sie den Betrag in Cent an:\n"));
Betrag = [int(i) for i in str(Betrag_input)];
Betrag.reverse(); #Liste umdrehen, damit ich die Centwerte vorne habe
Münzen = [];
#twoCent = []
i = 0;
print(Betrag) #Kontrolle
while i <= len(Betrag): #Solange Zähler kleiner als die Anzahl der Elemente in Liste
#n = 0;
k = 0;
for char in Betrag: #für das jeweilige Element in der List eist folgendes zu tun
if char %2 != 0: #Ist zahl ungerade?
char -= 1;
k = 1; #Da ungerade, auf jeden Fall 1 Centstück vorhanden
#Münzen.append('1Cent')
if char %2 ==0: 'ja?, dann folgendes.
n = char/2;
round(n);
n = int(n);
char -=n*2;
elif char ==1:
k = 1;
elif char %2 ==0: #ist Zahl gerade?
n = char/2;
round(n);
n = int(n)
char -=n*2;
if k == 0:
print("Das war kein gültiger Betrag")
break
i += 1;
del Betrag[0] #lösche den 'char' aus der Liste
#twoCent.extend(['2Cent'*n]);
# twoCent.split('t')
Münzen.extend(['1Cent'*k, '2Cent, '*n])
print(twoCent) #ab hier nur Kontrollausgaben
print(n)
print(k)
print(Betrag)
print(Münzen);
Das ist mein Code bisher.
Wenn ich jetzt eine '9' eingebe erhalte ich:['1Cent', '2Cent, 2Cent, 2Cent, 2Cent']. Bei '99' erhalte ich das ganze 2 mal. bei '999' Drei mal. Bei einer '0' Erhalte ich eine beabsichtigte Fehlermeldung.
Soweit so gut.
Ich denke mir jetzt, dass der Algorithmus soweit erst mal seinen Zweck tut, ich jedoch die Werte anders speichern sollte. Und das ich anderer Seits die Liste [(...), '2Cent, 2Cent, 2Cent, 2Cent'] in dieser Form ---> ['2Cent', '2Cent', (...)] haben sollte, damit ich die einzelnen, gleichen Elemente auch zählen kann.
Sollte ich nochmal eine while Schleife oder If Bedingung ans Ende packen die dann sagt:" Solange i <= 2 nenne es Cent, else nenne es Euro"? Und wie kann ich die Liste in die gewünschte Form bringen? Kann ich die irgendwie an einem bestimmten Zeichen trennen wie einen String? Also sag, trenne alle Elemente nach 't' oder sollte ich da auch mit Indizes arbeiten? Also, die Anzahl der jeweiligen Münzen zählen und dann von [i1::i2] entnehmen.
Ich habe auch gelesen, dass man Listen nicht großartig manipulieren soll, wenn man eine Schleife über diese laufen lässt. Mit List.remove() funktioniert die Schleife zum Beispiel nicht, aber mit del Liste[i] schon. Sollte ich das trotzdem lassen?
del Betrag[0]
#twoCent.extend(['2Cent'*n]);
#twoCent.split('t')
if i <=1:
Münzen.extend(['1Cent'*k, '2Cent, '*n])
elif 2 <= i < len(Check):
Münzen.extend(['1Euro'*k, '2Euro, '*n])
i +=1;
So in der Art. Das oben stehende macht aber folgendes: Die ersten beiden Stellen als Cent ausgeben, also alles wie gehabt, dann 4 Stellen lang nichts und gibt dann die Werte als Euro aus... Warum macht es 4 Runden lang nichts?
BITTE keine explizite Lösung posten, nur Hinweise geben.
DANKESCHÖN!
PS: Witzig wird es auch, wenn ich '10' eingeben.
Punkte: 10
Markdown wird unterstützt.
Danke für deine Antwort. Bei der 5 hab ich mir gedacht das ich entweder: (2Cent, 2Cent, 1Cent) ausgeben lasse, das geht bisher. Oder, dass ich es so in der Art wie: Wenn Liste 2Cent 2Cent 1 Cent enthält, lösche Inhalt und packe 5 Cent rein. Oder, lasse Liste wie sie ist und packe 'oder 5Cent rein'. Aber ich glaub das kann ich erst mal später machen, sobald ich die Sachen so bekomme, wie ich sie gern hätte.
─ anonym259a1 09.04.2020 um 01:02Die Fehlermeldung bei Eingabe 'Null' hab ich auch schon, anders als oben, vor die Schleife gepackt.