Hallo,
ich bin Anfänger in der Programmierung, erst seit einer Woche dabei.
Folgende Aufgabe ist zu bearbeiten (und Nein, ich möchte nicht, dass jemand meine Hausaufgaben macht, sondern ich brauche eine Hilfestellung, um einen Ansatz zu finden).
Gegeben ist die Liste list = [5,9,3,1,7].
Geschrieben werden soll nun eine Funktion, die den Wert des größten Eintrags ausgibt.
max(list) leistet natürlich das Gewünschte, ist aber nicht das, was gefragt ist.
Ich möchte also, dass die Funktion nacheinander die Einträge prüft und das könnte so aussehen:
Die erste Zahl in der Liste ist die 5. Dann nehmen wir also 5 als Startwert. Die Funktion speichert sich also die 5 ab als vorläufig höchsten Wert (hier brauche ich einen Tipp, wie ich das programmieren kann).
Dann geht die Funktion zum nächsten Eintrag der Liste, der 9 und prüft, ob 9 > 5 ist. Ist dies der Fall, so wird die 9 als höchsten Wert abgespeichert. (Auch dieses Durchlaufen der Liste und nacheinander abprüfen kann ich leider nicht programmieren)
Dann wird der dritte Eintrag überprüft: ist 9>3? Da dies der Fall ist, speichert die Funktion weiterhin 9 als höchten Wert und verfährt so mit allen Einträgen.
Nachdem der letzte Eintrag geprüft wurde, möchte ich, dass die Funktion den Wert des größten Eintrags ausgibt, hier also 9.
Ich würde mich sehr über Hilfe freuen.
Liebe Grüße
Roland
Maximum aus einer Liste von Zahlen auswählen
Wobei man den Indexzugriff nicht benötigt. Denn der aktuelle Wert ist im jeweiligen Schleifendurchlauf bekannt. Der höchste Wert auch, da er sich "gemerkt" wird. Der Vergleich ist "aktuell > Maximum" und geht daher problemlos ohne Indexzugriff. Und bei der späteren Ausgabe braucht man den auch nicht, da man ja den Wert gespeichert hat und nicht etwa den Index. Oder übersehe ich etwas...?
@Roland70
Schreib doch erstmal eine Schleife, die nacheinander stumpf die einzelnen Werte einer Liste ausgibt. Dadurch beschäftigst du dich bereits mit for-Schleifen und der Funktion für die Bildschirmausgabe. Ich verrate sie hier nicht, aber sie ist in den meisten Programmiersprachen genau so oder relativ ähnlich benannt. Wenn du das geschafft hast, dann kannst du wahlweise den bisherigen Code hier zeigen oder schon von selbst die Sache mit dem Maximum mit in die vorhandene Schleife einbauen. Dann zeigt sie immer das aktuelle Maximum als Ausgabe an. Und am Ende überlegst du dir, wie man die Ausgabe nur einmal, wenn das Maximum aus allen Zahlen bekannt ist, anzeigen lassen könnte...
@Roland70
Schreib doch erstmal eine Schleife, die nacheinander stumpf die einzelnen Werte einer Liste ausgibt. Dadurch beschäftigst du dich bereits mit for-Schleifen und der Funktion für die Bildschirmausgabe. Ich verrate sie hier nicht, aber sie ist in den meisten Programmiersprachen genau so oder relativ ähnlich benannt. Wenn du das geschafft hast, dann kannst du wahlweise den bisherigen Code hier zeigen oder schon von selbst die Sache mit dem Maximum mit in die vorhandene Schleife einbauen. Dann zeigt sie immer das aktuelle Maximum als Ausgabe an. Und am Ende überlegst du dir, wie man die Ausgabe nur einmal, wenn das Maximum aus allen Zahlen bekannt ist, anzeigen lassen könnte...
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Index? ``for``-Schleife? Unsinn!
Code: Alles auswählen
#!/usr/bin/env python3
from functools import reduce
def max(items):
return reduce(lambda a, b: a if a > b else b, items)
def main():
print(max([5, 9, 3, 1, 7]))
if __name__ == "__main__":
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
VG ThomasRoland70 hat geschrieben: ↑Freitag 27. März 2020, 15:01 Gegeben ist die Liste list = [5,9,3,1,7].Die erste Zahl in der Liste ist die 5. Dann nehmen wir also 5 als Startwert. Die Funktion speichert sich also die 5 ab als vorläufig höchsten Wert (hier brauche ich einen Tipp, wie ich das programmieren kann).Code: Alles auswählen
# NIEMALS in Python eine Liste den Variablennamen list zuweisen! Damit überschreibst du die gleichnamige Funktion! daten = [5,9,3,1,7]
Dann geht die Funktion zum nächsten Eintrag der Liste, der 9 und prüft, ob 9 > 5 ist. Ist dies der Fall, so wird die 9 als höchsten Wert abgespeichert. (Auch dieses Durchlaufen der Liste und nacheinander abprüfen kann ich leider nicht programmieren)Code: Alles auswählen
# Zugriff auf das erste Element einer Liste durch index 0 wert = daten[0]
Nachdem der letzte Eintrag geprüft wurde, möchte ich, dass die Funktion den Wert des größten Eintrags ausgibt, hier also 9.Code: Alles auswählen
# in Python iteriert man über alle Elemente einer Liste pythonisch so: for element in liste: # zum prüfen benötigt man eine if-abfrage if element > wert: # hier dann die Zuweisung des größten Wertes
Ich würde mich sehr über Hilfe freuen.Code: Alles auswählen
# dazu gibt es in Python die print() Funktion. print(grösster_wert)
Liebe Grüße
Roland
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Okay, jetzt schnall ich auch das mit dem Indexzugriff. War wohl noch etwas früh für mich...
@BlackJack
In einem Paralleluniversum, wo Python keine max()-Funktion eingebaut hat, würde ich das wahrscheinlich sogar mit reduce() lösen. Und zwar genau so wie du es gezeigt hast.
@BlackJack
In einem Paralleluniversum, wo Python keine max()-Funktion eingebaut hat, würde ich das wahrscheinlich sogar mit reduce() lösen. Und zwar genau so wie du es gezeigt hast.
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich möchte lösen — in Tcl:
Code: Alles auswählen
#!/bin/sh
# \
exec tclsh "$0" "$@"
proc max {items} {
set result [lindex $items 0]
foreach item $items {
if {$item > $result} {set result $item}
}
return $result
}
proc main {} {
puts [max {5 9 3 1 7}]
}
if {$argv0 eq [info script]} {
main
}
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Code: Alles auswählen
$ echo 5 9 3 1 7 | awk '{for (i=1; i<=$NF; ++i) if ($i>max) max=$i}; END {print max}'
Code: Alles auswählen
$ echo 5 9 3 1 7 | awk '{for (i = 1; i <= $NF; ++i) max = $i > max ? $i : max}; END {print max}'
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@snafu: Das dürfte nur funktionieren wenn das Maximum >0 ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich würde es ja so lösen:
(Geht vielleicht auch etwas einfacher, aber Stack-basierte Programmierung fällt mir gar nicht so leicht...)
Code: Alles auswählen
#!/usr/bin/env dc
5 9 3 1 7
[q] sx
[lu lb x] sc
[
z 1 =x
su sv
lv lu
>c
lv
lb x
] sb lb x
p
Man braucht keine if-Abfragen, for-Schleifen und auch keinen Index, wenn man die Liste sortieren lässt. Ich denke aber nicht, dass die Aufgabe so gemeint war. Könntet man höchstens für mögliche Bonuspunkte anmerken.
Code: Alles auswählen
sorted(values).pop()
Stimmt. Nicht definierte Werte werden in diesem Kontext von awk wie eine Null behandelt. Es muss also mindestens eine positive Zahl mit drin sein (oder zumindest eine Null), damit es ein korrektes Ergebnis liefert.__blackjack__ hat geschrieben: ↑Samstag 28. März 2020, 14:17 @snafu: Das dürfte nur funktionieren wenn das Maximum >0 ist.
@Sirius ein völlig unnötiger Kommentar, hätte ich von dir nicht erwartet. Ich unterstelle dir auch nicht blöd zu sein, im Moment denke ich eher anderes. Zur Lösung seiner Aufgabe muss er es erstmal schaffen die Teile zu einem funktionierendem Ganzen zusammen zu setzen. Es sind genug Hürden eingebaut. Aber gerne überlasse ich es dem Threadstarter Roland die Beurteilung, ob er meine Hinweise als Lösung seiner Aufgabe ansieht.
@Roland Ich bitte dich um ein Feedback welche der zahlreichen Antworten dir am meisten geholfen hat.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
aaalso, wenn wir schon am rumblödeln sind:
Code: Alles auswählen
static void Main(string[] args)
{
List<int> range = new List<int>() { 5, 9, 3, 1, 7 };
int max = 0;
range.ForEach(x => { max = x >= max ? x : max; });
Console.WriteLine(max);
}
Days of coding saves you hours of planing
@snafu: Hier mal ein Alternativvorschlag für AWK
Code: Alles auswählen
echo 5 9 3 1 7 | awk 'BEGIN{RS=" "} {if ($1>max) max=$1} END{print max}'
Wobei auch dieser Ansatz nicht für negative Werte funktioniert. Das lässt sich aber ausbessern:
Code: Alles auswählen
$ echo -5 -9 -3 -1 -7 | awk -v max=-inf 'BEGIN{RS=" "} {if ($1>max) max=$1} END{print max}'
-1
Code: Alles auswählen
awk 'BEGIN{RS=" "; max=log(0)} {if ($1>max) max=$1} END{print max}'
Code: Alles auswählen
$ echo -5 -9 -3 -1 -7 | awk 'BEGIN{RS=" "; max=int("-inf")} {if ($1>max) max=$1} END{print max}'
-1