Thonny / Python: Wie kann ich Array-Elemente ersetzen?
Hallo, ich brauche Hilfe.
In einem Array dürfen die Zahlen 13 und 50 nicht vorkommen, denn ist das der Fall, sollen neue vom Benutzer eingegeben werden. Außerdem darf keine Zahl doppelt vorkommen und falls doch soll sie ebenfalls durch Eingabe vom Benutzer geändert werden.
Ich habe sämtliche Foren und meine Unterlagen durchsucht und komme auf keine Lösung. Kennt jemand einen Programmcode, um das Problem zu lösen?
Ich wäre sehr dankbar dafür!
Hier ein Bild davon, wie ich das Array der Zahlen erzeugt habe:
3 Antworten
Sollen einfach in dem Array "Lottozahlen" die Zahlen nicht doppelt vorkommen, bzw. keine 13 und 50 enthalten sein? Oder brauchst du ein neues Array, in das der Benutzer seine getippten Zahlen eingibt und du sollst es prüfen?
Wenn es für das Array Lottozahlen gilt, ist es einfacher, von vornherein dafür zu sorgen, dass keine doppelten Zahlen und keine 13 oder 50 drin vorkommen:
import random
# Liste mit allen Zahlen zwischen 1 und 49 erzeugen
moegliche_zahlen = list(range(1,50))
# 13 löschen (steht an Position 12)
del(moegliche_zahlen[12])
# und mischen
random.shuffle(moegliche_zahlen)
# Die ersten 5 Zahlen der Liste in lottozahlen speichern
lottozahlen = moegliche_zahlen[:5]
# und ausgeben
print("Lottozahlen:", lottozahlen)
# Das gleiche für die Superzahlen
moegliche_zahlen = list(range(0,10))
random.shuffle(moegliche_zahlen)
superzahlen = moegliche_zahlen[:2]
print("Superzahlen:", superzahlen)
Irgendwie ein komisches Konzept, dass automatisch Zufallszahlen erzeugt werden sollen und bei einem Fehler soll der Benutzer eine Zahl eingeben, aber egal. Du kannst einfach Funktionen definieren, die testen, ob die jeweilige Zahl die Bedingungen erfüllt. Wenn nicht, fragst du nach einer neuen Zahl und rufst die Testfunktion nochmal auf.
Z.B. so:
import random
def pruefe_lottozahl(zahl):
fehler = False
while type(zahl) is str:
if zahl.isnumeric():
zahl = int(zahl)
else:
zahl = input("Die Eingabe war keine Zahl. Bitte geben Sie eine Zahl zwischen 1 und 49 ein: ")
if zahl < 1 or zahl > 49:
zahl = input("Es wurde eine Zahl gefunden, die nicht im Bereich 1-49 ist. Bitte geben Sie eine Zahl zwischen 1 und 49 ein: ")
fehler = True
elif zahl == 13:
zahl = input("Es wurde eine 13 gefunden. Bitte geben Sie eine Zahl zwischen 1 und 49 ein: ")
fehler = True
elif zahl in lottozahlen:
zahl = input("Es wurde eine Zahl gefunden, die bereits in der Liste ist. Bitte geben Sie eine Zahl zwischen 1 und 49 ein: ")
fehler = True
if fehler:
zahl = pruefe_lottozahl(zahl)
return zahl
def pruefe_superzahl(zahl):
fehler = False
while type(zahl) is str:
if zahl.isnumeric():
zahl = int(zahl)
else:
zahl = input("Die Eingabe war keine Zahl. Bitte geben Sie eine Zahl zwischen 1 und 49 ein: ")
if zahl < 0 or zahl > 9:
zahl = input("Es wurde eine Zahl gefunden, die nicht im Bereich 0-9 ist. Bitte geben Sie eine Zahl zwischen 0 und 9 ein: ")
fehler = True
elif zahl in superzahlen:
zahl = input("Es wurde eine Zahl gefunden, die bereits in der Liste ist. Bitte geben Sie eine Zahl zwischen 0 und 9 ein: ")
fehler = True
if fehler:
zahl = pruefe_superzahl(zahl)
return zahl
# Array für Lottozahlen erzeugen
lottozahlen = []
# 5 Zufallszahlen eintragen
for i in range(5):
lottozahlen.append(pruefe_lottozahl(random.randint(1,50)))
# ausgeben
print("Lottozahlen:", lottozahlen)
# das Gleiche für Superzahlen
superzahlen = []
for i in range(2):
superzahlen.append(pruefe_superzahl(random.randint(0,9)))
print("Superzahlen:", superzahlen)
Wie wird das Array denn befüllt? Oft ist die Prüfung dort einfacher.
Da Dein Array recht kurz ist, kannst Du z.B. schauen, ob eien Zahl bereits vorhanden ist:
if val not in lottozahlen:
lottozahlen.append(val)
Wenn Du Dubletten bei der zufälligen Erzeugung vermeiden und Werte aussparen willst, auch dafür gäbe es Möglichkeiten.
Und ja, man könnte das auch nachträglich entfernen.
du solltest beim erzeugen der zahlen , schon testen ob es schon eine zahl gab oder ob deine zahl den entsprechenden wert hat . oder willst du das unbedingt später machen .
praktisch gugst du bei jeder erzeugung an mittels einer schleife von 0 to anzahl schon geaddeter elmente deine zahl gleich ist .
also vor dem superzahlen.append(....)
in pseudocode z.b.
neueingeben = false
if (losnummer == "13") { neueingeben = true }
if (losnummer == "50") { neueingeben = true }
schleife x in lottozahlen
if (x == losnummer ) { neueingeben = true; }
if (neueingeben) { input losnummer } // ich geh mal davon aus das dein eingeber nicht wieder ein doppel eingibt
Hallo, vielen Dank für die Antwort. Wäre auch eine gute Lösung nur leider soll ich die Lottozahlen zufällig aussuchen über die Funktion randint und wenn dann eine 13 oder 50 vorkommt diese Zahl durch neue Eingabe ersetzen. Und das gleiche falls eine Zahl unter den 5 Lottozahlen doppelt vorkommt. Bin komplett verzweifelt und finde auch keine gute Internetseite die mir die Vorgehensweise hier erklären kann