neue Instanzen erstellen

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
payno4
User
Beiträge: 8
Registriert: Samstag 22. Februar 2020, 22:51

Guten Tag beinander,

ich bin noch Anfänger in Python (davor Java) und wollte deswegen zum lernen ein Programm erstellen, dass Lottozahlen erstellt und mit deinen Tickets vergleicht, also ganz easy. Allerdings wenn ich mehrere Tickets erstelle, werden die "numbers" immer fortgeführt anstatt von Listen in einer Liste. Hoffe Ihr könnt mir da weiterhelfen. Bitte immer gern Anmerkungen zum Schreibstil :)

liebe Grüße

Klasse lotto:

Code: Alles auswählen

import random


class lotto:

    numbers = []*5

    addNr1 = None

    def __init__(self):
        print("New ticket created")
        for _ in range(5):
            self.numbers.append(random.randint(0, 49))
        self.addNr1 = random.randint(0, 7)
        print(self.numbers)

    def compare(self, ticket):
        rights = []
        print("Ticket: {}".format(ticket.numbers))
        for i in ticket.numbers:
            if i in self.numbers:
                rights.append(i)
        return rights
Klasse Main:

Code: Alles auswählen

import lotto


class tryYoureLuck:
    tickets = []

    game = None

    rights = []

    def __init__(self, times=2):
        print("Generate Tickets and Game!")
        self.game = lotto.lotto()
        self.createTickets(times)
        max = 0
        for t in range(len(self.tickets)-1):
            right = self.game.compare(self.tickets[t])
            if len(right) > max:
                max = len(right)
            self.rights.append(right)

        print("This is the max: {}".format(max))
        print(self.rights)

    def createTickets(self, times):
        self.tickets = [lotto.lotto() for _ in range(1, times)]


print("Let's start!")
tryYoureLuck()
Ausgabe Info:

Code: Alles auswählen

Let's start!
Generate Tickets and Game!
New ticket created
[46, 1, 24, 32, 20]
New ticket created
[46, 1, 24, 32, 20, 36, 21, 37, 24, 41]
This is the max: 0
[]
[Finished in 0.087s]
PS: Gibt es hier in dem Forum eigentlich auch einen Spoiler zum runterklappen ?
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Python ist nicht Java. Man muß nicht alles in Klasse stopfen und man darf auch mehr als eine Klasse pro Datei haben. Klassen werden mit großem Anfangsbuchstaben geschrieben. Klassenattribute sind globale Variablen, alles was eine Instanz betrifft, muß in __init__ initialisiert werden.
__init__ ist dann zum Initialisieren da, nicht dass darin das gesamte Programm läuft.

Man iteriert mit for direkt über die Elemente einer Liste, und nicht über einen Index.

Code: Alles auswählen

import random


class Lotto:
    def __init__(self):
        print("New ticket created")
        self.numbers = [
	        random.randint(0, 49)
	        for _ in range(5)
        ]
        self.additional = random.randint(0, 7)
        print(self.numbers)

    def compare(self, ticket):
        correct = []
        print("Ticket: {}".format(ticket.numbers))
        for number in ticket.numbers:
            if number in self.numbers:
                correct.append(i)
        return number


def try_youre_luck(times=2):
    print("Generate Tickets and Game!")
    game = Lotto()
    tickets = [Lotto() for _ in range(1, times)]
    maximum = 0
    correct_numbers = []
    for ticket in tickets:
    	correct = game.compare(ticket)
    	maximum = max(len(correct), maximum)
    	correct_numbers.append(correct)
    print(f"This is the max: {maximum}")
    print(correct_numbers)

def main():
	print("Let's start!")
	try_youre_luck()

if __name__ == "__main__":
	main()
Antworten