Was muss ich ändern am Python-Code?

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
ma9rtin
User
Beiträge: 5
Registriert: Sonntag 23. April 2017, 21:02

Code: Alles auswählen

import Tkinter

Palindrom = True
def handleButton(event):
    global Palindrom
    i = 0
    eingabe = input("Wort eingeben: ")
    laenge = len(eingabe)
    while i < laenge /2:
        if eingabe[i] != eingabe[laenge -i -1]:
            Palindrom = False
    w['text'] = str(Palindrom)     
top = Tkinter.Tk()
w = Tkinter.Label(top,text = '')
w.pack()
b = Tkinter.Button(top,text = "Hello World")
b.pack()
b.bind('<Button-1>',handleButton)
top.mainloop()
ma9rtin
User
Beiträge: 5
Registriert: Sonntag 23. April 2017, 21:02

Ich hab vergessen die Variable i hochzuzählen! Daran liegt es aber trotzdem nicht...
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Also, keine Ahnung, was Du mit diesem Programm bezwecken willst, aber benütze raw_input statt input, sonst kracht das script ab. Und i solltest Du auch hochzählen, dennn sonst bist Du in einer Endlosschleife:

Code: Alles auswählen

import Tkinter
 
Palindrom = True

def handleButton(event):
    global Palindrom
    i = 0
    eingabe = raw_input("Wort eingeben: ")
    laenge = len(eingabe)
    while i < laenge /2:
        if eingabe[i] != eingabe[laenge -i -1]:
            Palindrom = False
        i += 1
    w['text'] = str(Palindrom)    

top = Tkinter.Tk()
w = Tkinter.Label(top,text = '')
w.pack()
b = Tkinter.Button(top,text = "Hello World")
b.pack()
b.bind('<Button-1>',handleButton)
top.mainloop()
Zuletzt geändert von Alfons Mittelmeyer am Sonntag 23. April 2017, 21:48, insgesamt 2-mal geändert.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@ma9rtin: global hat in einem normaler Programm nichts verloren. Was willst Du damit überhaupt bezwecken, außer falsche Ergebnisse zu produzieren? Ein GUI-Programm erwartet normalerweise keine Eingaben von der Kommandozeile. input ist bei einem Python2-Programm auch falsch, Du wolltest wahrscheinlich raw_input benutzen. Statt bind benutzt man bei Knöpfen eigentlich den command-Parameter.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sirius3 hat geschrieben:@ma9rtin: global hat in einem normaler Programm nichts verloren.
Außerdem is global Palindrom Unsinn, denn ist eine Eingabe falsch, bleibt alles falsch, auch wenn richtige Eingaben folgen
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Der Test auf ein Palindrom lässt sich bequem ohne (eigene) Schleife ausdrücken:

Code: Alles auswählen

xs == xs[::-1]
Geschickterweise packt man dieses in eine sinnvoll benannte Funktion.

Wie die Vorrredner schon anmerkten: global existiert nicht!
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
ma9rtin
User
Beiträge: 5
Registriert: Sonntag 23. April 2017, 21:02

Das mit der Shell-Eingabe war unsinn,ok.. Viele Wege führen nach Rom! Dann guckt mal bei Diddy Development vorbei! (YouTube)
ma9rtin
User
Beiträge: 5
Registriert: Sonntag 23. April 2017, 21:02

bwbg hat geschrieben:Der Test auf ein Palindrom lässt sich bequem ohne (eigene) Schleife ausdrücken:

Code: Alles auswählen

xs == xs[::-1]
Geschickterweise packt man dieses in eine sinnvoll benannte Funktion.

Wie die Vorrredner schon anmerkten: global existiert nicht!
Das mit der Shell-Eingabe war unsinn,ok.. Viele Wege führen nach Rom! Dann guckt mal bei Diddy Development vorbei! (YouTube)
ma9rtin
User
Beiträge: 5
Registriert: Sonntag 23. April 2017, 21:02

Alfons Mittelmeyer hat geschrieben:
Sirius3 hat geschrieben:@ma9rtin: global hat in einem normaler Programm nichts verloren.
Außerdem is global Palindrom Unsinn, denn ist eine Eingabe falsch, bleibt alles falsch, auch wenn richtige Eingaben folgen
Das mit der Shell-Eingabe war unsinn,ok.. Viele Wege führen nach Rom! Dann guckt mal bei Diddy Development vorbei! (YouTube)
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@ma9rtin: was Du ändern mußt:

statt:

Code: Alles auswählen

Palindrom = True
def handleButton(event):
    global Palindrom
    i = 0
    eingabe = input("Wort eingeben: ")
    laenge = len(eingabe)
    while i < laenge /2:
        if eingabe[i] != eingabe[laenge -i -1]:
            Palindrom = False
        i += 1

    w['text'] = str(Palindrom)
muss es heißen:

Code: Alles auswählen

def handleButton(event):
    eingabe = input("Wort eingeben: ")
    laenge = len(eingabe)

    Palindrom = True
    i = 0
    while i < laenge /2:
        if eingabe[i] != eingabe[laenge -i -1]:
            Palindrom = False
        i += 1

    w['text'] = str(Palindrom)
Also vor jeder Auswertung wieder auf True zurücksetzen, sonst bekommst Du nach einmal False immer False. global ist also sowieso hier Unsinn. Außerdem könnte man nach False, die Scheife auch mit break abbrechen, anstatt noch weiter zu machen.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@ma9rtin: noch besser ist:

Code: Alles auswählen

palindrom = eingabe == reversed(eingabe)
BlackJack

@kbr: Das ist eher schlechter, weil's nicht funktioniert. ;-)
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

BlackJack hat geschrieben:@kbr: Das ist eher schlechter, weil's nicht funktioniert. ;-)
Oops — das kommt davon, wenn man auf die Schnelle was schreibt und nicht darauf achtet, dass ein Iterator zurückkommt ... :?

Da wäre dann noch ein Typecast von nöten

Code: Alles auswählen

palindrom = list(eingabe) == list(reversed(eingabe))
Schaut jetzt leider nicht mehr ganz so elegant aus.
Egal! :wink:
Antworten