Python Aufgabe?

2 Antworten

Fast, aber es gibt ein paar kleine Korrekturen und Verbesserungen, die notwendig sind, um sicherzustellen, dass Ihr Programm korrekt funktioniert. Hier sind die Anpassungen:

1. Korrigieren der Funktions- und Variablennamen (z.B. `caesarencrypt` in `caesar_encrypt` und `encryptedtext` in `encrypted_text`).

2. Hinzufügen von Unterstrichen (`__`) in der `__name__` Bedingung.

3. Sicherstellen, dass der Dateihandling-Teil richtig funktioniert.

Hier ist die korrigierte Version des Codes:

```python

import sys

def caesar_encrypt(text, shift):

encrypted_text = ""

for char in text:

if char.islower():

encrypted_text += chr((ord(char) - ord('a') + shift) % 26 + ord('a'))

else:

encrypted_text += char

return encrypted_text

def main():

if len(sys.argv) != 4:

print("Usage: python Caesar.py <inputfile> <outputfile> <shift>")

sys.exit(1)

input_filename = sys.argv[1]

output_filename = sys.argv[2]

shift = int(sys.argv[3])

try:

with open(input_filename, 'r') as file:

text = file.read()

encrypted_text = caesar_encrypt(text, shift)

with open(output_filename, 'w') as file:

file.write(encrypted_text)

print(f"Verschlüsselter Text wurde in {output_filename} geschrieben.")

except FileNotFoundError:

print(f"Die Datei {input_filename} wurde nicht gefunden.")

sys.exit(1)

if __name__ == "__main__":

main()

```

### Erklärung der Änderungen:

1. **Funktion `caesar_encrypt`**: Der Funktionsname wurde korrigiert.

2. **Variablenname `encrypted_text`**: Der Variablenname `encrypted_text` wurde innerhalb der Funktion angepasst, um konsistent zu sein.

3. **`__name__ == "__main__"`**: Die Bedingung wurde korrekt formatiert, um das Skript ausführbar zu machen.

4. **Error Handling**: Das Exception Handling bleibt gleich, um sicherzustellen, dass eine Datei-Fehlermeldung korrekt ausgegeben wird.

Mit diesen Änderungen sollte Ihr Programm wie gewünscht funktionieren. Stellen Sie sicher, dass Sie es testen, um sicherzustellen, dass alles wie erwartet funktioniert.

Woher ich das weiß:Recherche

Ich vereinfache mal erst deine Fragestellung, damit man überhaupt weiß, was gemacht wird.

Schreiben Sie ein Programm namens Caesar.py, das drei Eingaben erwartet: zwei Dateinam en und eine Ganzzahl.
Eingabe:
Der erste Dateiname gibt die Datei an, deren Inhalt verschlüsselt werden soll.
Der zweite Dateiname gibt die Datei an, in die das verschlüsselte Ergebnis gespeichert wird.
Die Ganzzahl dient als Schlüssel für die Caesar-Verschlüsselung.
Funktion:
Das Programm soll den Text aus der ersten Datei einlesen und dabei nur Kleinbuchstaben (a-z) verschlüsseln.
Alle anderen Zeichen (z.B. Großbuchstaben, Zahlen, Satzzeichen) sollen unverändert bleiben.
Die Verschlüsselung erfolgt nach dem Prinzip der Caesar-Verschlüsselung, bei der jeder Buchstabe um die Anzahl der Stellen verschoben wird, die durch den Schlüssel vorgegeben ist.
Wenn das Ende des Alphabets erreicht ist, soll wieder bei 'a' begonnen werden.
Ausgabe:
Der verschlüsselte Text wird in die zweite Datei geschrieben.

Dein Code passt (bitte schreib den Code nächstes mal nicht als one-liner), aber ich hab deine caesar_encrypt methode etwas vereinfacht und eine Library benutzt. Falls das bei deiner Fragestellung nicht erlaubt ist, dann lass es so, wie du es gemacht hast, das ist auch gut.

Des ist vielleicht ein wenig übersichtlicher:

import string

def caesar_encrypt(text, shift):
    alphabet = string.ascii_lowercase
    shifted_alphabet = alphabet[shift:] + alphabet[:shift]
    translation_table = str.maketrans(alphabet, shifted_alphabet)
    return text.translate(translation_table)

Der Rest ist fast OK. Du hast alles gemacht, die Aufgabestellung ist erfüllt, aber ich hab dir noch ein bissl Error Handling eingebaut.
Statt den shift direkt in einen Int zu konvertieren, würde ich:

try:
  shift = int(sys.argv[3])
except ValueError:
  print("Error: Der Shift Wert muss ein Integer sein.")
  sys.exit(1)

benutzen. Wenn du das nicht hast, würde dein Programm crashen, falls man für den Shift etwas anderes als einen Integer eingibt.

Lg, Nico

PS: Ja, ich habe für die Aufgabestellung ChatGPT benutzt. Deinen One-Liner Code habe ich auch mit ChatGPT formatiert, damit ich ihn lesen kann. Den Rest, den Code, und meine gesamte restliche Antwort habe ich aber selber geschrieben.

Woher ich das weiß:Studium / Ausbildung – Offizielle Ausbildung im Bereich IT und Software