Seite 1 von 1
If schleife Zahlen prüfen
Verfasst: Mittwoch 26. Februar 2020, 20:47
von Antonw
hi ich bin neu in python und schreibe gerade ein programm mit tkinter welches eine visualisierung einen spieles aus meiner klasse ist ich drücke einen button und die Zählerzahl erhöt sich um 1 wenn die zählerzahl durch 3 teilbar ist oder eine 3 einthält soll statt der Zählerzahl "BOOM" angezeigt werden ich habe es schon geschafft das bei einer zahl die durch 3 teilbar ist "BOOM" angezeigt wird jetzt muss es nur noch bei einer Zahl angezeigt werden die eine 3 enthält jemand eine idee wie
Dieser Code wird im Button ausgefürt:
Code: Alles auswählen
def einpus():
global Zählerstand #zähler
Zählerstand += 1
Zähler.config(text=str(Zählerstand))
n = Zählerstand / 3
if n == int(n):
Zähler.config(text="BOOM")
if (hier brauche ich hilfe ;):
Zähler.config(text="BOOM")
Re: If schleife Zahlen prüfen
Verfasst: Donnerstag 27. Februar 2020, 02:22
von Miscelo
Hallo. Um zu testen, ob es durch 3 zu teilen geht fällt mir spontan %-Modulo ein. Um zu testen, ob 3 enthalten ist gibt es mehrere Möglichkeiten. z.B. Schleife durch eine Liste, die deine Zahlen enthält.
. Danach prüfst du ob die Zahl 3 in deiner neuen Liste ist. Mir fällt auch noch das Tool 'itertools' ein. Aber es ist vielleicht "mit Kanonen auf Spatzen schießen".
Code: Alles auswählen
def printBoom(n):
nstring = str(n)
liste = []
if n%3 == 0:
print("Boom")
else:
for i in nstring:
liste.append(i)
if '3' in liste:
print("Boom")
printBoom(1337)
Zuerst if, dann else. Variablen solltest du nicht mit Sonderzeichen benennen.
Versuch das mal anzupassen für tkinter. dann ran
Re: If schleife Zahlen prüfen
Verfasst: Donnerstag 27. Februar 2020, 07:56
von Jankie
Hallo,
globlae Variablen sollte man in Python nicht benutzten, alle Variablen die eine Funktion braucht soll diese über die Parameter erhalten. Der Funktionname sollte auch was sagen was die Funktion macht, bei "einpus" weiß keiner außer du was gemeint ist. In Python wird alles laut Konvention klein_mit_unterstrick geschrieben, außnahmen sind Klassen (MixedCase) und Konstanten (KOMPLETT_GROSS). Ob eine Zahl durch eine bestimmte Zahl teilbar ist, würde ich mit Modulo (%) machen. Um zu prüfen ob eine Zahl eine Ziffer enthält, kannst du die Zahl in einen String umwandeln und dann mit "in" prüfen ob diese Zahl vorhanden ist.
Code: Alles auswählen
def einpus(zählerstand): #TODO: Besseren Namen überlegen
zählerstand += 1
if zählerstand % 3 == 0 or "3" in str(zählerstand):
print("BOOM")
return zählerstand
Re: If schleife Zahlen prüfen
Verfasst: Donnerstag 27. Februar 2020, 09:04
von Sirius3
@Miscelo: für den in-Operator braucht man keine Liste, der funktioniert auch mit Strings. In vielen Punkten verhalten sich Strings wie Listen (z.B. for-Schleife).
Um einen String in eine Liste zu verwandeln, braucht man auch keine for-Schleife, sondern kann direkt list(nstring) schreiben. `nstring` und `liste` werden nur im else-Block genutzt, brauchen also erst dort berechnet werden. `i` ist ein schlechter Name für ein Zeichen, bei i erwartet man einen Index, also eine Zahl.
@Antonw: alles was eine Funktion braucht, sollte sie über ihre Argumente bekommen, also Zähler und Zählerstand, Ergebnisse werden per return zurückgeliefert. Jetzt hast Du aber das Problem, dass sich Zählerstand verändert und GUI-Rückruffunktionen nicht mit Rückgabewerten umgehen können. Daher brauchst Du für jedes nicht triviale GUI-Programm zwingend Klassendefinitionen.
Code: Alles auswählen
import tkinter as tk
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.zaehler_stand = 0
self.zaehler = tk.Label(self, text=self.zaehler_stand)
self.zaehler.pack()
tk.Button(text='Zählen', command=self.plus_eins).pack()
def plus_eins(self):
self.zaehler_stand += 1
if self.zaehler_stand % 3 == 0 or '3' in str(self.zaehler_stand):
self.zaehler['text'] = "BOOM"
else:
self.zaehler['text'] = self.zaehler_stand
def main():
main_window = MainWindow()
main_window.mainloop()
if __name__ == '__main__':
main()
Re: If schleife Zahlen prüfen
Verfasst: Donnerstag 27. Februar 2020, 09:13
von __blackjack__