Zum Inhalt

Python-Grundlagen und Code-Herausforderungen

Willkommen zum praktischen Übungsarbeitsbuch. Dieser Abschnitt enthält realistische Probleme, mit denen Sie Ihr grundlegendes algorithmisches Denken, Ihre Optimierungsstrategien und Ihre technischen Arbeitsabläufe testen können.


Community-Herausforderungen und externe Ressourcen

Um Ihre Übungsroutine über dieses Modulverzeichnis hinaus zu erweitern, erkunden Sie dieses kuratierte Repository mit strukturierten täglichen Programmiersprints:


Übungsportfolio

1: TYPKONVERTIERUNG

Frage: Erstellen Sie ein Laufzeitkonsolenprogramm, das zur Eingabe eines Geburtsjahres auffordert, es in eine Ganzzahl umwandelt, das Alter basierend auf dem Jahr 2025 berechnet und es ausgibt.

Hinweis: Der Text von input() ist standardmäßig ein String (str). Sie müssen es in eine Ganzzahl umwandeln, um Berechnungen durchzuführen.

Konzept: Variablen und mathematische Operationen

birth_year = input("Enter your birth year: ")
age = 2025 - int(birth_year)

print (f'your age is: {age}')

2: PASSWORTPRÜFUNG

Frage: Erfassen Sie einen Benutzernamen und ein Passwort, berechnen Sie die Passwortlänge, maskieren Sie es mit Sternchen (*) und drucken Sie eine Bestätigungsnachricht aus.

Hinweis: Multiplizieren Sie ein Zeichenfolgenzeichen mit einer Ganzzahl (z. B. „*“ * 5), um es zu wiederholen. Verwenden Sie len() für die Länge.

Konzept: Strings & Indizierung & Variablen

username = input ("Enter your Username")
password = input ("Enter your password")
password_length = len(password)
hidden_password = password_length * '*'

print(f"Hey {username}, your password {hidden_password} is {password_length} letter long")

3: LOGISCHER OPERATOR

Frage: Werten Sie die booleschen Flags is_magician und is_expert aus, um abhängig von ihrer Fähigkeitskombination unterschiedliche Nachrichten zu drucken.

Hinweis: Kombinieren Sie logische Prüfungen mit und zusammen mit not für negative Zustandsauswertungen.

Konzept: Boolescher Typ und bedingte Logik

is_magician = True
is_expert = False

if is_magician and is_expert:
    print('you are a master magician')
elif is_magician and not is_expert:
    print('at least you\'re getting there')
elif not is_magician:
    print('you need magic powers')

4: SCHWIERIGER ZÄHLER

Frage: Berechnen Sie die kumulative Gesamtsumme der Zahlen von 1 bis 10 innerhalb einer Sequenz, ohne die Zwischenschritte auszugeben.

Hinweis: Lassen Sie Ihre endgültige Druckanweisung vollständig außerhalb der Schleife eingerückt, um eine Iterationsprotokollierung zu vermeiden.

Konzept: Schleifen und Listen

myList = [1,2,3,4,5,6,7,8,9,10]
counter = 0                         #we need varible on the outside of loop

for i in myList:
    counter = counter + i
print(counter)                      #the print indentation to be outside of the loop to avoid iteration

5: INDEX-FINDER

Frage: Erzeugen Sie einen Bereich bis 100, scannen Sie die Sequenz und drucken Sie den genauen Listenindex aus, wenn der Wert 50 erreicht.

Hinweis: Die integrierte Funktion enumerate() generiert neben Schleifenelementen automatisch sequentielle Tracker-Schlüssel.

Konzept: Schleifen und Listen

for i,char in enumerate (list(range(100))):
    if char == 50:
        print (f'index of 50 is : {i}')

6: GUI-ÜBUNG

Frage: Schleife über eine verschachtelte mehrdimensionale Binärmatrix, um Sternchen (*) für echte Einträge und Leerzeichen für falsche Einträge auszugeben.

Hinweis: Legen Sie das Schlüsselwortargument end='' in Ihrer print-Anweisung fest, um automatische Zeilenumbrüche zu verhindern.

Konzept: Schleifen und Funktionen

picture = [
    [0,0,0,1,0,0,0],
    [0,0,1,1,1,0,0],
    [0,1,1,1,1,1,0],
    [1,1,1,1,1,1,1],
    [0,0,0,1,0,0,0],
    [0,0,0,1,0,0,0]
]

# Generates a Christmas tree

def show_tree():
    for row in picture:                #for loop, item, variable
        for pixel in row:              #nesting, item of item(pixels in row)
            if pixel:                  #conditional logic, item & logical operator(pixel == 1) or just pixel because we don't need 1(its a truthy value)
                print('*', end='')     #Default behavior: newline after each print, using end=''empty string
            else:
                print(' ', end='')
        print('')                      #need new line after every list

show_tree()

7: DUPLIKATE FINDEN

Frage: Extrahieren und isolieren Sie sich wiederholende doppelte Zeichen aus einer Rohliste in ein sauberes Validierungsarray ohne Wiederholung.

Hinweis: Verfolgen Sie Vorkommen mit .count() und verwenden Sie eine nicht bedingte Prüfung, um Duplikate zu vermeiden.

Konzept: Listen und bedingte Logik

some_list = ['a', 'b', 'c', 'd', 'b', 'm', 'n', 'n']

duplicates = []

for char in some_list:
    if some_list.count(char) > 1:
        if char not in duplicates:          #avoids repeatability
            duplicates.append(char)
                                            #for loop, .count() & .append(), if, in & not
print(duplicates)

8: ÜBERPRÜFEN SIE DAS FAHRERALTER

Frage: Schreiben Sie eine Engine, die eine optionale Altersvariable auswertet, um unterschiedliche Fahrerberechtigungsprofile über drei Gates hinweg zu drucken.

Hinweis: Konfigurieren Sie einen sicheren Fallback-Wert (z. B. Alter = 0) direkt in Ihren Funktionsargumentdefinitionen.

Konzept: Funktionen und bedingte Logik

def checkDriverAge(age = 0):
    if int(age) < 18:
        print("Sorry, you are too young to drive this car. Powering off")
    elif int(age) > 18:
        print("Powering On. Enjoy the ride!")
    elif int(age) == 18:
        print("Congratulations on your first year of driving. Enjoy the ride!")

checkDriverAge()

9: FUNKTIONSÜBUNG

Frage: Erstellen Sie eine Funktion, die ungerade Ziffern aus einem Listenparameter löscht, die geraden Elemente extrahiert und die höchste gerade Zielzahl zurückgibt.

Hinweis: Verwenden Sie das Modulo-Parameterelement % 2 == 0, um Geraden zu ermitteln, und schließen Sie dann Ihr Endergebnis in max() ein.

Konzept: Funktionen und mathematische Operationen

def highest_even(li):
    evens = []
    for item in li:
        if item % 2 == 0:
            evens.append(item)
    return max(evens)

print(highest_even([1,2,3,4,5,11,21,10]))

10: ÜBERALL KATZEN

Frage: Richten Sie einen dynamischen Basis-Blueprint zur Verfolgung von Katzenprofilen ein, instanziieren Sie drei Objekte und verwenden Sie ein funktionales Dienstprogramm, um das Top-Alter zu extrahieren.

Hinweis: Mit der Syntax *args kann eine Funktion eine variable Anzahl von Positionsargumenten sauber als iterierbare Liste verarbeiten.

Konzept: Objektorientierte Programmierung

class Cat:
    species = 'mammal'

    def __init__(self, name, age):
        self.name = name
        self.age = age


cat1 = Cat('whisker', 10)
cat2 = Cat('kitty', 3)
cat3 = Cat('jewels', 6)


def oldest_cat(*args):
    return max(args)


print(
    f'The oldest cat is {oldest_cat(cat1.age, cat2.age, cat3.age)} years old')

11: Vererbungsübung

Frage: Entwerfen Sie ein architektonisches Basisklassenlayout und Unterklassen, die polymorph identische Tracking-Verhaltensweisen ausführen.

Hinweis: Übergeben Sie untergeordnete Objekte innerhalb struktureller Tracking-Arrays, um benutzerdefinierte überschriebene Konfigurationen sauber auszuführen.

Konzept: Objektorientierte Programmierung

class Pets():
    animals = []
    def __init__(self, animals):
        self.animals = animals

    def walk(self):
        for animal in self.animals:
            print(animal.walk())

