Seite 1 von 1

Was muss ich ändern am Python-Code?

Verfasst: Sonntag 23. April 2017, 21:05
von ma9rtin

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()

Re: Was muss ich ändern am Python-Code?

Verfasst: Sonntag 23. April 2017, 21:17
von ma9rtin
Ich hab vergessen die Variable i hochzuzählen! Daran liegt es aber trotzdem nicht...

Re: Was muss ich ändern am Python-Code?

Verfasst: Sonntag 23. April 2017, 21:30
von Alfons Mittelmeyer
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()

Re: Was muss ich ändern am Python-Code?

Verfasst: Sonntag 23. April 2017, 21:39
von Sirius3
@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.

Re: Was muss ich ändern am Python-Code?

Verfasst: Sonntag 23. April 2017, 21:58
von Alfons Mittelmeyer
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

Re: Was muss ich ändern am Python-Code?

Verfasst: Sonntag 23. April 2017, 22:08
von bwbg
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!

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 18:29
von ma9rtin
Das mit der Shell-Eingabe war unsinn,ok.. Viele Wege führen nach Rom! Dann guckt mal bei Diddy Development vorbei! (YouTube)

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 18:30
von ma9rtin
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)

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 18:31
von ma9rtin
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)

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 19:19
von Alfons Mittelmeyer
@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.

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 19:29
von kbr
@ma9rtin: noch besser ist:

Code: Alles auswählen

palindrom = eingabe == reversed(eingabe)

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 19:56
von BlackJack
@kbr: Das ist eher schlechter, weil's nicht funktioniert. ;-)

Re: Was muss ich ändern am Python-Code?

Verfasst: Montag 24. April 2017, 21:09
von kbr
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: