Danke für die vielen neuen Ratschläge!
Etwas ausgeschlafener mache ich mich mal an einen neuen Versuch.
Erste Runde: r2d2s Vorschlag könnte ich verstanden haben, und wenn es funktioniert, müsste es ziemlich praktisch sein.
Code: Alles auswählen
# Programmentwurf
#
# Eingabe der Anfangswerte
#
anz = input("Anzahl Rechenwerte eingeben, Maximum 5: ")
#
# damit brauche ich maximal die Variablen ber1 bis ber5
#
ber1 = ber2 = ber3 = ber4 = ber5 = 0
#
# Weiter mit der Eingabe
#
berabfr = input("Bereich für alle Werte gleich? 1=ja, 2=nein: ")
if berabfr == 1:
bereich = input("Gib den Bereich an, Maximum 30: ")
elif berabfr == 2:
for i in range(anz):
if i == 1:
ber1 = input("Gib den Bereich an, Maximum 30: ")
elif i == 2:
ber2 = input("Gib den Bereich an, Maximum 30: ")
elif i == 3:
ber3 = input("Gib den Bereich an, Maximum 30: ")
elif i == 4:
ber4 = input("Gib den Bereich an, Maximum 30: ")
else:
ber5 = input("Gib den Bereich an, Maximum 30: ")
else:
print "Keine gültige Eingabe"
#
# Eingabe ist damit vorläufig beendet
# Weitere Modifikationen müssen noch implementiert werden
#
#
# erstellt eine liste mit 150 variablen, alle mit 0 initialisiert
werteliste = [0 for i in range(1, 151)]
#
#
# Rechenoperationen ausführen, in diesem Fall zu Testzwecken eine einfache Addition
#
Fallzahl = 0
for a in range(ber1):
if ber2 > 0:
for b in range(ber2):
if ber3 > 0:
for c in range(ber3):
if ber4 > 0:
for d in range(ber4):
if ber5 > 0:
for e in range(ber5):
i = a + b + c + d + e
def logevent(i):
werteliste[i] = werteliste[i] + 1
Fallzahl = Fallzahl + 1
else:
i = a + b + c + d
def logevent(i):
werteliste[i] = werteliste[i] + 1
Fallzahl = Fallzahl + 1
else:
i = a + b + c
def logevent(i):
werteliste[i] = werteliste[i] + 1
Fallzahl = Fallzahl + 1
else:
i = a + b
def logevent(i):
werteliste[i] = werteliste[i] + 1
Fallzahl = Fallzahl + 1
else:
i = a
def logevent(i):
werteliste[i] = werteliste[i] + 1
Fallzahl = Fallzahl + 1
#
# damit müsste die Werteliste jetzt je nach Eingabe mehr oder weniger viele Daten enthalten
#
print werteliste
Für den Fall 2 (Werte), 1 (gleicher Bereich) und 4 (ber1 und ber2) kann man das Ergebnis relativ leicht mit Hand erstellen:
- Die äusserste Schleife (ber1) sollte mit a = 1 beginnen;
- die zweite Schleife (ber2) sollte mit b = 1 beginnen;
- die inneren 3 Schleifen (ber3, ber4, ber5) sollten nicht ausgeführt werden;
- die zweite Schleife (ber2) sollte a und b addieren, also i = 2;
- dann sollte sie mit b = 2 weitermachen, also i = 3
- und so weiter für b = 3 und 4, dann für a = 2 bis 4 dasselbe
- und damit würde ich in meiner Liste erwarten
(0, 1, 2, 3, 4, 3, 2, 1, 0, 0, usw 0)
Problem:
Wenn ich das Programm testen lasse, moniert Python für Zeile 53:
. There's an error in your program:
. expected an intended block
Was auch immer Python hier erwartet - ich weiss es nicht. "intended block" taucht auf, wenn die Einrückung nicht stimmt? Aber nicht weiter eingerückt gibt den gleichen Fehler.
Also eine zweite Runde, zurück zum Anhängen von Werten an eine Liste.
Eine ganze Menge Fehlerkorrekturen später sieht das Ganze dann so aus:
Code: Alles auswählen
# Programmentwurf
#
# Eingabe der Anfangswerte
#
anz = input("Anzahl Rechenwerte eingeben, Maximum 5: ")
#
# damit brauche ich maximal die Variablen ber1 bis ber5
#
ber1 = ber2 = ber3 = ber4 = ber5 = 0
#
# Weiter mit der Eingabe
#
berabfr = input("Bereich für alle Werte gleich? 1=ja, 2=nein: ")
if berabfr == 1:
if anz == 1:
ber1 = input("Gib den Bereich an, Maximum 30: ")
elif anz == 2:
ber1 = ber2 = input("Gib den Bereich an, Maximum 30: ")
elif anz == 3:
ber1 = ber2 = ber3 = input("Gib den Bereich an, Maximum 30: ")
elif anz == 4:
ber1 = ber2 = ber3 = ber4 = input("Gib den Bereich an, Maximum 30: ")
else:
ber1 = ber2 = ber3 = ber4 = ber5 = input("Gib den Bereich an, Maximum 30: ")
elif berabfr == 2:
for i in range(anz):
if i == 1:
ber1 = input("Gib den Bereich an, Maximum 30: ")
elif i == 2:
ber2 = input("Gib den Bereich an, Maximum 30: ")
elif i == 3:
ber3 = input("Gib den Bereich an, Maximum 30: ")
elif i == 4:
ber4 = input("Gib den Bereich an, Maximum 30: ")
else:
ber5 = input("Gib den Bereich an, Maximum 30: ")
else:
print "Keine gültige Eingabe"
#
# Eingabe ist damit vorläufig beendet
# Weitere Modifikationen müssen noch implementiert werden
#
#
# erstellt eine liste mit 150 variablen, alle mit 0 initialisiert
ergebnisliste = []
#
#
# Rechenoperationen ausführen, in diesem Fall zu Testzwecken eine einfache Addition
#
Fallzahl = 0
for a in range(1,ber1+1):
if ber2 > 0:
# print "Start Loop 2"
for b in range(1,ber1+1):
if ber3 > 0:
# print "Start Loop 3"
for c in range(1,ber1+1):
if ber4 > 0:
# print "Start Loop 4"
for d in range(1,ber1+1):
if ber5 > 0:
# print "Start Loop 5"
for e in range(1,ber1+1):
i = a + b + c + d + e
ergebnisliste.append(i)
Fallzahl = Fallzahl + 1
# print i
else:
i = a + b + c + d
ergebnisliste.append(i)
Fallzahl = Fallzahl + 1
# print i
else:
i = a + b + c
ergebnisliste.append(i)
Fallzahl = Fallzahl + 1
# print i
else:
i = a + b
ergebnisliste.append(i)
Fallzahl = Fallzahl + 1
# print i
else:
i = a
ergebnisliste.append(i)
Fallzahl = Fallzahl + 1
# print i
#
# damit müsste die Werteliste jetzt je nach Eingabe mehr oder weniger viele Daten enthalten
#
print ergebnisliste
ergebnisliste.sort()
print ergebnisliste
Was ich dann bekomme, ist:
>>>
Anzahl Rechenwerte eingeben, Maximum 5: 2
Bereich für alle Werte gleich? 1=ja, 2=nein: 1
Gib den Bereich an, Maximum 30: 4
[2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]
[2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 8]
>>>
Jetzt müsste ich diese Liste "durchzählen".
Dafür habe ich den Befehl "count" entdeckt. Das Problem ist: Entweder ich versuche es mit einem if / elif / else-Berg von ergebnisliste.count(1), ergebnisliste.count(2) usw. bis ergebnisliste.count(150), oder ich versuche es mit einer Iteration, wie ihn das
Wiki-Tutorium benutzt:
Nur: In keinem Anfänger-Tutorial wird mir verraten, wie man mit diesem % umgeht. Und aus den Beispielen, die ich finde, werde ich nur begrenzt schlau: % ist ein Platzhalter für etwas, was danach noch genauer definiert wird. Die
Library Reference verrät mir, daß das kleine "s" für String-Variable steht und bietet mir für Integer zwei Möglichkeiten an: d und i.
Aber ich komme nicht dahinter, wie die Formulierung aussehen muß.
Code: Alles auswählen
werteliste = [ergebnisliste.count(%d) % i for i in ergebnisliste]
ist es jedenfalls nicht; ich bekomme einen Syntax error für das % in ergebnisliste.count(%d).
Nach etwa 7 Stunden Programmierung mache ich für heute erstmal Schluss, schaue aber nachher nochmal ins Forum.
Nur noch kurz @ r2d2: Auf die Frage nach meinem Aufenthaltsort antworte ich im Off-Topic.
Danke nochmal für alle Hilfe, gerade auch an Gerold und Jogurth. Ich habe Eure Vorschläge nicht übersehen, nur aus Zeitmangel noch nicht ausprobieren können...