Quellcode für pyzufall.person

#!/usr/bin/env python
# -*- coding: utf8 -*-

"""
pyzufall.person
---------------

Stellt die Klasse Person zur Verfügung. Mit ihr kann man ein Objekt erzeugen, dass eine Person mit zufällig generierten Daten darstellt.

Es kann auf jedes Attribut einzeln zugegriffen werden oder mit print(person) alle aufeinmal ausgeben werden.

Die generierten Daten basieren teilweise auf statistischen Werten und versuchen möglichst authentisch zu sein.

Quellen für Statistiken:

- https://www.destatis.de/
- http://de.statista.com/
- https://www.zensus2011.de/
- http://www.statistik2013.de/
"""

import random as r
import datetime

from .helfer import chance
from .generator import geschlecht, geburtsdatum, vorname_m, vorname_w, nachname, stadt, farbe, essen, beilage, sprichwort, beruf_m, beruf_w

# Daten
from .generator import interessen

[Doku]class Person(object): """ Generiert Daten einer zufälligen und fiktiven Person. .. versionadded:: 0.9 """ anzahl = 0 debug = 0 # extern auf 1 setzen def __init__(self): self.geschlecht = geschlecht() if self.geschlecht: self.vorname = vorname_m() #+ e16("-" + vorname_m()) #zu 16% ein Doppelname else: self.vorname = vorname_w() #+ e16("-" + vorname_w()) #zu 16% ein Doppelname self.nachname = nachname() self.name = self.vorname + " " + self.nachname self.geburtsdatum = geburtsdatum() self.geburtsort = stadt() self.alter = Person.alter(self) self.wohnort = stadt() self.beruf = Person._gen_beruf(self) self.interessen = Person._gen_interessen(self) self.lieblingsfarbe = farbe() self.lieblingsessen = essen() + chance(50, " mit " + beilage()) self.motto = sprichwort() Person.anzahl += 1 if Person.debug: print("Neue Person generiert: " + self.name) def __del__(self): Person.anzahl -= 1 if Person.debug: print("Person '" + self.name + "' wurde gelöscht.") def __str__(self): s = "*" * 80 + "\n" s += "Name: " + self.name + "\n" s += "Geschlecht: " if self.geschlecht: s += "männlich" else: s += "weiblich" s += "\nGeburtsdatum: " + self.geburtsdatum + " (" + str(self.alter) + ")\n" s += "Geburtsort: " + self.geburtsort + "\n" s += "Wohnort: " + self.wohnort + "\n" s += "Beruf: " + self.beruf + "\n" s += "Interessen: " + self.interessen + "\n" s += "Lieblingsfarbe: " + self.lieblingsfarbe + "\n" s += "Lieblingsessen: " + self.lieblingsessen + "\n" s += "Motto: " + self.motto + "\n" s += "*" * 80 + "\n" return s
[Doku] def alter(self): """ Berechnet das Alter der übergebenen Person. :rtype: int """ _heute = datetime.date.today() _geburtstag = datetime.datetime.strptime(self.geburtsdatum, "%d.%m.%Y").date() _alter = int((_heute - _geburtstag).days / 365.2425) return _alter
def _gen_beruf(self): """ Generiert den Beruf einer Person anhand des Alters und Statistiken. Es wird von 10% Arbeitslosigkeit ausgegangen, die ofizielle Statistik ist allerdings 7,10% im Jahr 2013. Quelle: http://de.statista.com/statistik/daten/studie/1224/umfrage/arbeitslosenquote-in-deutschland-seit-1995/ Es wird angenommen, dass 30% der zwischen 19 und 29 jährigen studieren: Studienanfänger 43,3% Studienabsolventen: 26,2% Quelle: http://de.wikipedia.org/wiki/Abiturientenquote_und_Studienanf%C3%A4ngerquote """ if self.geschlecht: # männlich if self.alter < 6: return "kein" elif self.alter <= 18: return "Schüler" elif self.alter > 18 and self.alter < 30 and r.randint(0,100) <= 30: # 30% studieren return "Student" elif self.alter > 68: return "Rentner" elif r.randint(0,9): # 1 von 10 arbeitslos return beruf_m() else: return "arbeitslos" else: # weiblich if self.alter < 6: return "kein" elif self.alter <= 18: return "Schülerin" elif self.alter > 18 and self.alter < 30 and r.randint(0,100) <= 30: # 30% studieren return "Studentin" elif self.alter > 68: return "Rentnerin" elif r.randint(0,9): # 1 von 10 arbeitslos return beruf_w() else: return "arbeitslos" def _gen_interessen(self): """ Gibt eine Liste mit Interessen zurück. """ _anzahl = r.randint(1,3) if r.randint(0,1): # 50% haben mehr als 3 Interessen, maximal 8 _anzahl + r.randint(1, 5) _s = ', '.join(r.sample(interessen, _anzahl)) return _s