@BrickBardo: Da fehlen Leerzeilen um das lesbarer zu gestalten.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
Eingerückt wird mit vier Leerzeichen pro Ebene.
Namen sollten keine kryptischen abkürzungen Enthalten. Wenn man `field_size` meint, sollte man nicht `fsize` schreiben. Was `old_gen` bedeuten soll ist mir ein Rätsel. In einer Funktion die ein Spielfeld erzeugt ist an dem Ergebnis dort doch nichts ”altes”‽ Das ist dort ein nigelnagelneues Spielfeld.
Funktionsnamen wie oben schon erwähnt klein geschrieben, damit man `Spielfeld` nicht für eine Klasse hält, und dann ist der Name inhaltlich ein Problem, denn man kann den nicht von einem offensichtlichen Namen für ein Spielfeld unterscheiden. Die Funktion heisst so, wie man ihren Rückgabewert nennen würde. Was man nicht mehr kann, weil ja die Funktion schon so heisst. Funktionen und Methoden werden deshalb üblicherweise nach der Tätigkeit benannt die sie durchführen. Man kann Funktionen dadurch besser von eher passiven Werten unterscheiden und ``spielfeld = erzeuge_spielfeld(42)`` ist dann kein Problem mehr.
Numpy wird hier missbraucht. Erst einmal generell, denn ich sehe in dem gezeigten Quelltext überhaupt keinen Vorteil daran das nicht einfach mit Listen zu machen. Und auch wenn man Numpy unbedingt benutzen will, dann nicht *so*. Erster Gedanken bei Numpy und Schleifen in Python sollte immer sein „ich machen wahrscheinlich etwas falsch“, denn Numpy verwendet man ja gerade um sich langsame Schleifen in Python zu sparen und die in C (und teilweise Fortran) geschriebenen Schleifen zu verwenden die sich hinter den Numpy-Operationen verstecken. Die Funktion wird mit Numpy letztlich zu einem simplen Einzeiler.
Die `numpy.random.randint()`-Funktion sollte nicht mehr verwendet werden.
Code: Alles auswählen
#!/usr/bin/env python3
import numpy as np
FIELD_SIZE = 8
def erzeuge_spielfeld(size):
return np.random.default_rng().choice(["+", " "], (size, size))
def main():
spielfeld = erzeuge_spielfeld(FIELD_SIZE)
print(spielfeld)
print("\n".join("".join(row) for row in spielfeld))
if __name__ == "__main__":
main()