Neues Lernen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

Hallo Leute,

ich habe mich in letzter Zeit viel mit numpy, pyplot etc befasst, also eher Anwenderbezogen und DIREKT.

Jetzt wollte ich ein wenig mehr mit Variablen spielen und bin auch da direkt auf etwas gestoßen, was ich mit googlen nicht gelöst bekommen habe.

Ich möchte ein Array bilden, mit random-Zahlen, dieses Array soll auf Dopplung geprüft werden und anschließend genannt werden, wo quasi diese Dopplung stattfindet.

Bisher sieht mein Test so aus:

Code: Alles auswählen

from numpy import random
x = random.randint(10, size = 3)
x.sort()
if x[0] == x[1]:
    print("Vordere Dopplung",x)
elif x[1] == x[2]:
    print("Hintere Dopplung", x)
elif x[0] == x[1] == x[2]:
    print("ALLE GLEICH", x)
else: print("Keine Dopplung", x)
Den letzten Befehl erkennt das Programm aber nie, da vorher immer 1 oder 2 greifen. Außerdem ist das Array hier noch nicht sonderlich random sondern nur die Zahlen darin.

Wie löse ich diese beiden Probleme?

Danke und Grüße
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt halt die if-Bedingungen in die richtige Reihenfolge bringen. Die Spezielfälle als erstes, allgemeinere Fälle später.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Karlirex: Du musst halt ganz offensichtlich die Reihenfolge der Bedingungen so ändern das welche weiter vorne nicht Teilbedingungen von welchen weiter hinten sind.

Was meinst Du mit „Array hier noch nicht sonderlich random sondern nur die Zahlen darin“?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

@sirius3 ja ergibt Sinn.
@_blackjack ich gebe aktuell die Größe des Arrays mit 3 vor, ich würde es gerne so programmieren, dass die Arraygröße unterschiedlich ist mit jeder Ausführung.

Irgendwie hätte ich gern so eine Art Niki den Roboter für Python, mit Testaufgaben :'D. Wo man vllt aber auch Zusammenhänge darstellen muss von while / if und diese über ein "i" dann an anderer Stelle weiter nutzen muss :D Aber eben nicht direkt erschlagend und etwas besser erklärt vllt, als manche reinen Codezeilen aus den klassischen Seiten :'D
Naja oder doch noch einfach das Forum verschlingen B)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Karlirex: Aber der Code den Du da geschrieben hast würde doch mit anderen Grössen als 3 gar nicht funktionieren, ausser der Bedingung das alle gleich sind, oder sollen bei anderen Grössen auch neben allen auch nur die jeweils ersten und letzten beiden Werte geprüft werden? Dann sehe ich nicht das Problem auch die Arraygrösse von 3 bis was auch immer zufällig zu wählen.

Die beiden ersten Prüfungen aus Deinem Code bleiben gleich, nur den Test auf „alle gleich“ müsste man generischer Ausdrücken, was mit Numpy aber auch kein grosses Problem ist.

Die meisten Funktionen aus `numpy.random` sollten übrigens nicht mehr verwendet werden. Dazu gehört auch `randint()`. Siehe die Dokumentation dazu.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

@_blackjack_ und genau dazu habe ich nichts gefunden :D das war genau das was ich fragen wollte. Es soll eben auch bei anderen Größen Code erstellt werden, der funktioniert, also ggf. über while True-Schleifen?
Das mit "randint()" löst man dann mit randrange()?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Karlirex: Numpy kennt kein `randrange()`. Und wie man Numpy' `randint()` ersetzt, steht in der Numpy-Dokumentation.

Ich verstehe auch nicht so ganz nach was speziellem Du gesucht und nicht gefunden hast. Du weisst ja anscheinend wie man ein Array mit der festen Grösse 3 erstellt. Und Du weisst sicher auch wie man eine zufällige Zahl erzeugt. Und damit weisst Du wie man ein Array mit einer zufälligen Grösse erzeugt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

@_blackjack_ aber eben mit dem random array, kann ich die if schleife so nicht mehr nutzen, da ich die Größe des Arrays ja nicht mehr kenne. Da leigt das eigentliche Problem, denke ich :D
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

if ist ja auch keine Schleife. http://if-schleife.de

Eine for-Schleife hingegen gibt es, und damit kannst du ja über jedes Element einer beliebig großen Liste laufen, und nach Dubletten suchen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei Schleife bei Numpy-Arrays dann meistens die falsche Wahl ist. Also entweder Listen verwenden, oder darüber nachdenken wie man das dann auch tatsächlich mit den Mitteln löst die Numpy zur Verfügung stellt.

Was soll denn hier gelernt werden? Python oder Numpy-Arrays?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

@_blackjack_ irgendwie beides :D mir kam gestern Mittag die Idee, dieses irgendwie so zu schreiben. Habe auch zuletzt ein Video gesehen zur "Funktionalen Programmierung in Python" und fand dies mega spannend, im Vergleich zu der grafischen Datenauswertung mit pyplot, welche ich bisher genutzt und gelernt habe.
@_deets_ sicherlich ist if keine Schleife, aber man könnte sie mit einer while-Schleife vllt solange abfragen lassen. Dazu habe ich generell aber deutlich zu wenig damit gearbeitet.
Antworten