class Cat():

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def walk(self):
        return f'{self.name} is just walking around'

class Simon(Cat):
    def sing(self, sounds):
        return f'{sounds}'

class Sally(Cat):
    def sing(self, sounds):
        return f'{sounds}'

#1 Add another Cat

class Jerry(Cat):
    def sing(self, sounds):
        return f'{sounds}'

my_cats = [Simon('Simon', 5), Sally('Sally', 3), Jerry('Jerry', 4)]

my_pets = Pets(my_cats)

my_pets.walk()

12: LISTE ERWEITERN

Frage: Erbt vom nativen integrierten Listenprimitiv, überschreibt jedoch dessen Eigenschaft zur Berechnung der magischen Dunder-Länge, um 1000 zurückzugeben.

Hinweis: Durch die Unterklassifizierung von Grundelementen wie der Liste bleiben Kernverhalten wie .append() erhalten und gleichzeitig gezielte Dunder-Überschreibungen möglich.

Konzept: Objektorientierte Programmierung und Listen

class SuperList(list):          #inheriting from built-in with parameter list
    def __len__(self):
        return 1000


super_list1 = SuperList()

print(len(super_list1))
super_list1.append(5)
print(super_list1[0])

print(issubclass(SuperList, list))

13: FUNKTIONALE PROGRAMMIERÜBUNG

Frage: Führen Sie Datenpipelines aus, indem Sie funktionale Methoden anwenden, um Arrays per Karte zu verändern, Paare per Zip zu sequenzieren und Daten mit Filter einzuschränken.

Hinweis: Reine Funktionsschritte verändern Sammlungen nicht direkt; Wrapping-Ausgaben in typexplizite Factorys wie list().

Konzept: Funktionale Programmierung

from functools import reduce

my_pets = ['sisi', 'bibi', 'titi', 'carla']

def capitalize (char):
    return char.upper()

print(list(map(capitalize, my_pets)))


my_strings = ['a', 'b', 'c', 'd', 'e']
my_numbers = [5,4,3,2,1]

print(tuple(zip(sorted(my_numbers), my_strings)))


scores = [73, 20, 65, 19, 76, 100, 88]

def greater_50(num):
    return num >= 50

print(list(filter(greater_50, scores)))


def accumulator(acc, item):
    return acc + item

print(reduce(accumulator, (my_numbers + scores)))

14: Lambda-ÜBUNG

Frage: Erstellen Sie anonyme mathematische Transformationsformeln und führen Sie benutzerdefinierte Sortierpfade für Tupellisten unter Verwendung spezifischer sekundärer Indexschlüssel aus.

Hinweis: Geben Sie in Ihrem Schlüsselwortparameter .sort(key=...) eine Lambda-Skriptdefinition an, die auf Zielzuordnungskoordinaten verweist.

Konzept: Funktionale Programmierung und Tupel

my_list = [5,4,3]

print(list(map(lambda i: i ** 2, my_list)))

# List sorting

a = [(0,2), (4,3), (9,9), (10,-1)]

a.sort(key= lambda x: x[1])   #sorts according to second item in tuple
print(a)

15: VERSTEHENSÜBUNG

Frage: Refaktorieren Sie mehrzeilige Schleifen mithilfe von Listenverständnissen und Set-Castings, um doppelte Elemente in einem optimierten Betriebsschritt zu bereinigen.

Hinweis: Verschachteln Sie die Array-Prüfungen Ihrer Sammlung direkt innerhalb der Listenverfolgungsgrenzen [x für x in li if ...].

Konzept: Funktionale Programmierung und Mengen

some_list = ['a', 'b', 'c', 'd', 'b', 'm', 'n', 'n']

duplicates = list(set([x for x in some_list if some_list.count(x) > 1]))

print(duplicates)

16: DEKORATORÜBUNG

Frage: Entwickeln Sie ein Dekoratormuster für Funktionen höherer Ordnung mit dem Namen @authenticated, das Benutzerprofilaufrufe abfängt, um Tracking-Eigenschaften zu validieren.

Hinweis: Die Decorator-Wrapper-Ebene nimmt funktionale Argumente entgegen und prüft Indizes, bevor sie innere Ziele auslöst.

Konzept: Dekorateure

