#!/usr/bin/env python
#-*- coding: UTF-8 -*-
#
# Aufgabe 3: Python Operationen auf Listen, Sequenzen und Dictionaries
# Author: Matthias Rebel, 731220


# a)
def a_seq2list():
    """ a) seq/tuple = unveraenderbarer Typ vs. veraenderbarer Typ = Liste, >>> mit list """
    sequence = ('a', 'b', 'c', 'd', 'e')
    L = list(sequence)
    print sequence , ' > ', L,' \n '


# b)
def b_entferne_the_2nd():
    """ b) über die Indizes """
    string = 'entferne den zweite buchstaben aus einem string '
    print string, ' > ', (string[0:1]+string[2:]),' \n '


# c) 
def c_set_new():
    """ c) die Liste wird einfach neu instanziiert > ist ja veraenderbar Typ """
    liste = [3,None,'hallo']
    print liste, ' > ',
    liste = [1,2,3]
    print liste,' \n '


# d)
m = {'a': 1, 'b': 2}
def d_hat_schluessel(schluessel):
    """ d) als eine Funktion mit try > True / except > False """
    try:
        x = m[schluessel]
        return True
    except KeyError:
        return False



# e) das sie auf dictionaries operieren ??? nein
def e():
    """ e) Diese Methoden haben bei einem Dictionary jeweils das gleiche Ergebnis, da sie nur das TopLevel zählen. """
    e = {'a': 1, 'b': 2, 'c': (1,2,3)}
    print 'dictionary =',e
    print 'len(dictionary) =', len(e),', len(dictionary.keys()) =', len(e.keys()),
    print ', len(dictionary.values()) =',len(e.values()), ', len(dictionary.items()) =', len(e.items()),'\n'



# f)
string = 'Das Auftreten jedes Token in diesem String wird gezählt und in einem Dictionary als Wort, Frequenz - Paar gespeichert.'
def f_alternativeErzeugung(string):
    """ Das Auftreten jedes Token in diesem String wird gezählt und in einem Dictionary als Wort, Frequenz - Paar gespeichert. """
    tokens = string.split()
    wordfreq = [tokens.count(p) for p in tokens]
    return dict(zip(tokens,wordfreq))


def zeige_alle():
    a_seq2list()
    b_entferne_the_2nd()
    c_set_new()
    print "d_hat_schluessel('a')  > ", d_hat_schluessel('a'), ' \n '
    e()
    print string,'\nstring2freqDic =', f_alternativeErzeugung(string)

zeige_alle()