Hallo,
ich bräuchte mal Hilfe bei einer Aufgabe. Ich möchte, dass der Nutzer Zahlen eingibt, welche in einem Array gespeichert werden sollen. Alle Zahlen die 3 sind sollen durch 2 ersetzt werden.
Mein Code sieht folgendermaßen aus:
array=[]
eingabe=int(input("Geben Sie bitte 5 Zahlen ein"))
for i in range(eingabe,eingabe+1):
array+=[eingabe]
neuesarray=array
for z in range(len(neuesarray)):
if array[z]==3:
array[z]=2
print(neuesarray)
print(neuesarray)
Allerdings wird if Bedingung gar nicht beachtet und ich sitz jetzt schon eine Stunde an der Aufgabe und finde den Fehler nicht.
Danke für Tipps:)[/list]
Liste mit for Schleife bearbeiten
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Melthe: Also das Programm macht das was Du im Programm sagst. Das sieht alles überhaupt nicht sinnvoll aus, aber die ``if``-Bedingung wird sehr wohl beachtet. Wenn Du 3 eingibst, dann wird ``[2]`` zweimal ausgegeben, weil die eine drei die da in der Liste landet durch eine zwei ersetzt wird.
Aber das ganze Programm ist extrem unsinnig. Das fängt damit an das der Benutzer aufgefordert wird 5 Zahlen einzugeben, aber nur eine einzige eingeben kann. Diese eine Zahl wird dann sehr umständlich genau *einmal* in eine Liste geschrieben. Die erste``for``-Schleife kannst Du einfach durch ``array = [eingabe]`` ersetzen, weil die Schleife ganz grundsätzlich nur ein einziges mal durchlaufen wird. Und wie bist Du auf ``+=`` gekommen? Um *ein* Element an eine Liste anzuhängen verwendet man die `append()`-Methode. Und statt ``+=`` würde ich auch immer die `extend()` -Methode verwenden. Das ist leichter verständlich.
Dann solltest Du eine Liste nicht `array` nennen, denn Listen sind Listen und keine Arrays.
Bei ``neuesarray=array`` passiert ziemlich sicher nicht das was Du denkst was passiert. Du gibst der vorhandenen Liste einfach nur noch einen weiteren Namen. Beide Namen `array` und `neuesarray` beziehen sich nach der Zuweisung auf die *selbe* Liste! Python kopiert bei Zuweisungen und Argumenten bei Aufrufen nie Werte. Es werden da immer die selben Objekte zugewiesen oder übergeben.
``for i in range(len(sequence)):`` nur im dann `i` als Index in `sequence` zu verwenden ist zudem sehr „unpythonisch“ weil man in Python *direkt* über die Elemente von Sequenzdatentypen wie Listen iterieren kann. Ohne den Umweg über einen Index. Es ist auch eher üblich neue Listen mit den gewünschten Werten zu erstellen statt vorhandene Listen zu verändern. Das möchtest Du ja vielleicht sowieso wenn man die Zuweisung an `neuesarray` berücksichtigt.
Dein jetztiger Code kann jedenfalls deutlich einfacher geschrieben werden:
Das hat den gleichen Effekt wie Dein Programm.
Aber das ganze Programm ist extrem unsinnig. Das fängt damit an das der Benutzer aufgefordert wird 5 Zahlen einzugeben, aber nur eine einzige eingeben kann. Diese eine Zahl wird dann sehr umständlich genau *einmal* in eine Liste geschrieben. Die erste``for``-Schleife kannst Du einfach durch ``array = [eingabe]`` ersetzen, weil die Schleife ganz grundsätzlich nur ein einziges mal durchlaufen wird. Und wie bist Du auf ``+=`` gekommen? Um *ein* Element an eine Liste anzuhängen verwendet man die `append()`-Methode. Und statt ``+=`` würde ich auch immer die `extend()` -Methode verwenden. Das ist leichter verständlich.
Dann solltest Du eine Liste nicht `array` nennen, denn Listen sind Listen und keine Arrays.
Bei ``neuesarray=array`` passiert ziemlich sicher nicht das was Du denkst was passiert. Du gibst der vorhandenen Liste einfach nur noch einen weiteren Namen. Beide Namen `array` und `neuesarray` beziehen sich nach der Zuweisung auf die *selbe* Liste! Python kopiert bei Zuweisungen und Argumenten bei Aufrufen nie Werte. Es werden da immer die selben Objekte zugewiesen oder übergeben.
``for i in range(len(sequence)):`` nur im dann `i` als Index in `sequence` zu verwenden ist zudem sehr „unpythonisch“ weil man in Python *direkt* über die Elemente von Sequenzdatentypen wie Listen iterieren kann. Ohne den Umweg über einen Index. Es ist auch eher üblich neue Listen mit den gewünschten Werten zu erstellen statt vorhandene Listen zu verändern. Das möchtest Du ja vielleicht sowieso wenn man die Zuweisung an `neuesarray` berücksichtigt.
Dein jetztiger Code kann jedenfalls deutlich einfacher geschrieben werden:
Code: Alles auswählen
#!/usr/bin/env python3
def main():
eingabe = int(input('Geben Sie bitte eine Zahl ein: '))
werte = [2 if eingabe == 3 else eingabe]
print(werte)
if __name__ == '__main__':
main()
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Hallo, danke für deine Antwort. Unser Prof meinte Arrays und Listen seien in Python mehr oder weniger desgleichen (was mich auch verwirrt hat, weil im Internet andere Dinge stehen.) Für die Klausur dürfen wir append usw. nicht benutzen, deshalb auf diese Art.
Trotzdem danke für das Feedback
Trotzdem danke für das Feedback
Hui. Viel Erfolg mit dem Studium - der Prof hat schonmal kracher Ahnung, das kann nur gut werden. Arrays und Listen sind so gleich wie Eselkarren und Pickups. Klar, haben beide Raeder und man kann Rueben in die Stadt fahren damit. Da hoert's dann aber auch schon auf mit der Aehnlichkeit...
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Melthe: Sorry, aber ich kann mir nicht vorstellen das ihr `append()` nicht benutzen dürft. Denn letztlich benutzt Du da `extend()` via ``+=`` und das ist wesentlich aufwändiger, also ziemlich unsinnig.
Arrays gibt es in Python auch, damit ist es verwirrend wenn man Listen als Arrays bezeichnet. In der Standardbibliothek gibt es das `array`-Modul, das einen `array`-Datentyp zur Verfügung stellt. Aber meistens meinen die Leute `numpy`-Arrays wenn sie in Python von Arrays sprechen. Das ist eine externe Bibliothek, hauptsächlich für wissenschaftliche Berechnungen.
Ich habe den Verdacht das Dein Prof nicht mit Python arbeiten möchte sondern da irgendwie eine andere Sprache versucht in Python zu quetschen. So etwas ist gar keine gute Idee, denn dann fängt man an gegen die Sprache zu programmieren statt mit ihr, und sich das Leben unnötig schwer zu machen. Wahrscheinlich kommt der von irgendeiner anderen Programmiersprache und Python wurde ihm von ”aussen” auf's Auge gedrückt.
Arrays gibt es in Python auch, damit ist es verwirrend wenn man Listen als Arrays bezeichnet. In der Standardbibliothek gibt es das `array`-Modul, das einen `array`-Datentyp zur Verfügung stellt. Aber meistens meinen die Leute `numpy`-Arrays wenn sie in Python von Arrays sprechen. Das ist eine externe Bibliothek, hauptsächlich für wissenschaftliche Berechnungen.
Ich habe den Verdacht das Dein Prof nicht mit Python arbeiten möchte sondern da irgendwie eine andere Sprache versucht in Python zu quetschen. So etwas ist gar keine gute Idee, denn dann fängt man an gegen die Sprache zu programmieren statt mit ihr, und sich das Leben unnötig schwer zu machen. Wahrscheinlich kommt der von irgendeiner anderen Programmiersprache und Python wurde ihm von ”aussen” auf's Auge gedrückt.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Also der Prof hat von Java auf Python umgestellt, weil regelmäßig 80% oder mehr durchgefallen sind und er sich vor der Fachschaft rechtfertigen musste. Wir dürfen bei so Aufgaben ziemlich sicher kein append oder extend benutzen. In den Musterlösungen der Übungen wurde es immer mit += gelöst. Methoden wie sort() beispielsweise dürfen wir auch nicht benutzen in der Klausur..
__blackjack__ du hast recht, es werden sogar Java Basics abgefragt am Ende der Vorlesung... Ich glaube er hat auch kein Bock auf Python und quetscht noch bisschen Java mit rein
__blackjack__ du hast recht, es werden sogar Java Basics abgefragt am Ende der Vorlesung... Ich glaube er hat auch kein Bock auf Python und quetscht noch bisschen Java mit rein
Das ist auch so ein tolles Konstrukt. Als ob sich das didaktische Geschick des Profs oder die intellektuellen Fähigkeiten der Studenten mit dem Wechsel einer Programmiersprache beeinflussen ließen. Der Prof hat jetzt vermutlich weniger Bock als zuvor und schon gar keinen auf weitere Gespräche mit der Fachschaft. Also werden die Noten besser. Das ist aber auch alles.Melthe hat geschrieben: Dienstag 5. Februar 2019, 16:48 Also der Prof hat von Java auf Python umgestellt, weil regelmäßig 80% oder mehr durchgefallen sind und er sich vor der Fachschaft rechtfertigen musste.
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@kbr: Wenn das alles wäre, wäre das ja schön, aber der Unterricht wird dadurch noch schlechter als er anscheinend vorher schon war. :-/
@Melthe: Das kein `sort()` benutzt werden darf wenn die Leute selber lernen sollen wie man einen Sortieralgorithmus schreibt ist klar, aber `append()` kann man sich nicht mal eben selber schreiben ohne den `list`-Datentyp selbst zu implementieren, und *das* wird nicht verlangt werden, weil das ein bisschen kompliziert werden würde. Da bräuchte man dann tatsächlich so etwas wie Arrays.
@Melthe: Das kein `sort()` benutzt werden darf wenn die Leute selber lernen sollen wie man einen Sortieralgorithmus schreibt ist klar, aber `append()` kann man sich nicht mal eben selber schreiben ohne den `list`-Datentyp selbst zu implementieren, und *das* wird nicht verlangt werden, weil das ein bisschen kompliziert werden würde. Da bräuchte man dann tatsächlich so etwas wie Arrays.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: Theoretisch ja, aber konkret sind Listen in Python ja so etwas wie `ArrayList` in Java, sonst kann man Zusagen wie Indexzugriff in O(1) so schlecht erfüllen. Klar sind verkettete Listen eine gute Übungsaufgabe, aber dann eben wieder schlecht für Professoren die gerne Arrays hätten. 
Man könnte eine Liste natürlich auch mit einem `dict` als Hintergrund implementieren. Hey, und darauf aufbauend mit solchen Listen dann eine Hash-Tabelle. <|:-)

Man könnte eine Liste natürlich auch mit einem `dict` als Hintergrund implementieren. Hey, und darauf aufbauend mit solchen Listen dann eine Hash-Tabelle. <|:-)
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Melthe: Übrigens ist mir immer noch nicht klar was hier eigentlich die Aufgabe ist. Also nicht das Du denkst wir wollen nur auf Deinem Prof einkloppen. Man kann schlecht was zum Problem mit der Umsetzung der bizarren Forderungen sagen, wenn man die nicht kennt. 

„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.