Hallo, ein Neuling steckt in Schwierigkeiten :)

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Oops, ich hatte da wohl die letzte Aufgabe nicht korrekt gelesen. Hier die korrigierte Version. BlackJacks Ansatz mit der Datenstruktur ist aber wesentlich besser und auch beim Parsen müsste ich mir mehr "Mühe" geben.

@BlackJack: Dafür ist Deine Rückgabe bei Aufgabe 1 nicht korrekt ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hoola
User
Beiträge: 18
Registriert: Samstag 7. Juli 2012, 08:44

Mal zu aufgabe 4 a).
Ich bin gerade dabei mir die Grundsätze des Dictionarys anzueignen .. scheint ja nicht all zu schwer zu sein.
Allerdings verstehe ich bei BlackJacks Lösung folgendes nicht ganz: "Date(2009, 1, 1)".
Ist "Date()" jetzt ein Tupel oder eine extra Funktion von Python oder was?
Verstehe grad den Grund nicht wirklich, warum der Stand in dieser Form dargestellt werden muss.
Kann man den Stand so besser ändern, wenn es mal eine "neue Version" einer Karte geben sollte?
Ich dachte Tupel sind immutabel, oder ist das gar kein Tupel?
Könnt ihr mir auf die Sprünge helfen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hoola hat geschrieben: Ist "Date()" jetzt ein Tupel oder eine extra Funktion von Python oder was?
Da hilft ein Blick ganz nach oben in BJs Lösung:

Code: Alles auswählen

from datetime import date as Date
Das ist ein spezieller Datentyp für ein Datum in Python. Kannst das in der Doku im `datetime`-Modul mal nachlesen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Was bewirkt die dreifache Zuweisung in ``sex = sexes = sex if sex in allowed_sexes else None``?
hoola
User
Beiträge: 18
Registriert: Samstag 7. Juli 2012, 08:44

Hyperion hat geschrieben:
hoola hat geschrieben: Ist "Date()" jetzt ein Tupel oder eine extra Funktion von Python oder was?
Da hilft ein Blick ganz nach oben in BJs Lösung:

Code: Alles auswählen

from datetime import date as Date
Das ist ein spezieller Datentyp für ein Datum in Python. Kannst das in der Doku im `datetime`-Modul mal nachlesen.
Super vielen Dank.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

webspider hat geschrieben:Was bewirkt die dreifache Zuweisung in ``sex = sexes = sex if sex in allowed_sexes else None``?

BlackJack "überschreibt" damit `sex`, damit er die Vorkommen im `defaultdict` korrekt hochzählen kann. Man will da ja wissen, wieviele "Fehler" aufgetreten sind, daher muss man sich da auf den Wert `None` beziehen und nicht auf `s` oder was da sonst noch stehen könnte.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Ups, hier 1 b) mit korrektem Rückgabetyp. :oops:

Code: Alles auswählen

# 
# 1 b)
# 
def get_unique_characters(string):
    """
    >>> get_unique_characters('')
    []
    >>> get_unique_characters('baabcad')
    ['a', 'b', 'c', 'd']
    >>> get_unique_characters('mississippi')
    ['i', 'm', 'p', 's']
    >>> get_unique_characters('python')
    ['h', 'n', 'o', 'p', 't', 'y']
    """
    return sorted(set(string))
@webspider: Das ist nur eine zweifache Zuweisung. Da wird entweder der Wert von `sex` oder `None` an `sex` und `sexes` gebunden, je nach dem ob es ein erlaubter Wert ist oder nicht. Das da `sexes` mit drin steht hat den Grund in der IMHO komischen Aufgabenstellung dass die Funktion eine Änderung der Liste als Seiteneffekt haben soll.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ja, da sind einige Sachen eher "unpythonisch" und allgemein sonderbar. Ich denke wir sind uns auch einig, dass da vieles eben nicht mit Bordmitteln gelöst werden soll - Aufgabe 1 ist mit unserer Lösung ja eher, nunja, "trivial". Ich vermute doch mal stark, dass hier eher C-like Schleifen a la "problembär" benutzt werden sollten. Aber vielleicht irre ich mich auch :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Aufgabe 1 b) scheint mir gar keine ernsthafte Programmieraufgabe zu sein, sondern einfach nur geschenkte Punkte für Leute, die den gegebenen Quelltext von 1 a) verstanden haben und sich noch erinnern wie man Funktionen definiert. ;-)
hoola
User
Beiträge: 18
Registriert: Samstag 7. Juli 2012, 08:44

Code: Alles auswählen

ISBN = {
    '9783768825825':['Delius Klasing','MV - Bornholm', Date(2009, 1, 1), 54.90, 2],
    '9783768832021':['Delius Klasing','MV - Bornholm', Date(2011, 1, 1), 54.90, 13],
    '9783892255598':['Edition Maritim','Rund Rügen', Date(2008, 3, 1), 29.90, 15],
    '9783892252368':['Delius Klasing','Küstenhandbuch MV', Date(2006, 3, 1), 29.90, 3],
    '9783980672016':['Quick Maritim Medien','Törnplaner/-atlas Peene, Oder, Bodden', Date(2006, 4, 1), 25.00, 5],
    '9783768831017':['Delius Klasing','Kieler Bucht und Rund Fünen (2010)', Date(2010, 3, 1), 69.90, 17]
    }

def inventur(dictionary):
    summe = 0
    for key in dictionary.keys():
        summe += dictionary[key][3]*dictionary[key][4]
    return summe

print(inventur(ISBN))
Aufgabe 4 b) geschafft .. Dictionarys scheinen relativ einfach sein.
Geht die Lösung so?
Benutzeravatar
pillmuncher
User
Beiträge: 1531
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Oder einfacher:

Code: Alles auswählen

def aggregated_value_of_inventory(stock):
    return sum(value[3] * value[4] for value in stock.values())
In specifications, Murphy's Law supersedes Ohm's.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

An dieser Stelle brauchst du doch nur die Values, dann nimm doch besser gleich ``values()`` oder in Python 2.x ``itervalues()`` statt ``keys``

Code: Alles auswählen

for key in dictionary.keys():
Und wenn man das weiter optimiert kommt man bei pillmunchers Lösung raus.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hoola
User
Beiträge: 18
Registriert: Samstag 7. Juli 2012, 08:44

Ahoi,
wollte mich nur nochmal zurückmelden und euch für eure Hilfe bedanken.
Hab ne 2,0 in der Prüfung bekommen, es hat also was gebracht! :)

Gehabt euch wohl!

Peace
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hoola hat geschrieben: Hab ne 2,0 in der Prüfung bekommen, es hat also was gebracht! :)
Na dann: Glückwunsch!

Konntest Du denn `enumerate` anbringen? :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten