Seite 1 von 1

strichmänchen

Verfasst: Freitag 17. Juli 2020, 14:17
von Notgod
Hi ich weis das dieses script vollkommender schrott ist aber trotzdem wieso funktioniert der teil wo ich den eingegebenden buchstaben suche nicht.
was passier: Ich gebe alles ein und drücke ok dann gibt er aber nicht das wort mit dem geratenem buchsraben aus sonder irgenteine kette.
ein bild zum fehler ist unten

Code: Alles auswählen

from tkinter import *

l = 0



class fenster_eingabe:
    def __init__(self):
        self.fenster = Tk()
        
        
        self.fream_1= Frame(master=self.fenster,
                              relief = FLAT,bd=2, bg = 'cyan')        
        self.label= Label(master=self.fream_1,
                      text = " Surch a word you like juse '_' for ' '",
                      width = 30, height = 3,
                      font=('Arial', 20), fg='#FF0000', bg = 'cyan')
        
        self.eingabe= Entry(master=self.fream_1,
                        width = 30, 
                        font=('Arial', 20), fg='black')
        
        self.ok= Button(master=self.fream_1,
                        text = 'OK!',
                        command = self.clear)
        
        
    
        self.fream()
        self.fenster.mainloop()
    def clear(self):
        
        global wort
        global l
        global wort2
        if l == 0:
            wort = self.eingabe.get()
            wort = list(wort)
            wort2 = len(wort)*'_'
            wort2=str(wort2)
            
            self.fream_1.destroy()
        elif l == 1:
            self.eingabe2.delete(0, 10)
            self.fream_2.destroy()
        elif l == 2:
            l=1
        elif l == 3:
            l=1
        
            
        
        self.fream_2 = Frame(master=self.fenster,
                             relief = FLAT,bd=2, bg ='#87CEEB')
        self.label2 = Label(master=self.fream_2,
                            text= "Choos a letter you think it's in the word",
                            width = 30, height = 3,
                            font=('Arial', 20), fg='yellow', bg='#87CEEB' )
        self.eingabe2 = Entry(master=self.fream_2,
                              width = 2,
                              font=('Arial', 20), fg='black')
                              
        self.button2 = Button(master=self.fream_2,
                              text= 'Ok!',
                              command = self.clear)
        
        self.label3 = Label(master=self.fream_2,
                            text=wort2,
                            font=('Arial',20), fg='black', bg='white')
                            
        global b
        b = self.eingabe2.get()
        l = 1
        
        
        for i in range(len(wort)):         # ich glaube das problem ist hier 
            if b in wort[i]:
                l = 1
                
                g = '%s'%i
                g = int(g)
                wort2=list(wort2)
                wort2[g] = b
                wort2 = str(wort2)
                
                
            else:
                l = 3
                
        
                                     
        
                    
                    
        self.label2.pack()
        self.label3.pack(side=LEFT, padx=10, pady=10)
        self.button2.pack(side=RIGHT, padx=10, pady=10)
        self.eingabe2.pack(side=RIGHT, padx=10, pady=10)
        self.fream_2.pack(fill=None, expand=1)
        
        
    def fream(self):
        self.label.pack()
        self.ok.pack(side=RIGHT, padx=10, pady=10)
        self.eingabe.pack(side=LEFT, padx=10, pady=10)
        self.fream_1.pack(fill=None, expand=1)
        


    
        
         
    
if __name__=='__main__':
   
   k = fenster_eingabe()
   while True:
    k.clear()
    

keine Ahnung wie ich bilder einfügen kann hoffe das geht ist ein link
[url]file:///C:/Users/konst/OneDrive/Bilder/lol.png[/url]

Re: strichmänchen

Verfasst: Freitag 17. Juli 2020, 14:54
von Notgod
https://share.icloud.com/photos/0Bc7kN ... LjQvggWFRgIch glaube das Bild sollte funktionieren

Re: strichmänchen

