Python Programmierungsaufgabe?

2 Antworten

https://docs.python.org/3/tutorial/introduction.html#lists

Lesen udn anwenden. Falls es konkrete Fragen geben sollte, kannst Du sie entsprechend stellen.

Lukasstei22 
Fragesteller
 27.10.2023, 18:08

def print_sequence_parts(sequence):

  print(sequence[-1]) # Das letzte Element mithilfe von Indexing auswählen

  if len(sequence) > 2:

    print(sequence[1:-1]) # Die Mitte der Sequenz mithilfe von Slicing auswählen

    if len(sequence) % 2 == 0:

      print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen (gerade Anzahl)

    else:

      print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen (ungerade Anzahl)

  if len(sequence) >= 4:

    print(sequence[-4:]) # Die letzten vier Elemente mithilfe von negativem Indexing auswählen

  if len(sequence) <= 5:

    print(sequence) # Sequenzen mit fünf oder weniger Elementen direkt ausgeben

  elif len(sequence) == 8:

    print(sequence[2:-2]) # Zwei Elemente am Anfang und am Ende weglassen (genau acht Elemente)

  else:

    print(sequence[-4:]) # Die letzten vier Elemente für alle anderen Sequenzen auswählen

# Testfälle

eingabe1 = "ABCDE"

eingabe2 = "FGHIJKLMN"

eingabe3 = [1, 2, 3, 4, 5, 6, 7, 8]

print_sequence_parts(eingabe1)

print_sequence_parts(eingabe2)

print_sequence_parts(eingabe3)

ist es so korrekt ?

0
KarlRanseierIII  27.10.2023, 20:14
@Lukasstei22

Die Aufgabe ist teilweise nicht genau spezifiziert, von daher sollte das soweit passen.

>>> [1][1:-1]
[]

Slicing erzeugt im Zweifelsfall eine leere Liste,, man könnte sich da also das if ggf. auch sparen.

Witzigerweise:

if len(sequence) % 2 == 0:
      print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen (gerade Anzahl)
else:
      print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen (ungerade Anzahl)

Hier prüfst Du die Mindestlänge nicht, machst aber eine unnötige Unterscheidung, denn die Ganzzahldivision rundet eutomatisch ab, sodaß bei ungerader Anzahl automatisch das mittlere Element mitgenommen wird.

1
Lukasstei22 
Fragesteller
 27.10.2023, 20:38
@KarlRanseierIII

Erstmal vielen lieben Dank !

Ich habe nun nochmal drüber geschaut und es hoffentlich richtig ausgebessert:-)

so schaut es jetzt aus:

def print_sequence_parts(sequence):

  print(sequence[-1]) # Das letzte Element mithilfe von Indexing auswählen

  print(sequence[1:-1]) # Die Mitte der Sequenz mithilfe von Slicing auswählen

  print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen

  print(sequence[-4:]) # Die letzten vier Elemente mithilfe von negativem Indexing auswählen

  print(sequence) # Direkt die gesamte Sequenz ausgeben

# Testfälle

eingabe1 = "ABCDE"

eingabe2 = "FGHIJKLMN"

eingabe3 = [1, 2, 3, 4, 5, 6, 7, 8]

print_sequence_parts(eingabe1)

print_sequence_parts(eingabe2)

print_sequence_parts(eingabe3)

0
KarlRanseierIII  27.10.2023, 20:54
@Lukasstei22

Bei der letzten Teilaufgabe mußt Du natürlich schon noch die Fälle unterschieden, wird ja auch explizit gefordert.

0
Lukasstei22 
Fragesteller
 27.10.2023, 21:06
@KarlRanseierIII

Oh sorry stimmt 😅

def print_sequence_parts(sequence):

  print(sequence[-1]) # Das letzte Element mithilfe von Indexing auswählen

  print(sequence[1:-1]) # Die Mitte der Sequenz mithilfe von Slicing auswählen

  print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen

  print(sequence[-4:]) # Die letzten vier Elemente mithilfe von negativem Indexing auswählen

  if len(sequence) <= 5:

    print(sequence) # Sequenzen mit fünf oder weniger Elementen direkt ausgeben

  elif len(sequence) == 8:

    print(sequence[2:-2]) # Zwei Elemente am Anfang und am Ende weglassen (genau acht Elemente)

  else:

    print(sequence[-4:]) # Die letzten vier Elemente für alle anderen Sequenzen auswählen

# Testfälle

eingabe1 = "ABCDE"

eingabe2 = "FGHIJKLMN"

eingabe3 = [1, 2, 3, 4, 5, 6, 7, 8]

print_sequence_parts(eingabe1)

print_sequence_parts(eingabe2)

print_sequence_parts(eingabe3)

0
Lukasstei22 
Fragesteller
 27.10.2023, 21:37
@KarlRanseierIII

bei Mir kommt ein syntax error also invalid non-printable character irgendwie

0
Lukasstei22 
Fragesteller
 27.10.2023, 21:42
@Lukasstei22

Habe nochmal genauer geschaut, dort steht ungültiges Zeichen im Token, also irgendwie in jeder zeile

0
Lukasstei22 
Fragesteller
 27.10.2023, 21:54
@regex9

Hatte es bei Visual code probiert und dort kam das dann

0
regex9  27.10.2023, 21:59
@Lukasstei22

In der unteren Leiste von VS Code wird die Kodierung für deine Datei angezeigt (UTF-8/Windows 1252/ISO-8859-1/...). Klicke auf diese Fläche und wähle Save with Encoding > UTF-8. Öffne die Datei anschließend erneut und prüfe nochmal.

