Problem mit if-Funktion

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
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

Hallo zusammen,
hab ein (kleines) Problem mit einer if-Funktion in meinem Programm:

Code: Alles auswählen

if anzahlBiologie < 6 and text.find('Biologie') == -1:
                    anzahlBiologie = anzahlBiologie + 1
                    text = text.replace('\n', ', Klasse 8: Biologie\n')
                    self.klassenliste[zeile] = text
Also, das Programm soll einem Schüler ein Fach zuweisen, wobei es nur einer bestimmten Anzahl (hier 6) zugewiesen werden soll. Wie vielen Schülern es bereits zugewiesen wurde wird in "anzahlBiologie" gespeichert. Der zweite Teil der if-Funktion dient dazu, sicher zu stellen, dass keinem Schüler ein Fach mehrfach zugewiesen wird.

Jetzt soll der Benutzer des Programm jedoch selbst die Anzahl für ein Fach festlegen, ohne den Quellcode zu verändern. Hab schon folgende beiden Varianten probiert, aber beidemale ignoriert das Programm einfach die Anzahl für jedes Fach.

Code: Alles auswählen

self.zuvergebenBiologie = self.EBiologie.get()
if self.anzahlBiologie < self.zuvergebenBiologie and self.text.find('Biologie') == -1:
                    self.anzahlBiologie = self.anzahlBiologie + 1
                    self.text = self.text.replace('\n', ', Klasse 8: Biologie\n')
                    self.klassenliste[self.zeile] = self.text
Hier wird die Zahl aus einem Entry ausgelesen und in einer Variablen gespeichert. Das funktioniert auch! (hab die Variable geprinted)

Code: Alles auswählen

if self.anzahlBiologie < self.EBiologie.get() and self.text.find('Biologie') == -1:
                    self.anzahlBiologie = self.anzahlBiologie + 1
                    self.text = self.text.replace('\n', ', Klasse 8: Biologie\n')
                    self.klassenliste[self.zeile] = self.text

Ich weiss einfach nicht warum der Programm die erste if-Bedingung ignoriert. Hab auch schon versuch der self. mal weg zu lassen, ohne Erfolg.
Hoffentlich könnt ihr mir weiterhelfen.

Gruss und Dank
VitroN
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

So wie ich das sehe, vergleichst du Äpfel mit Birnen:

Code: Alles auswählen

>>> 7 < "6"
True
Beim Auslesen des Entry-Feldes erhältst du eine Zeichenkette, anzahlBioloige enthält einen Integerwert.
Das kannst du zwar vergleichen, aber es kommt - in deinem Fall - nicht das dabei heraus, was du wolltest.

Wie du das lösen kannst, fällt dir bestimmt selbst ein ... :wink:
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

*wand hol und gegen Kopf schlag*

ich glaub, dass war zu banal. Hab ich einfach nicht dran gedacht

Danke
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

VitroN hat geschrieben:Hallo zusammen,
hab ein (kleines) Problem mit einer if-Funktion in meinem Programm:
"if-Funktion" solltest Du schnell aus Deinem Hirn streichen - grauselige Terminilogie ;-)
if ist eine Bedingung, keine Funktion.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Also in Smalltalk ist if eine Funktion 8)
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Einigen wir uns einfach darauf, dass ``if`` in Python ein Statement ist, in Ordnung?...
lunar

Mit Betonung auf Python. Funktionale Sprachen wie lisp oder scheme sehen das ganz anders ;)
BlackJack

In Io ist `if` eine Methode. :-)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

EyDu hat geschrieben:Also in Smalltalk ist if eine Funktion 8)
Also streng genommen sind `ifTrue:` und `ifFalse:` Methoden von `True`und `False` und keine Funktionen ;) In Scheme oder Lisp übrigens auch nicht, da sind `if` und `cond` special forms, quasi eingebaute Makros, die nur wie Funktionen aussehen. In Io ist es streng genommen genauso, allerdings ist in die Sprache das gewöhnungsbedürfte Feature eingebaut, dass Argumente, für die es keinen Parameter mit "call by name" statt "call by value" sind.

Stefan
Antworten