Verfasst: Freitag 17. Juli 2020, 15:07
von Sirius3
Ein Link auf ein Bild auf Deiner lokalen Festplatte wird kaum funktionieren.
Warum hast du alle pack-Aufrufe in eine eigene Methode gesteckt???
Ein Klasse sollte nach Ablauf von __init__ initialisiert sein und nicht ewig drin stecken bleiben: das mainloop gehört da raus.
Keine *-Importe und kein global verwenden. Für ersteres wird import tkinter as tk verwendet für zweiteres hast Du ja eine Klasse.
`l` ist schon an sich eine schlechter Variablennamen, weil nichtssagend, mit 1 I usw verwechselbar und drittens als Globale Variable total unlesbar.
Ein Fenster wird einmal erzeugt und dann hat es alle seine Eingabeelemente. Was da clear macht, ist mir völlig unverständlich.

Zum eigentlichen Problem:

Code: Alles auswählen

        for i in range(len(wort)):
            if b in wort[i]:
                l = 1
                g = '%s'%i
                g = int(g)
                wort2=list(wort2)
                wort2[g] = b
                wort2 = str(wort2)
            else:
                l = 3
Was soll der Quatsch, erst i in einen String g umzuwandeln und dann in eine Zahl g? Was soll da anderes rauskommen als i?
Die Stringrepräsentation einer Liste ist sicherlich nicht das, was Du brauchst. Es gibt in Python keine direkte Methode, ein einzelnes Zeichen zu ersetzen. Normalerweise erzeugt man eine Liste an Buchstaben und joint die dann zusammen:

Code: Alles auswählen

wort_verdeckt = ''.join(buchstabe if buchstabe in geratene_buchstaben for buchstabe in wort)

Re: strichmänchen

Verfasst: Freitag 17. Juli 2020, 15:40
von Notgod
Sirius3 hat geschrieben: Freitag 17. Juli 2020, 15:07 Ein Link auf ein Bild auf Deiner lokalen Festplatte wird kaum funktionieren.
Warum hast du alle pack-Aufrufe in eine eigene Methode gesteckt???
Ein Klasse sollte nach Ablauf von __init__ initialisiert sein und nicht ewig drin stecken bleiben: das mainloop gehört da raus.
Keine *-Importe und kein global verwenden. Für ersteres wird import tkinter as tk verwendet für zweiteres hast Du ja eine Klasse.
`l` ist schon an sich eine schlechter Variablennamen, weil nichtssagend, mit 1 I usw verwechselbar und drittens als Globale Variable total unlesbar.
Ein Fenster wird einmal erzeugt und dann hat es alle seine Eingabeelemente. Was da clear macht, ist mir völlig unverständlich.

Zum eigentlichen Problem:

Code: Alles auswählen

        for i in range(len(wort)):
            if b in wort[i]:
                l = 1
                g = '%s'%i
                g = int(g)
                wort2=list(wort2)
                wort2[g] = b
                wort2 = str(wort2)
            else:
                l = 3
Was soll der Quatsch, erst i in einen String g umzuwandeln und dann in eine Zahl g? Was soll da anderes rauskommen als i?
Die Stringrepräsentation einer Liste ist sicherlich nicht das, was Du brauchst. Es gibt in Python keine direkte Methode, ein einzelnes Zeichen zu ersetzen. Normalerweise erzeugt man eine Liste an Buchstaben und joint die dann zusammen:

Code: Alles auswählen

wort_verdeckt = ''.join(buchstabe if buchstabe in geratene_buchstaben for buchstabe in wort)


Also in ich habe das mit dem umwandeln in str und Zahl gemacht da ich diesen Abschnitt aus einem Programm genommen habe was ich vor her auf cmd Basis geschrieben habe genommen und dort hat es funktioniert ich weiß natürlich das es unnötig ist aber ich kann mir nicht erkören wo her diese komische Ausgabe mach dem ok Button kommt ich habe übriegenz noch ein neustes Foto in einer Antwort hochgeladen