Quellcode für pyzufall.helfer
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
pyzufall.helfer
---------------
Stellt diverse Hilfsfunktionen bereit.
"""
from __future__ import (absolute_import, division, print_function, unicode_literals)
from builtins import *
import os, sys
import codecs
import random as r
from datetime import datetime, date
# Regex Pattern
re_wort = r'^[A-Za-zäÄöÖüÜß-]+$'
re_worte = r'^[A-Za-zäÄöÖüÜß -]+$'
re_liste = r'^[A-Za-zäÄöÖüÜß -]+,[A-Za-zäÄöÖüÜß, -]+'
re_datum = r'^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[0-2]).(19|20)[0-9]{2}$'
re_email = r'^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$'
re_satz = r'^[A-ZÄÖÜ]{1}[a-zA-Z0-9éäÄöÖüÜß ,-/.?"()]+[.!?]{1}$'
re_frage = r'^[A-ZÄÖÜ]{1}[a-zA-Z0-9éäÄöÖüÜß ,-/"()]+[?]{1}$'
[Doku]def lese(dateiname):
"""
Liest die Textdatei mit dem übergebenen Namen aus data/ zeilenweise ein und gib eine Liste zurück.
Beispiel:
>>> liste = lese('baeume.txt')
`<http://stackoverflow.com/questions/10174211/make-an-always-relative-to-current-module-file-path>`_
:param dateiname: Dateiname inklusive Endung, z.B. *vornamen.txt*
:type dateiname: string
:rtype: list
.. only:: doctest
# überprüfe ob liste eine liste ist
>>> assert isinstance(liste, list)
"""
dateipfad = os.path.join(os.path.dirname(__file__), 'data/' + dateiname)
return codecs.open(dateipfad, 'r', 'utf-8').read().splitlines()
[Doku]def chance(wahrscheinlichkeit, wert):
"""
Der übergebene Wert wird mit der gewählten Wahrscheinlichkeit zurückgegeben.
.. versionadded:: 0.11
:param wahrscheinlichkeit: int zwischen 1 und 100
:param wert: string
"""
if r.randint(1, 100) <= wahrscheinlichkeit:
return wert
else:
return ''
[Doku]def erste_gross(s):
"""
Macht den ersten Buchstaben gross.
Beispiele:
>>> a = erste_gross('das ist ein Beispiel?')
>>> print(a)
Das ist ein Beispiel?
>>> b = erste_gross('über Stock und Stein.')
>>> print(b)
Über Stock und Stein.
>>> c = erste_gross('älter als das Internet!')
>>> print(c)
Älter als das Internet!
"""
return s[0].upper() + s[1:]
[Doku]def str_add(wort, string):
"""
Fügt einen String ans Ende eines Wortes an, ohne doppelte Buchstaben zu erzeugen.
Beispiele:
>>> a = str_add('feige', 'er')
>>> print(a)
feiger
>>> b = str_add('feige', 'e')
>>> print(b)
feige
>>> c = str_add('blöd', 'e')
>>> print(c)
blöde
.. only:: docstest
>>> a = str_add('unflexibel', 'e')
>>> print(a)
unflexible
>>> b = str_add('unflexibel', 'er')
>>> print(b)
unflexibler
.. versionadded:: 0.11
"""
# wenn der letzte Buchstabe des wortes ist gleich der erste des strings
if wort[-1] == string[0]:
# gebe wort + alles ohne den ersten des strings zurück
s = wort + string[1:]
else:
s = wort + string
# behebt Fehler: unflexibele -> unflexible
if s[-3:] == 'ele':
s = s[:-3] + 'le'
# behebt Fehler: unflexibeler -> unflexibler
if s[-4:] == 'eler':
s = s[:-4] + 'ler'
return s
[Doku]def aufzaehlung(liste):
"""
Erzeugt eine grammatikalisch korrekte Aufzählung aus einer Liste.
Beispiel:
>>> a = ['lesen', 'reiten', 'Freunde treffen']
>>> s = aufzaehlung(a)
>>> print(s)
lesen, reiten und Freunde treffen
>>> b = ['Überwachen', 'Strafen']
>>> s = aufzaehlung(b)
>>> print(s)
Überwachen und Strafen
>>> c = ['schlafen']
>>> s = aufzaehlung(c)
>>> print(s)
schlafen
:param liste: Eine Liste von Strings.
:type liste: list
:rtype: string
.. versionadded:: 0.12
"""
return "{}{}".format(', '.join(liste[:-2]) + ', ' if len(liste) > 2 else '', ' und '.join(liste[-2:]))
[Doku]def alter(geburtsdatum):
"""
Berechnet das Alter in Jahren anhand des Geburtsdatums.
:rtype: int
.. only:: doctest
>>> s = alter("27.10.1988")
>>> assert s > 24
.. versionadded:: 0.12
"""
_heute = date.today()
_geburtstag = datetime.strptime(geburtsdatum, "%d.%m.%Y").date()
_alter = int((_heute - _geburtstag).days / 365.2425)
return _alter
[Doku]def uml(s):
"""
Ersetzt Umlaute durch die entsprechenden 2 Buchstaben.
Beispiel:
>>> a = uml('Käse')
>>> print(a)
Kaese
>>> b = uml('Brötchen')
>>> print(b)
Broetchen
>>> c = uml('Gefühl')
>>> print(c)
Gefuehl
.. versionadded:: 0.13
"""
s = s.replace('ä', 'ae')
s = s.replace('ü', 'ue')
s = s.replace('ö', 'oe')
s = s.replace('ß', 'ss')
return s