Thonny / Python: Wie kann ich Array-Elemente ersetzen?

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)

Kekskruemel03 
Beitragsersteller
 08.03.2022, 13:37

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

daCypher  08.03.2022, 14:06
@Kekskruemel03

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