Seite 1 von 1
class variablen
Verfasst: Samstag 11. April 2020, 18:35
von Ice-Oskar
Hallo ich brauche Hilfe bei einem Problem. Ich programmiere noch nicht sehr lange mit Python deshalb brauche ich eure Hilfe. Ich bin dabei eine Mitarbeiter Datenbank als Übung zu programmieren.
Ich habe z.b Mitarbeiter so zugewiesen
Code: Alles auswählen
class Mitarbeiter:
def __init__(self,name,vorname,lohn):
self.name = name
self.vorname = vorname
self.lohn = lohn
Dann die Namen
Hans = Mitarbeiter("Müller","Hans",2000)
Dann hab ich eine Funktion erstellt namens get_mitarbeiter_id die dies einfach wie der Name schon sagt einfach bei print aufzählt also name,vorname und lohn
Nun möchte ich einbauen, dass man aussuchen kann von wem das gemacht wird. Und hierbei kommt das Problem
Code: Alles auswählen
a = input("Geben sie den Mitarbeiter ein: ")
print(a.get_mitarbeiter_id())
Danach kommt diese Fehlermeldung: AttributeError: 'str' object has no attribute 'get_mitarbeiter_id'
Wie kann ich die Variabel so formatieren, dass es funktioniert
Re: class variablen
Verfasst: Samstag 11. April 2020, 18:59
von __deets__
Du musst deine Mitarbeiter in einer Datenstruktur vorhalten. Einer Liste, oder einem Woerterbuch. Und wenn du dann eine solche Abfrage programmieren willst, dann musst du den Mitarbeiter in der Datenstruktur suchen und zurueckliefer. Und DANN kann man auf dem resultierenden Objekt eine Methode aufrufen.
Wobei du get_mitarbeiter_id() nicht einfuehren solltest. Sowas macht man in Python nicht. Da reicht ein einfaches
mitarbeiter.id
aus.
Re: class variablen
Verfasst: Samstag 11. April 2020, 19:51
von Sirius3
Wo hast Du die Methode `get_mitarbeiter_id` erstellt, und wie sieht die aus?
`a` ist nicht nur ein sehr schlechter Variablenname, sondern auch noch ein String, und der hat mit Sicherheit keine Methode `get_mitarbeiter_id`.
Re: class variablen
Verfasst: Samstag 11. April 2020, 22:18
von Ice-Oskar
Sirius3 hat geschrieben: Samstag 11. April 2020, 19:51
Wo hast Du die Methode `get_mitarbeiter_id` erstellt, und wie sieht die aus?
`a` ist nicht nur ein sehr schlechter Variablenname, sondern auch noch ein String, und der hat mit Sicherheit keine Methode `get_mitarbeiter_id`.
ja würde a noch umbenennen aber muss ich denn net noch irgendwie in eine Instanzvariable verwandeln?
Code: Alles auswählen
def get_mitarbeiter_id(self):
a = self.name[0]
b = self.vorname[0]
if self.lohn <= 2800:
return "Der Lohn von " + self.vorname + " "+self.name + " " + "ist mit " + str(self.lohn) + "$"\
" unterm Mindestlohn von 2800$. "
else:
return "Hallo ich bin " + self.vorname + " " + self.name +\
" (alias "+ b + "." + a + "." + ")" \
" und ich verdiene " + str(self.lohn)
Re: class variablen
Verfasst: Samstag 11. April 2020, 22:21
von Ice-Oskar
__deets__ hat geschrieben: Samstag 11. April 2020, 18:59
Du musst deine Mitarbeiter in einer Datenstruktur vorhalten. Einer Liste, oder einem Woerterbuch. Und wenn du dann eine solche Abfrage programmieren willst, dann musst du den Mitarbeiter in der Datenstruktur suchen und zurueckliefer. Und DANN kann man auf dem resultierenden Objekt eine Methode aufrufen.
Wobei du get_mitarbeiter_id() nicht einfuehren solltest. Sowas macht man in Python nicht. Da reicht ein einfaches
mitarbeiter.id
aus.
Ja das mit der mitarbeiter.id werde ich ändern. Ja eine Liste wollte ich noch anlegen um Mitarbeiter hinzuzufügen und das mit den Datenstrukturen schaue ich mir gleich mal an.
Re: class variablen
Verfasst: Samstag 11. April 2020, 22:59
von Sirius3
Das ist ja keine ID, sondern eine Textausgabe. Strings stückelt man nicht mit + zusammen, sondern benutzt Format-Strings:
Code: Alles auswählen
class Mitarbeiter:
def __init__(self,name,vorname,lohn):
self.name = name
self.vorname = vorname
self.lohn = lohn
def __str__(self):
if self.lohn <= 2800:
return f"Der Lohn von {self.vorname} {self.name} ist mit {self.lohn}$ unterm Mindestlohn von 2800$."
else:
return f"Hallo ich bin {self.vorname} {self.name} (alias {self.vorname[0]}.{self.name[0].) und ich verdiene {self.lohn}"
hans = Mitarbeiter("Müller", "Hans", 2000)
print(hans)
Und jetzt brauchst Du noch eine Datenstruktur, in der Du die Mitarbeiter speichern und wieder abfragen kannst.
Re: class variablen
Verfasst: Sonntag 12. April 2020, 09:11
von Ice-Oskar
Sirius3 hat geschrieben: Samstag 11. April 2020, 22:59
Das ist ja keine ID, sondern eine Textausgabe. Strings stückelt man nicht mit + zusammen, sondern benutzt Format-Strings:
Code: Alles auswählen
class Mitarbeiter:
def __init__(self,name,vorname,lohn):
self.name = name
self.vorname = vorname
self.lohn = lohn
def __str__(self):
if self.lohn <= 2800:
return f"Der Lohn von {self.vorname} {self.name} ist mit {self.lohn}$ unterm Mindestlohn von 2800$."
else:
return f"Hallo ich bin {self.vorname} {self.name} (alias {self.vorname[0]}.{self.name[0].) und ich verdiene {self.lohn}"
hans = Mitarbeiter("Müller", "Hans", 2000)
print(hans)
Und jetzt brauchst Du noch eine Datenstruktur, in der Du die Mitarbeiter speichern und wieder abfragen kannst.
Ja ich habe die Mitarbeiter nun in listen gespeichert aber wenn ich jetzt
Code: Alles auswählen
person = input("Geben sie die Person nach der sie suchen ein: ")
print(person)
funktioniert es immer noch net. Hier sind noch nen paar Möglichkeiten die bei mir auch net funktioniert haben:
Die liste ist:
Code: Alles auswählen
Ben = Mitarbeiter("Reinhard","Ben",4000)
Hans = Mitarbeiter("Schulz", "Hans", 4000)
liste = [Ben,Hans]
Code: Alles auswählen
person = str(input("Geben sie den Vornamen der Person ein: "))
if person in liste:
print("ja")
else:
print("nein")
Code: Alles auswählen
person = str(input("Geben sie den Vornamen der Person ein: "))
ges = liste.index(person)
print(ges)
Re: class variablen
Verfasst: Sonntag 12. April 2020, 09:24
von Sirius3
Nur weil Du irgendwo einen String mit Inhalt "Ben" hast, hat das noch lange nichts mit einer Variable gleichen Namens zu tun. Wie eine Variable heißt, ist für die Funktion des Programm völlig egal. Du mußt die Mitarbeiter in der Liste suchen, und zwar anhand ihres Vornamens:
Code: Alles auswählen
alle_mitarbeiter = [
Mitarbeiter("Reinhard", "Ben", 4000),
Mitarbeiter("Schulz", "Hans", 4000),
Mitarbeiter("Mayer", "Hans", 2000)
]
vorname = input("Geben sie den Vornamen der Person ein: ")
print(f"Hier alle Mitarbeiter mit Vorname {vorname}:")
for mitarbeiter in alle_mitarbeiter:
if mitarbeiter.vorname == vorname:
print(mitarbeiter)