Wie schwer schätzt ihr diese Programmieraufgabe in Python für einen Anfänger ein ohne die Lösung zu kennen?


12.11.2024, 22:35

das ist ein Auszug

3 Antworten

Wenn Du schon den Tipp mit strip() bekommst, solltest Du wenigstens die Dokumentation dazu lesen. Das hätte Dir viel Arbeit erspart.

Grundsätzlich solltest Du – nicht nur als Anfänger – die Doku immer griffbereit haben und auch mal darin stöbern. Das war jetzt die höfliche Übersetzung von „RTFM“ :-)

Eine komplette Lösung der Aufgabe kann auch so aussehen:

from string import punctuation

with open("rittmeister_brand_kapitel_1.txt", 
          encoding="utf-8") as text:
   for line in text:
      for word in line.split():
         base = word.strip(punctuation+"«»")
         if base:
            print(base)

Ich glaube aber nicht, dass Deine Guillemets hier gefragt sind. Falls doch, dann fehlen noch ein paar Hundert andere Sonderzeichen, und es wäre einfacher, statt strip() mit einem regulären Ausdruck zu arbeiten:

         base = re.sub('^\W*(.*?)\W*$', '\\1', word)

Reguläre Ausdrücke sind zwar eher was für Fortgeschrittene, aber die Zeile oben klappt auch bei word='¡Arriba!' – echt cool!

Bin studierter Informatiker. Sowas haben wir im ersten Semester in der ersten Woche gemacht. Das ist sehr einfach.


Anonym6262727 
Beitragsersteller
 12.11.2024, 22:38

Alles klar danke für die Antwort! Ich finde die Aufgaben sehr einfach wenn man in die Tutorien geht aber selbständig ohne Tutorien oder Vorwissen finde ich es deutlich schwerer hast du das damals auch so empfunden das mit Tutorien Aufgaben sehr viel leichter erscheinen im Nachhinein ?

Anonym6262727 
Beitragsersteller
 12.11.2024, 23:42
@Anonym6262727

Ich habe mir für die Aufgabe diesen Code überlegt und für die Aufgabe funktioniert er auch. Aber ich bin mit ihm nicht zufrieden, weil man sehr oft strip verwenden muss, was bei einem langem Text sehr mühselig sein kann. Wüsstest du vllt wie man viel effizienter alle Sonderzeichen am Anfang und Ende eines Wortes entfernen kann. Dazu konnte ich leider nichts im Internet finden.

Desweiteren hat mein Dozent gesagt, dass wir den ersten Teil mit dem open nur einsetzen aber nicht verstehen müssen. Seid ihr damals auch darauf eingegangen wie genau das lesen einer Datei funktioniert?

f = open("rittmeister_brand_kapitel_1.txt", encoding="utf-8")

text = f.read()

f.close()

neueliste = []

textgetrennt = text.split()

for wort in textgetrennt:

   polierteswort = wort.strip().strip("»").strip(".").strip("[").strip("]").strip("-").strip("«").strip(",").strip(":").strip("«").strip("&").strip(";").strip(".").strip("?").strip("'")

   neueliste.append(polierteswort)

neuelistegetrennt = []

for neuewort in neueliste:

   if neuewort == "":

     pass

   else:

     neuelistegetrennt.append(neuewort)

   

for finalewort in neuelistegetrennt:

   print(finalewort)

Das ist einfach, man muss nur den Syntax kennen eigentlich

Woher ich das weiß:Studium / Ausbildung – Studiere aktuell Informatik

Anonym6262727 
Beitragsersteller
 12.11.2024, 23:47

Danke für die Antwort

Ich habe mir für die Aufgabe diesen Code überlegt und für die Aufgabe funktioniert er auch. Aber ich bin mit ihm nicht zufrieden, weil man sehr oft strip verwenden muss, was bei einem langem Text sehr mühselig sein kann. Wüsstest du vllt wie man viel effizienter alle Sonderzeichen am Anfang und Ende eines Wortes entfernen kann. Dazu konnte ich leider nichts im Internet finden.

Desweiteren hat mein Dozent gesagt, dass wir den ersten Teil mit dem open nur einsetzen aber nicht verstehen müssen. Ist das auch einfach zu verstehen? Weil irgendwie kann ich den ersten Teil nicht wirklich mit dem Open und encodier im Detail nachvollziehen.

f = open("rittmeister_brand_kapitel_1.txt", encoding="utf-8")

text = f.read()

f.close()

neueliste = []

textgetrennt = text.split()

for wort in textgetrennt:

   polierteswort = wort.strip().strip("»").strip(".").strip("[").strip("]").strip("-").strip("«").strip(",").strip(":").strip("«").strip("&").strip(";").strip(".").strip("?").strip("'")

   neueliste.append(polierteswort)

neuelistegetrennt = []

for neuewort in neueliste:

   if neuewort == "":

     pass

   else:

     neuelistegetrennt.append(neuewort)

   

for finalewort in neuelistegetrennt:

   print(finalewort)