Wie kann man diese Programmieraufgabe in Python lösen?

4 Antworten

Der geneigte Beobachter erkennt, daß eine Zuweisung ala:

y=min(y,z)

für den Fall, daß z kleiner y ist, y mit z ersetzt und danach der bisherige Wert von y nicht mehr vorhanden ist. d.h. voher muß ich mir y merken, das macht z.B. folgende Zeile:

tmp=max(y,z)

Schauen wir und das im Kontext an, indem ich zunächst folgendes mache:

tmo=max(y,z) #tmp enthält hiernach den größeren Wert von y,z
y=min(y,z) #y wird auf den kleineren der Werte gesetz
u=tmp #z wird auf den größeen Wert gesetzt.

Faktisch ist diese Befehlsfolge ein swap von y,z , wenn y>z.

Du hast Befehle, die diesen swap 2 mal für x,y und 1 mal für y,z ausführen, In welcher Reihenfolge müssen also die Swaps ausgeführt werden, dazu kannst Du Dir mal die Folgen:

1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1

anschauen und durchgehen, was bei welche Swapreihenfolge passiert - Du kannst sinnvollerweise mal mit 3,2,1 anfangen, also einer vollständigen Inversion, weil diese kritisch ist, denn hier muß zwingend 3 mal getauscht werden, damit das Ergebnis stimmt.

Ok die Sortiermethode ist gruselig, aber keine Aufgabe für 2 Stunden😱. Zumal Du einfach in der PythonShell per Try&Error die die Zeilen umgruppieren hättest können.

mal zwischendurch ein Print und du siehst was passiert

x=8
y=9
z=5
  #x und y sortieren...
tmp=max(x,y) #die größere von x und y in tmp speichern
x=min(x,y)   #die  kleinere in x  speichern
y=tmp        #tmp (die größere) in y speichern
  #die  ersten  Beiden sind sortiert
print(x , y , z) #gucken


  #die gleiche Sache mit y und z...
tmp=max(y,z)
y=min(y,z)
z=tmp
print(x , y , z)


  #jetzt könnte y wieder kleiner sein, also  x und y nochmal sortieren...
tmp=max(x,y)
x=min(x,y)
y=tmp
print(x , y , z)

...ist doch garicht schlimm

so gehts auch:

x=8
y=9
z=5
x,y,z=sorted([x, y,z])
print(x , y , z)

Magiccool123 
Fragesteller
 28.08.2023, 11:48

Funktioniert leider nicht, laut dem Ergebnis ist nur x richtig?

0
Doch bei dieser komme ich einfach nicht weiter

Dann hast du dir nicht genau angesehen, was welche Zeile exakt macht.
Denn mit den Informationen solltest du in der Lage sein, die Codereihenfolge logisch zu ändern, um an dein vorgegebenes Ziel zu gelangen.

Sowas nennt sich dann auch Schreibtischtest - einfach auf Papier nachvollziehen, was da genau passiert und ob die Verarbeitung in der Reihenfolge zum Ziel führen kann.


Magiccool123 
Fragesteller
 28.08.2023, 00:13

Aber ich sitze da jetzt seit zwei Stunden dran könntest du mir die Lösung sagen vielleicht verstehe ich es dann?

0

Hallo.

Das ist jetzt vermutlich nicht das, was du hören möchtest und ich weiß nicht, ob mir ein solches Urteil zusteht, aber wenn du nach über zwei Stunden es nicht selbst hinbekommen hast, solltest du vielleicht überlegen, ob du dir das richtige Hobby ausgesucht hast.

Für diese Aufgabe braucht man keinerlei Programmierkenntnisse, nur analytisches und logisches Denkvermögen, um eine leicht abstrakte Aufgabe gedanklich durchzuspielen:

tmp = max(x, y)
x = min(x, y)
y = tmp
tmp = max(y, z)
y = min(y, z)
z = tmp
tmp = max(x, y)
x = min(x, y)
y = tmp

Zu erst speichern wir die größere Zahl aus x und y in einer temporären Variable. Danach speichern wir die kleinere Zahl in x und die größere in y.

Jetzt speichern wir die größere Zahl aus y und z in einer temporären Variable, danach speichern wir die kleinere aus y und z in y und die größere in z.

Bis hierhin steht die größte Zahl also in z. Nun müssen wir die nur noch die gleichen Schritte vom Anfang wiederholen. Größere Zahl aus x und y zwischenspeichern, kleinere Zahl in x und schließlich größere Zahl in y.

Damit haben wir alle Zahlen entsprechend sortiert.

Woher ich das weiß:Studium / Ausbildung – Diplom Wirtschaftsinformatiker