Hilfe zu einer Aufgabenstelllung

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.
mariposa
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2013, 11:58

@BlackJack
Danke erst einmal..
Kann es sein, dass dein Code für Python 2 geschrieben wurde? Ich benutze nämlich die aktuelle Version und das würde vielleicht (hoffentlich :roll: ) erklären, weshalb ich da mit einigen Sachen im Code leider nicht viel anfangen kann.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

mariposa hat geschrieben:Ich benutze nämlich die aktuelle Version ...
Auch Python2.7 ist aktuell. Wahrscheinlich sind die `print`-Statements das einzige das du aendern muesstest.
BlackJack

@mariposa: Ich benutze ein aktuelles Python 2.7. Die Änderungen für Python 3 sind aber nicht schwer. Statt `itertools.izip()` ist es in 3 die eingebaute `zip()`-Funktion. Dafür muss man `reduce()` aus `functools` importieren. Und `print()` ist zur Funktion geworden. Das war's aber auch schon.

Edit: So sollte es unter Python 2.7 und 3 laufen:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import print_function, unicode_literals
import io
from collections import defaultdict
from functools import partial, reduce
try:
    from itertools import izip
except ImportError:
    izip = zip
from operator import and_, methodcaller


sorted_caseless = partial(sorted, key=methodcaller('lower'))


def read_tokens(filenames):
    for filename in filenames:
        with io.open(filename, encoding='utf8') as lines:
            yield set(line.strip() for line in lines)


def get_common_tokens(filenames):
    return reduce(and_, read_tokens(filenames))


def create_register(filenames):
    token2filenames = defaultdict(set)
    for filename, tokens in izip(filenames, read_tokens(filenames)):
        for token in tokens:
            token2filenames[token].add(filename)
    return token2filenames


def main():
    filenames = ['t1.txt', 't2.txt', 't3.txt']
    print('### Ausgabe zu Teilaufgabe 1 ###')
    print(', '.join(sorted_caseless(get_common_tokens(filenames))))

    print('\n\n### Ausgabe zu Teilaufgabe 2 ###')
    register = create_register(filenames)
    for token in sorted_caseless(register):
        print (
            '{0}: {1}'.format(
                token, ' '.join(sorted_caseless(register[token]))
            )
        )


if __name__ == '__main__':
    main()
mariposa
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2013, 11:58

Ja super.. läuft, danke!
Aber in der Aufgabenstellung steht, dass die Stellen, an denen "pass" steht, durch den Code ersetzen werden sollen, der ca 10 Zeilen betragen kann.. Mich würde interessieren, ob ihr in dieser Richtung noch Vorschläge hättet
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

BlackJack hat geschrieben:Da der Abgabetermin mittlerweile wahrscheinlich verstrichen ist, ...
Mir kommt es so vor, dass dem nicht so ist ...

@mariposa: Was ist denn dein Ansatz in der Richtung?
mariposa
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2013, 11:58

@cofi
Also zu der Abgabefrist kann ich dir leider nichts sagen, ich weiß nicht wann sie endet.. ;)

Und einen Ansatz kann ich dir nicht wirklich geben, ich versuche mich lediglich in Python reinzusteigern.. Ich dachte für so etwas sei man hier richtig..
der Kursleiter
User
Beiträge: 2
Registriert: Mittwoch 18. September 2013, 12:23

kbr hat geschrieben:Didaktisch finde ich die Aufgabe ganz gut gelungen.
Der Kursleiter bedankt sich...

Ansonsten bin ich enttäuscht, wie mit dieser Frage umgegangen wurde. Es ging ganz offen um eine Aufgabenstellung. Aus anderen Foren kenne ich da deutlich mehr Zurückhaltung hinsichtlich der Bereitschaft, komplette Lösungen zu liefern. Geholfen wurde damit niemandem.
BlackJack

@der Kursleiter: Jemand der eine der Lösungen abgibt *kann* schon Python oder es sollte dem Dozenten/Tutor auffallen dass es eine Diskrepanz zwischen können und verwendeten Sprachkonstrukten und Klassen gibt. Spätestens wenn man sich den Code von jemandem erklären lässt der das einfach nur übernommen hat, sollte es auffallen. Ich habe jedenfalls keine Lösung geliefert die ein Programmier- oder Python-Anfänger mal eben so selbstständig aus dem Ärmel schüttelt.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@der Kursleiter: Aufgaben sollten ja auch nie nur der Lösung willen gestellt werden, sondern um daran etwas zu lernen. Spätestens ein Oberstufenschüler sollte sich dessen bewußt sein. Hier im Forum werden sehr oft „Musterlösungen“ präsentiert, die musterhaft eine ganze Klasse von Problemen lösen können, wenn sie verstanden werden.
der Kursleiter
User
Beiträge: 2
Registriert: Mittwoch 18. September 2013, 12:23

BlackJack hat geschrieben:Ich habe jedenfalls keine Lösung geliefert die ein Programmier- oder Python-Anfänger mal eben so selbstständig aus dem Ärmel schüttelt.
Das stimmt. Aber dass das bloße Kopieren einer solchen Lösung wahrscheinlich auffällt, ist nur ein Aspekt. Denn:
Sirius3 hat geschrieben:Aufgaben sollten ja auch nie nur der Lösung willen gestellt werden, sondern um daran etwas zu lernen.
Komplette Lösungen abzuliefern, bevor die OP auch nur den kleinsten eigenen Ansatz liefert, ist keine gute Lernhilfe.
Antworten