Seite 1 von 1

Problem mit classen

Verfasst: Sonntag 22. November 2020, 19:57
von Notgod

Code: Alles auswählen

import random as r
class Zahlen_g:   
    global p
    p = 0
    def Prüfer_3(self, a, b, c, d, e, f, g):
        try:
            a = int(a)
            a<50 and a>0
            b = int(b)
            b <50 and b>0
            c = int(c)
            c <50 and c>0
            d = int(d)
            d <50 and d>0
            e = int(e)
            e <50 and e>0
            f = int(f)
            f <50 and f>0
            g = int(g)
            g <10 and g>0
            global p
            p = 1
            return 1
            
        except ValueError:
            print(" Nur zahlen Zwischen 1 und 49")
            
            
         
    while p == 0:
        a = input("Zahl 1>>>")
        b = input("Zahl 2>>>")
        c = input("Zahl 3>>>")
        d = input("Zahl 4>>>")
        e = input("Zahl 5>>>")
        f = input("Zahl 6>>>")
        g = input("Superzahl>>>")
        Prüfer_3(a,b,c,d,e,f,g)
        

        

    def eingabe(self, Zahl1, Zahl2, Zahl3, Zahl4, Zahl5, Zahl6):
        lz=[]
        lz.append(Zahl1)
        lz.append(Zahl2)
        lz.append(Zahl3)
        lz.append(Zahl4)
        lz.append(Zahl5)
        lz.append(Zahl6)
        return lz


    def Zähler(self):
        l = []
        for i in range(6):
            z = r.randint(1, 49)
            while z in l:
                z = r.randint(1, 49)
            l.append(z)
        return l
    def Prüfer(self, liste1, liste2):
        l1 = liste1
        l2 = liste2
        Score = 0
        for i in range(6):
            if l1[i] in l2:
                Score = Score+1
                
        return Score
    def eingabe_2(self, Superzahl):
        try:
            Superzahl = int(Superzahl)
            return Superzahl
        except ValueError:
            print("Nur Zahlen")
    def Zähler_2(self):
        z2 = r.randint(1,9)
        return z2
      
    def Prüfer_2(self, SZ1, SZ2):
        Score_2 = False
        
        if SZ1 == SZ2:
            Score_2 = True
        return Score_2
    Z1 = Zähler()
    Z2 = Zähler_2()

    print("Dein Zahlen", eingabe(a,b,c,d,e,f), " und die Superzahl ist", eingabe_2(g))
    print("Die Gezogenen Zahlen", str(Z1) +"und Superzahl", str(Z2))
    print("Geleiche Zahlen", Prüfer(eingabe(a,b,c,d,e,f),Z1), " und die Superzahl ist", Prüfer_2(eingabe_2(g), Z2))

    def rechner(self, Wert1=0, Wert2=0):
        wert = Wert1 + Wert2/2
        if wert == 6.5:
            gewin = 33571800
        elif wert == 6:
            gewin = 1751800
        elif wert == 5.5:
            gewin = 15000
        elif wert == 5:
            gewin = 5000
        elif wert == 4.5:
            gewin = 170
        elif wert == 4:
            gewin = 55
        elif wert == 3.5:
            gewin = 18
        elif wert == 3:
            gewin = 12
        elif wert == 2.5:
            gewin = 6
        else:
            gewin = 0
        return gewin
    print("Sie habe" ,rechner(Prüfer(eingabe(a,b,c,d,e,f),Z1),Prüfer_2(eingabe_2(g), Z2)) , " Euro gewonnen")
    

Zahlen_g = Zahlen_g()

Also ich habe ein Problem da das Programm das self ein der Funk also Parameter an sieht und so eins Fehlt hoffe jemand kann mir helfen für allgemeine Tipps bin ich sehr dankbar

Fehler:
Traceback (most recent call last):
File "C:\Users\konst\.idlerc\Lotto_3.py", line 2, in <module>
class Zahlen_g:
File "C:\Users\konst\.idlerc\Lotto_3.py", line 38, in Zahlen_g
Prüfer_3(a,b,c,d,e,f,g)
TypeError: Prüfer_3() missing 1 required positional argument: 'g'

Re: Problem mit classen

Verfasst: Sonntag 22. November 2020, 20:16
von Sirius3
@Notgod: wo soll man da anfangen: die Klasse ist erst einmal unsinnig, weil self kein einziges mal benutzt wird. Zudem überschreibst Du ganz am Ende den Klassennamen mit seiner Instanz.
Innerhalb des class-Blocks führst Du zudem Anweisungen aus.
Vergiss gleich wieder, dass es global gibt.
In `Prüfer_3` hast Du lauter Bedingungen, mit denen Du gar nichts macht.
Und statt der globalen p solltest Du den Rückgabewert auch verwenden.
`eingabe` ist eigentlich unnötig, weil Du ja nur eine Liste erzeugst.
In `Zähler` solltest Du Dir mal random.sample anschauen.
In `Prüfer`: warum nennst Du die absolut nichtssagende Variable list1 in die genauso nichtssagende Variable l1 um? Über einen Index iteriert man nicht, sondern über die Elemente der Liste direkt.
In `rechner` ist dem Gewinn ein n verlorengegangen.

Statt 120 Zeilen nicht funktionierenden Codes zu schreiben, entwickelt man ein Programm Stück für Stück und testet es in jedem Schritt gründlich. Fang am besten erst einmal an, eine Funktion zu schreiben, die eine Zahl zwischen 1 und 49 einliest und diese einer Liste hinzufügt, bis Du 6 unterschiedliche Zahlen hast.

Re: Problem mit classen

Verfasst: Sonntag 22. November 2020, 20:56
von Notgod
Erstmal Danke für die Antwort.
Das Programm funktioniert wenn ich alle Selfs und das Class... weg lasse. Ich verstehe nur nicht wieso ich dieses Programm nicht einfach in eine Classe auslagern kann. Und wieso er das Self als Parameter an sieht.

Re: Problem mit classen

Verfasst: Sonntag 22. November 2020, 21:38
von __blackjack__
@Notgod: Die Frage ist warum Du denkst das wollen zu müssen. Das gehört so einfach nicht in eine Klasse. Es bringt einfach nichts.