2
KarlRanseierIII  27.10.2023, 22:00
@Lukasstei22
def print_sequence_parts(sequence):
  print(sequence[-1]) # Das letzte Element mithilfe von Indexing auswählen
  print(sequence[1:-1]) # Die Mitte der Sequenz mithilfe von Slicing auswählen
  print(sequence[len(sequence)//2:]) # Zweite Hälfte auswählen
  print(sequence[-4:]) # Die letzten vier Elemente mithilfe von negativem Indexing auswählen
  if len(sequence) <= 5:
    print(sequence) # Sequenzen mit fünf oder weniger Elementen direkt ausgeben
  elif len(sequence) == 8:
    print(sequence[2:-2]) # Zwei Elemente am Anfang und am Ende weglassen (genau acht Elemente)
  else:
    print(sequence[-4:]) # Die letzten vier Elemente für alle anderen Sequenzen auswählen

# Testfälle
eingabe1 = "ABCDE"
eingabe2 = "FGHIJKLMN"
eingabe3 = [1, 2, 3, 4, 5, 6, 7, 8]
print_sequence_parts(eingabe1)
print_sequence_parts(eingabe2)
print_sequence_parts(eingabe3)

Hiermal Dein Source mit Formatierung, den habe ich so 1:1 an python gefüttert ohne Fehlermeldungen.

Die Frage ist also in welcher Texkodierung Dein Editor speichert und was Dein python als Standardkodierung erwartet.

1
KarlRanseierIII  27.10.2023, 22:05
@KarlRanseierIII
# -*- coding: utf-8 -*-

Neben dem von RegEx gesagten, kannst Du so am Anfang der Datei auch die Kodierung festlegen, speicherst Du in utf-8 und schreibst das in den Source, dann kann ein Interpreter, der eigentlich z.B: eine iso-8859-1 erwartet den Quellcode trotzdem verarbeiten.

Ggf. kann VS sogar aus dem Kommentar direkt die richtige Kodierung fürs Abspeichern ermitteln.

2
1) Das letzte Element soll mithilfe von Indexing ausgewählt werden.

Hierzu verwendet man den Index -1. Minuszahlen als Indexangabe bedeuten, dass von hinten bzw. rechts gezählt wird:

print(eingabe[-1])

# "ABCDE" → "E"
# "FGHIJKLMN" → "N"
# [1, 2, 3, 4, 5, 6, 7, 8] → 8

Siehe dazu den Abschnitt „Negative Indexing“ bei W3Schools.

2) Die Sequenz soll mithilfe von Slicing so reduziert werden, dass das erste und letzte Element wegfallen und nur die Mitte übrig bleibt.

Man gibt den Start- und den Endindex an, getrennt durch einen Doppelpunkt. Der Ausschnitt des Strings (Substring) oder der Liste beginnt beim zweiten Zeichen (Index 1) und endet vor dem letzten (Index -1):

print(eingabe[1:-1])

# "ABCDE" → "BCD"
# "FGHIJKLMN" → "GHIJKLM"
# [1, 2, 3, 4, 5, 6, 7, 8] → [2, 3, 4, 5, 6, 7]
# und auch: "XY" → "" sowie "Z" → ""

Siehe dazu diese Seite bei W3Schools.

3) Die Sequenz soll mithilfe von Slicing so reduziert werden, dass nur die zweite Hälfte übrig bleibt. Bei Sequenzen mit gerader Anzahl von Elementen soll genau die zweite Hälfte übrig sein, bei Sequenzen mit ungerader Anzahl von Elementen soll das Element in der Mitte mit ausgegeben werden.

Die Länge des Strings oder der Liste (len()-Funktion) teilt man mit dem Operator // durch 2. Mit zwei Schrägstrichen/Slashes statt mit einem wird das Ergebnis der Division abgerundet (entspricht der floor()-Funktion), wodurch auch gleich das Zeichen oder Element in der Mitte des Strings bzw. der Liste mitkommt. Hinter dem Doppelpunkt gibt man keine Zahl an, wenn alle übrigen Zeichen oder Elemente bis zum Ende ausgegeben werden sollen:

print(eingabe[len(eingabe) // 2:])

# "ABCDE" → "CDE"
# "FGHIJKLMN" → "JKLMN"
# [1, 2, 3, 4, 5, 6, 7, 8] → [5, 6, 7, 8]
# und auch: "A" → "A"

Siehe dazu diese Frage bei StackOverflow.

4) Die Sequenz soll mithilfe von Indexing mit negativen Zahlen so reduziert werden, dass nur die letzten vier Elemente übrig bleiben.

-4 gibt man als Startindex an, wobei man den Endindex auslässt. Dadurch werden ab dem 4. Zeichen von rechts bis zum Ende des Strings oder der Liste ausgewählt:

print(eingabe[-4:])

# "ABCDE" → "BCDE"
# "FGHIJKLMN" → "KLMN"
# [1, 2, 3, 4, 5, 6, 7, 8] → [5, 6, 7, 8]
# und auch: "XY" → "XY"

Siehe dazu diese Frage bei StackOverflow.

5) Die Sequenz soll abhängig von der Länge reduziert werden: Sequenzen mit fünf oder weniger Elementen sollen ohne weiteres ausgegeben werden, aus Sequenzen mit genau acht Elementen sollen zwei Elemente am Anfang und zwei Elemente am Ende wegfallen, bei allen anderen Sequenzen sollen die letzten vier Elementen ausgegeben werden.

Dazu verwendet man if, elif und else, um die Länge des Strings oder der Liste zu überprüfen. Alles weitere ist bereits bekannt:

if len(eingabe) <= 5:
    print(eingabe)
elif len(eingabe) == 8:
    print(eingabe[2:-2])
else:
    print(eingabe[-4:])

# "ABCDE" → "ABCDE"
# "FGHIJKLMN" → "KLMN"
# [1, 2, 3, 4, 5, 6, 7, 8] → [3, 4, 5, 6]