user1 = {
    'name': 'Sorna',
    'valid': True 
}

def authenticated(fn):
    def wrapper(*args, **kwargs):
        if args[0]['valid']== True:        #== True is not needed because it checks for truthy value
            return fn(*args, **kwargs)
        else:
            return print('invalid user')
    return wrapper

@authenticated
def message_friends(user):
    print('message has been sent')

message_friends(user1)

17: ÜBUNG ZUR FEHLERBEHANDLUNG

Frage: Erzwingen Sie defensive Eingabepipelines innerhalb unendlicher Eingabesequenzen, die Berechnungs- und Strukturtypfehler ordnungsgemäß behandeln.

Hinweis: Verwenden Sie explizite Ausnahmeparameter wie „except ValueError:“ und führen Sie Teardown-Zustände mit „finally:“ aus.

Konzept: Fehlerbehandlung

while True:
    try:                   
        age = int(input('Enter your age:' ))
        10/age
    except ValueError:      
        print('please enter a valid number')
        #continue          #continue, if value error occurs. the code starts over 
    except ZeroDivisionError:
        print('Enter value more than Zero')
        break               #breaks from the loop, does'nt print the actual age
    else:                  
        print('thank you')
        #break               #breaks out of the loop 
    finally:
        print('ok, I am finally done')

    print('can you hear me?')   #it does'nt get printed until the break statement is present

18: FIBONACCI-ÜBUNG

Frage: Konstruieren Sie zwei numerische Progressionsrechner, die Sequenzgenerierungsmetriken über Listenarrays im Vergleich zu verzögert ausgewerteten Generatoren verfolgen.

Hinweis: Generatoren setzen die yield-Anweisung ein, um Elemente zurückzugeben, die Echtzeitzustände nacheinander verfolgen, anstatt Werte in RAM-Blöcken zu speichern.

Konzept: Generatoren

# generators keeps the value in same location and just prints it out instead of saving in the memory
def fib_gen(num):
    a = 0
    b = 1
    for item in range(num):
        yield a
        temp = a
        a = b 
        b = temp + a

for i in fib_gen(20):
    print(i)

# list keep every value in different locations
def fib_list(num):
    a = 0
    b = 1
    list = []
    for item in range(num):
        list.append(a)
        temp = a
        a = b 
        b = temp + a
        return list

print(fib_list(20))

19: ERraten Sie eine Zahl

Frage: Codieren Sie eine interaktive Gaming-Schnittstelle, indem Sie ganzzahlige Kriteriengrenzen auswählen, Eingaben für die Schleifenanalyse auffordern und vor Abstürzen bei der Eingabe schützen.

Hinweis: Nutzen Sie Standard-Try/Except-Konstrukte über Ihre Konvertierungsebenen, um ungültige Syntaxanomalien sauber abzufangen.

Konzept: Module & Pakete & Fehlerbehandlung

import random

print('GUESS A NUMBER')
x = random.randint(1, 10)

# if argv[1] and argv[2]:
#     x = randint(int(argv[1]), int(argv[2]))
# else:
print(x)

while True:
    try:
        guess = int(input('enter a numbers 1-10: '))
        if guess is x:
            print('You are a genius')
            break
    except ValueError:
        print('you did something wrong')
        continue

20: ÜBERSETZER

Frage: Erstellen Sie einen Automatisierungsschritt, der Terminalbefehle verwendet, um Abhängigkeiten herunterzuladen, Dateiströme zu analysieren und Übersetzungen zu protokollieren.

Hinweis: Stellen Sie Systempfade sicher umgeben von open(...)-Mustern bereit, um Automatisierungsregeln zum Öffnen/Schließen von Dateien nahtlos zu handhaben.

Konzept: Datei-I/O- und Entwicklungstools

import subprocess
subprocess.check_call([__import__('sys').executable, '-m', 'pip', 'install', 'translate'])

from translate import Translator

translator = Translator(to_lang='ja')
try:
    with open("C:/Users/marwa/OneDrive/Desktop/test.txt", mode='r') as my_file:
        text = my_file.read()
        translation = translator.translate(text)
        with open('./test-ja.txt', 'w') as my_file2:
            my_file2.write(translation)
except FileNotFoundError as err:
    print('file not found')